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');
|
||||
|
||||
describe('Email Verifcation', () => {
|
||||
|
|
@ -10,12 +12,9 @@ describe('Email Verifcation', () => {
|
|||
cy.mockGraphql({
|
||||
schema: schema,
|
||||
operations: {
|
||||
Coupon: variables => {
|
||||
return {
|
||||
coupon: {
|
||||
errors: [],
|
||||
success: true
|
||||
}
|
||||
Coupon: {
|
||||
coupon: {
|
||||
success: true
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
@ -45,16 +44,7 @@ describe('Email Verifcation', () => {
|
|||
cy.mockGraphql({
|
||||
schema: schema,
|
||||
operations: {
|
||||
Coupon: variables => {
|
||||
return {
|
||||
coupon: {
|
||||
errors: [{
|
||||
field: 'invalid_coupon'
|
||||
}],
|
||||
success: false
|
||||
}
|
||||
}
|
||||
},
|
||||
Coupon: new GraphQLError("invalid_coupon")
|
||||
}
|
||||
});
|
||||
cy.login('rahel.cueni', 'test', true)
|
||||
|
|
@ -71,16 +61,7 @@ describe('Email Verifcation', () => {
|
|||
cy.mockGraphql({
|
||||
schema: schema,
|
||||
operations: {
|
||||
Coupon: variables => {
|
||||
return {
|
||||
coupon: {
|
||||
errors: [{
|
||||
field: 'unknown_error'
|
||||
}],
|
||||
success: false
|
||||
}
|
||||
}
|
||||
},
|
||||
Coupon: new GraphQLError("unknown_error")
|
||||
}
|
||||
});
|
||||
cy.login('rahel.cueni', 'test', true)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
mutation Coupon($input: CouponInput!){
|
||||
coupon(input: $input) {
|
||||
success
|
||||
errors {
|
||||
field
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,7 +64,8 @@ export default {
|
|||
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,
|
||||
fetchPolicy: 'network-only',
|
||||
}).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
|
||||
|
||||
|
||||
class CouponError(graphene.ObjectType):
|
||||
field = graphene.String()
|
||||
|
||||
|
||||
class Coupon(relay.ClientIDMutation):
|
||||
class Input:
|
||||
coupon_code_input = graphene.String()
|
||||
|
||||
success = graphene.Boolean()
|
||||
errors = graphene.List(CouponError) # todo: change for consistency
|
||||
|
||||
@classmethod
|
||||
def mutate_and_get_payload(cls, root, info, **kwargs):
|
||||
|
|
@ -33,25 +28,25 @@ class Coupon(relay.ClientIDMutation):
|
|||
try:
|
||||
hep_id = info.context.user.hep_id
|
||||
except AttributeError:
|
||||
return cls(success=False, errors=[{'field': 'not_authenticated'}])
|
||||
raise Exception('not_authenticated')
|
||||
|
||||
try:
|
||||
response = hep_client.coupon_redeem(coupon_code, hep_id)
|
||||
except HepClientException:
|
||||
return cls(success=False, errors=[{'field': 'unknown_error'}])
|
||||
raise Exception('unknown_error')
|
||||
|
||||
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)
|
||||
|
||||
# todo fail if no license
|
||||
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)
|
||||
|
||||
return cls(success=True, errors=[])
|
||||
return cls(success=True)
|
||||
|
||||
|
||||
class CouponMutations:
|
||||
|
|
|
|||
|
|
@ -42,9 +42,6 @@ class CouponTests(TestCase):
|
|||
mutation Coupon($input: CouponInput!){
|
||||
coupon(input: $input) {
|
||||
success
|
||||
errors {
|
||||
field
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
||||
|
|
@ -76,8 +73,7 @@ class CouponTests(TestCase):
|
|||
def test_user_has_invalid_coupon(self, response_mock):
|
||||
result = self.make_coupon_mutation('COUPON--1234', self.client)
|
||||
|
||||
self.assertFalse(result.get('data').get('coupon').get('success'))
|
||||
self.assertEqual(result.get('data').get('coupon').get('errors')[0].get('field'), 'invalid_coupon')
|
||||
self.assertEqual(result.get('errors')[0].get('message'), 'invalid_coupon')
|
||||
|
||||
@patch.object(requests, 'put', return_value=MockResponse(200, data=['201', 'Invalid Coupon']))
|
||||
def test_unauthenticated_user_cannot_redeem(self, response_mock):
|
||||
|
|
@ -90,5 +86,4 @@ class CouponTests(TestCase):
|
|||
|
||||
result = self.make_coupon_mutation('COUPON--1234', client)
|
||||
|
||||
self.assertFalse(result.get('data').get('coupon').get('success'))
|
||||
self.assertEqual(result.get('data').get('coupon').get('errors')[0].get('field'), 'not_authenticated')
|
||||
self.assertEqual(result.get('errors')[0].get('message'), 'not_authenticated')
|
||||
|
|
|
|||
Loading…
Reference in New Issue