@appello/services
Version:
Services package with api / graphql
157 lines (156 loc) • 5.77 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const graphql_1 = require("graphql");
const consts_1 = require("../../consts");
const createProcessGqlErrorResponse_1 = require("./createProcessGqlErrorResponse");
describe('createProcessGqlErrorResponse', () => {
let nonFieldError;
let unhandledFieldErrors;
let unknownError;
let handledErrors;
const processGqlErrorResponse = (0, createProcessGqlErrorResponse_1.createProcessGqlErrorResponse)({
onNonFieldError: message => {
nonFieldError = message;
},
onUnhandledFieldErrors: errors => {
unhandledFieldErrors = errors;
},
onUnknownError: message => {
unknownError = message;
},
});
beforeEach(() => {
nonFieldError = undefined;
unhandledFieldErrors = undefined;
unknownError = undefined;
handledErrors = {};
});
test('should handle basic field error processing', () => {
const nameErrorMessage = 'Name is required';
const emailErrorMessage = 'Email is required';
const gqlError = {
graphQLErrors: [
new graphql_1.GraphQLError('Failed', {
extensions: {
code: consts_1.GqlErrorCodeEnum.UNPROCESSABLE_ENTITY,
explain: {
name: nameErrorMessage,
user: {
email: emailErrorMessage,
},
},
},
}),
],
};
processGqlErrorResponse(gqlError, {
fields: ['name', 'user.email'],
setFieldError: (name, message) => {
handledErrors[name] = message;
},
});
expect(handledErrors).toMatchObject({
name: nameErrorMessage,
'user.email': emailErrorMessage,
});
expect(nonFieldError).toBeUndefined();
expect(unhandledFieldErrors).toBeUndefined();
expect(unknownError).toBeUndefined();
});
test('should handle non-field errors', () => {
const nonFieldMessage = 'General validation error';
const gqlError = {
graphQLErrors: [
new graphql_1.GraphQLError('Failed', {
extensions: {
code: consts_1.GqlErrorCodeEnum.UNPROCESSABLE_ENTITY,
explain: {
non_field: nonFieldMessage,
},
},
}),
],
};
processGqlErrorResponse(gqlError, {
fields: ['name'],
setFieldError: (name, message) => {
handledErrors[name] = message;
},
});
expect(nonFieldError).toBe(nonFieldMessage);
expect(handledErrors).toEqual({});
expect(unhandledFieldErrors).toBeUndefined();
expect(unknownError).toBeUndefined();
});
test('should handle unhandled field errors', () => {
const nameErrorMessage = 'Name is required';
const emailErrorMessage = 'Email is required';
const gqlError = {
graphQLErrors: [
new graphql_1.GraphQLError('Failed', {
extensions: {
code: consts_1.GqlErrorCodeEnum.UNPROCESSABLE_ENTITY,
explain: {
name: nameErrorMessage,
email: emailErrorMessage,
},
},
}),
],
};
processGqlErrorResponse(gqlError, {
fields: ['name'],
setFieldError: (name, message) => {
handledErrors[name] = message;
},
});
expect(handledErrors).toMatchObject({
name: nameErrorMessage,
});
expect(unhandledFieldErrors).toEqual([{ name: 'email', value: emailErrorMessage }]);
expect(nonFieldError).toBeUndefined();
expect(unknownError).toBeUndefined();
});
test('should work with React Hook Form setError function', () => {
const mockSetError = jest.fn();
const nameErrorMessage = 'Name is required';
const gqlError = {
graphQLErrors: [
new graphql_1.GraphQLError('Failed', {
extensions: {
code: consts_1.GqlErrorCodeEnum.UNPROCESSABLE_ENTITY,
explain: {
name: nameErrorMessage,
},
},
}),
],
};
processGqlErrorResponse(gqlError, {
fields: ['name'],
setFormError: mockSetError,
});
expect(mockSetError).toHaveBeenCalledWith('name', { message: nameErrorMessage });
});
test('should handle unknown errors when explain is missing', () => {
const gqlError = {
graphQLErrors: [
new graphql_1.GraphQLError('Failed', {
extensions: {
code: consts_1.GqlErrorCodeEnum.UNPROCESSABLE_ENTITY,
},
}),
],
};
processGqlErrorResponse(gqlError, {
fields: ['name'],
setFieldError: (name, message) => {
handledErrors[name] = message;
},
});
expect(unknownError).toBe(consts_1.GqlErrorMessagesEnum.UNKNOWN_ERROR);
expect(handledErrors).toEqual({});
expect(nonFieldError).toBeUndefined();
expect(unhandledFieldErrors).toBeUndefined();
});
});