UNPKG

graphql-validity

Version:

Make business logic validation easy on the graphql side without adding any declarations or modifications to the existing graphql schema.

127 lines 6.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const sinon = require("sinon"); const validation_1 = require("../src/validation"); const helpers_1 = require("../src/helpers"); describe('validation', () => { describe('getValidators', () => { before(() => { validation_1.FieldValidationDefinitions['$'] = [() => { return new Error('test1'); }]; validation_1.FieldValidationDefinitions['*'] = [() => { return new Error('test2'); }]; validation_1.FieldValidationDefinitions['TestObj'] = [() => { return new Error('test3'); }]; validation_1.FieldValidationDefinitions['TestObj:TestField'] = [() => { return new Error('test4'); }]; }); it('Should return object with arrays for both ' + 'global and normal validator functions', () => { let result = validation_1.getValidators({ type: 'TestField', name: 'TestField' }, 'TestObj', { ___globalValidationResultsCaptured: false }); chai_1.expect(result.length).to.be.equal(3); }); }); describe('applyValidation', () => { it('should return exact value if result missing data object', () => { const result = validation_1.applyValidation({}, '{}', () => { }); chai_1.expect(result).to.be.equal('{}'); }); it('should throw JSON parsing error, if data has incorrect format', () => { chai_1.expect(validation_1.applyValidation).to.throw('Unexpected token u in JSON at position 0'); }); it('should return value if result has data object', () => { const validity = { ___globalValidationResultsCaptured: false, ___validationResults: [new Error('test2'), new Error('test1')] }; const result = validation_1.applyValidation({ __graphQLValidity: validity }, '{"data": { "result" :"test"}}', () => { }); chai_1.expect(result).to.not.be.undefined; }); it('should return errors array attached to the response', () => { const validity = { ___globalValidationResultsCaptured: false, ___validationResults: [new Error('test2'), new Error('test1')] }; const result = validation_1.applyValidation({ __graphQLValidity: validity }, '{"data": { "result" :"test"}}', () => { }); chai_1.expect(result).to.have.string('"errors":[{"message":"test2"},{"message":"test1"}]'); }); it('should call profiling handler if profiling data is present', async () => { const handler = sinon.fake(); const validity = { ___globalValidationResultsCaptured: false, ___validationResults: [new Error('test2'), new Error('test1')], ___profilingData: [], }; validation_1.applyValidation({ __graphQLValidity: validity }, '{"data": { "result" :"test"}}', handler); await new Promise((resolve) => { setTimeout(() => { resolve(); }, 1000); }); chai_1.expect(handler.calledOnce).to.be.true; }); }); describe('getValidationResults', () => { it('should return object with both global and general validation results ' + 'if ___validationResults are passed', () => { const validity = { ___globalValidationResultsCaptured: false, ___validationResults: [new Error('test2'), new Error('test1')] }; const result = validation_1.getValidationResults(validity); chai_1.expect(result).to.be.an('array'); chai_1.expect(result.length).to.equal(2); }); it('should return empty array of validation results ' + 'if ___validationResults is not passed', () => { const validity = {}; const result = validation_1.getValidationResults(validity); chai_1.expect(result).to.be.an('array').to.be.empty; }); }); describe('getResponseValidationResults', () => { it('it should add errors array to data object passed', () => { const validationError = new Error('test2'); const globalError = new Error('test1'); const validity = { ___globalValidationResultsCaptured: false, ___validationResults: [validationError, globalError] }; const data = { data: {}, errors: [new Error('test3')] }; validation_1.getResponseValidationResults(validity, data); chai_1.expect(data.errors.length).to.equal(3); }); }); describe('processError', () => { it('should return original error, if name is ValidityError or message contains _Validity_', () => { const validationError = new Error('_Validity_ test!'); const globalError = new helpers_1.ValidityError('test1'); const validity = { ___globalValidationResultsCaptured: false, ___validationResults: [validationError, globalError] }; const data = { data: {}, errors: [new Error('test3')] }; validation_1.getResponseValidationResults(validity, data); chai_1.expect(data.errors.length).to.equal(3); }); it('should wrap errors when wrapErros variable passed in config', () => { const validationError = new Error('test2'); const globalError = new Error('test1'); const validity = { ___globalValidationResultsCaptured: false, ___validationResults: [validationError, globalError], config: { wrapErrors: true, unhandledErrorWrapper: function (err) { return new Error('test'); } }, }; const data = { data: {}, errors: [new Error('test3')] }; validation_1.getResponseValidationResults(validity, data); chai_1.expect(data.errors.length).to.equal(3); chai_1.expect(data.errors[0].message).to.equal('test'); }); }); }); //# sourceMappingURL=validation.js.map