UNPKG

@appello/services

Version:

Services package with api / graphql

157 lines (156 loc) 5.77 kB
"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(); }); });