const { globSync } = require('glob'); const Validator = require('swagger-model-validator'); const OpenAPISchemaValidator = require('openapi-schema-validator').default; const getSchema = () => { const schema = require(`${__dirname}/../project/soar/swagger.json`); return schema; }; const validateSchema = (schema) => { const validator = new OpenAPISchemaValidator({ version: 3 }); let validation = validator.validate(schema); validation.valid = (validation.errors.length === 0); return validation; }; const validateMessage = (message, schema, model='MESSAGE') => { let validator = new Validator(schema); let validation = validator.validate( message, schema.components.schemas[model], schema.components.schemas, false, false ); return validation; }; test('schema validates', () => { let schema = getSchema(); let schemaValidation = validateSchema(schema); expect(schemaValidation.valid).toBe(true); }); describe('examples validate', () => { let schema = getSchema(); let validation, payloadValidation; let valid; let message; let messages = globSync(`${__dirname}/../examples/**/*.json`) console.log('examples', messages); messages.forEach(messageFile => { test(`validate ${messageFile}`, () => { message = require(messageFile); validation = validateMessage(message, schema); valid = validation.valid; if (!valid) { console.log(`validation: ${messageFile}`, validation); payloadValidation = validateMessage(message.payload, schema, message.payload.message_type) console.log(`payload ${message.payload.message_type}`, payloadValidation); } expect(valid).toBe(true); }); }); });