Use built-in graphql errors
This commit is contained in:
parent
edd431671f
commit
685fa3ff34
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { GraphQLError } from "graphql";
|
||||||
|
|
||||||
const schema = require('../fixtures/schema.json');
|
const schema = require('../fixtures/schema.json');
|
||||||
|
|
||||||
describe('Email Verifcation', () => {
|
describe('Email Verifcation', () => {
|
||||||
|
|
@ -10,12 +12,9 @@ describe('Email Verifcation', () => {
|
||||||
cy.mockGraphql({
|
cy.mockGraphql({
|
||||||
schema: schema,
|
schema: schema,
|
||||||
operations: {
|
operations: {
|
||||||
Coupon: variables => {
|
Coupon: {
|
||||||
return {
|
coupon: {
|
||||||
coupon: {
|
success: true
|
||||||
errors: [],
|
|
||||||
success: true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -45,16 +44,7 @@ describe('Email Verifcation', () => {
|
||||||
cy.mockGraphql({
|
cy.mockGraphql({
|
||||||
schema: schema,
|
schema: schema,
|
||||||
operations: {
|
operations: {
|
||||||
Coupon: variables => {
|
Coupon: new GraphQLError("invalid_coupon")
|
||||||
return {
|
|
||||||
coupon: {
|
|
||||||
errors: [{
|
|
||||||
field: 'invalid_coupon'
|
|
||||||
}],
|
|
||||||
success: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
cy.login('rahel.cueni', 'test', true)
|
cy.login('rahel.cueni', 'test', true)
|
||||||
|
|
@ -71,16 +61,7 @@ describe('Email Verifcation', () => {
|
||||||
cy.mockGraphql({
|
cy.mockGraphql({
|
||||||
schema: schema,
|
schema: schema,
|
||||||
operations: {
|
operations: {
|
||||||
Coupon: variables => {
|
Coupon: new GraphQLError("unknown_error")
|
||||||
return {
|
|
||||||
coupon: {
|
|
||||||
errors: [{
|
|
||||||
field: 'unknown_error'
|
|
||||||
}],
|
|
||||||
success: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
cy.login('rahel.cueni', 'test', true)
|
cy.login('rahel.cueni', 'test', true)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
mutation Coupon($input: CouponInput!){
|
mutation Coupon($input: CouponInput!){
|
||||||
coupon(input: $input) {
|
coupon(input: $input) {
|
||||||
success
|
success
|
||||||
errors {
|
|
||||||
field
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,8 @@ export default {
|
||||||
this.errorMessage = 'Ein Fehler ist aufgetreten. Bitte kontaktieren Sie den Administrator.';
|
this.errorMessage = 'Ein Fehler ist aufgetreten. Bitte kontaktieren Sie den Administrator.';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
.catch(() => this.errorMessage = 'Ein Fehler ist aufgetreten. Bitte kontaktieren Sie den Administrator.');
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -80,14 +80,14 @@ export default {
|
||||||
query: ME_QUERY,
|
query: ME_QUERY,
|
||||||
fetchPolicy: 'network-only',
|
fetchPolicy: 'network-only',
|
||||||
}).then(() => that.$router.push('/'));
|
}).then(() => that.$router.push('/'));
|
||||||
} else {
|
|
||||||
if (coupon.errors[0].field === 'invalid_coupon') {
|
|
||||||
that.couponErrors = ['Der angegebene Coupon-Code ist falsch.'];
|
|
||||||
} else {
|
|
||||||
that.couponErrors = ['Es ist ein Fehler aufgetreten. Bitte versuchen Sie es nochmals oder kontaktieren Sie den Administrator.'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}).catch(({message}) => {
|
||||||
|
if (message.indexOf('invalid_coupon') > -1) {
|
||||||
|
that.couponErrors = ['Der angegebene Coupon-Code ist falsch.'];
|
||||||
|
} else {
|
||||||
|
that.couponErrors = ['Es ist ein Fehler aufgetreten. Bitte versuchen Sie es nochmals oder kontaktieren Sie den Administrator.'];
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -14,16 +14,11 @@ from core.hep_client import HepClient, HepClientException
|
||||||
from users.user_signup_login_handler import check_and_create_licenses, create_role_for_user
|
from users.user_signup_login_handler import check_and_create_licenses, create_role_for_user
|
||||||
|
|
||||||
|
|
||||||
class CouponError(graphene.ObjectType):
|
|
||||||
field = graphene.String()
|
|
||||||
|
|
||||||
|
|
||||||
class Coupon(relay.ClientIDMutation):
|
class Coupon(relay.ClientIDMutation):
|
||||||
class Input:
|
class Input:
|
||||||
coupon_code_input = graphene.String()
|
coupon_code_input = graphene.String()
|
||||||
|
|
||||||
success = graphene.Boolean()
|
success = graphene.Boolean()
|
||||||
errors = graphene.List(CouponError) # todo: change for consistency
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||||
|
|
@ -33,25 +28,25 @@ class Coupon(relay.ClientIDMutation):
|
||||||
try:
|
try:
|
||||||
hep_id = info.context.user.hep_id
|
hep_id = info.context.user.hep_id
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return cls(success=False, errors=[{'field': 'not_authenticated'}])
|
raise Exception('not_authenticated')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = hep_client.coupon_redeem(coupon_code, hep_id)
|
response = hep_client.coupon_redeem(coupon_code, hep_id)
|
||||||
except HepClientException:
|
except HepClientException:
|
||||||
return cls(success=False, errors=[{'field': 'unknown_error'}])
|
raise Exception('unknown_error')
|
||||||
|
|
||||||
if not response:
|
if not response:
|
||||||
return cls(success=False, errors=[{'field': 'invalid_coupon'}])
|
raise Exception('invalid_coupon')
|
||||||
|
|
||||||
license, error_msg = check_and_create_licenses(hep_client, info.context.user)
|
license, error_msg = check_and_create_licenses(hep_client, info.context.user)
|
||||||
|
|
||||||
# todo fail if no license
|
# todo fail if no license
|
||||||
if error_msg:
|
if error_msg:
|
||||||
return cls(success=False, errors=[error_msg])
|
raise Exception(error_msg)
|
||||||
|
|
||||||
create_role_for_user(info.context.user, license.for_role.key)
|
create_role_for_user(info.context.user, license.for_role.key)
|
||||||
|
|
||||||
return cls(success=True, errors=[])
|
return cls(success=True)
|
||||||
|
|
||||||
|
|
||||||
class CouponMutations:
|
class CouponMutations:
|
||||||
|
|
|
||||||
|
|
@ -42,9 +42,6 @@ class CouponTests(TestCase):
|
||||||
mutation Coupon($input: CouponInput!){
|
mutation Coupon($input: CouponInput!){
|
||||||
coupon(input: $input) {
|
coupon(input: $input) {
|
||||||
success
|
success
|
||||||
errors {
|
|
||||||
field
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
@ -76,8 +73,7 @@ class CouponTests(TestCase):
|
||||||
def test_user_has_invalid_coupon(self, response_mock):
|
def test_user_has_invalid_coupon(self, response_mock):
|
||||||
result = self.make_coupon_mutation('COUPON--1234', self.client)
|
result = self.make_coupon_mutation('COUPON--1234', self.client)
|
||||||
|
|
||||||
self.assertFalse(result.get('data').get('coupon').get('success'))
|
self.assertEqual(result.get('errors')[0].get('message'), 'invalid_coupon')
|
||||||
self.assertEqual(result.get('data').get('coupon').get('errors')[0].get('field'), 'invalid_coupon')
|
|
||||||
|
|
||||||
@patch.object(requests, 'put', return_value=MockResponse(200, data=['201', 'Invalid Coupon']))
|
@patch.object(requests, 'put', return_value=MockResponse(200, data=['201', 'Invalid Coupon']))
|
||||||
def test_unauthenticated_user_cannot_redeem(self, response_mock):
|
def test_unauthenticated_user_cannot_redeem(self, response_mock):
|
||||||
|
|
@ -90,5 +86,4 @@ class CouponTests(TestCase):
|
||||||
|
|
||||||
result = self.make_coupon_mutation('COUPON--1234', client)
|
result = self.make_coupon_mutation('COUPON--1234', client)
|
||||||
|
|
||||||
self.assertFalse(result.get('data').get('coupon').get('success'))
|
self.assertEqual(result.get('errors')[0].get('message'), 'not_authenticated')
|
||||||
self.assertEqual(result.get('data').get('coupon').get('errors')[0].get('field'), 'not_authenticated')
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue