soar-examples.test.js 1.67 KB
Newer Older
1 2 3 4 5
const { globSync } = require('glob');
const Validator = require('swagger-model-validator');
const OpenAPISchemaValidator = require('openapi-schema-validator').default;

const getSchema = () => {
6
  const schema = require(`${__dirname}/../project/soar/swagger.json`);
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
  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);
    });
  });
});