Use built-in graphql errors

This commit is contained in:
Christian Cueni 2020-05-12 09:56:48 +02:00
parent edd431671f
commit 685fa3ff34
8 changed files with 24 additions and 55 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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)

View File

@ -1,8 +1,5 @@
mutation Coupon($input: CouponInput!){
coupon(input: $input) {
success
errors {
field
}
}
}

View File

@ -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.');
},
};

View File

@ -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.'];
}
});
}
});

View File

@ -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:

View File

@ -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')