UNPKG

systelab-components-wdio-test

Version:
70 lines (69 loc) 2.69 kB
import Ajv from 'ajv'; import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; export class JSONSchemaValidator { static validateApplicationStartRequest(data) { this.validateData(data, 'application-start-request-schema.json'); return data; } static validateApplicationNavigateRequest(data) { this.validateData(data, 'application-navigate-request-schema.json'); return data; } static validateBasicElementRequest(data) { this.validateData(data, 'basic-element-request-schema.json'); return data; } static validateWindowSizeRequest(data) { this.validateData(data, 'window-size-request-schema.json'); return data; } static validateApplicationWriteTextRequest(data) { this.validateData(data, 'application-write-text-request-schema.json'); return data; } static validateHTMLRequest(data) { this.validateData(data, 'html-request-schema.json'); return data; } static validateCSSPropertyRequest(data) { this.validateData(data, 'css-property-element-request-schema.json'); return data; } static validatePropertyRequest(data) { this.validateData(data, 'property-element-request-schema.json'); return data; } static validateWriteRequest(data) { this.validateData(data, 'write-element-request-schema.json'); return data; } static validateScrollRequest(data) { this.validateData(data, 'scroll-element-request-schema.json'); return data; } static validateData(data, schemaFilename) { const schema = this.loadSchema(schemaFilename); const validData = schema.validateFn(data); if (!validData) { throw new Error(`Data does not fulfill JSON schema '${schemaFilename}':` + JSON.stringify(schema.validateFn.errors)); } } static loadSchema(filename) { const loadedSchema = this.loadedSchemas.find((schema) => schema.filename === filename); if (loadedSchema) { return loadedSchema; } const schemaPath = path.resolve(this.__dirname, filename); const schemaFile = fs.readFileSync(schemaPath, 'utf-8'); const schemaObject = JSON.parse(schemaFile); const compiledSchema = this.ajv.compile(schemaObject); const newLoadedSchema = { filename, validateFn: compiledSchema }; this.loadedSchemas.push(newLoadedSchema); return newLoadedSchema; } } JSONSchemaValidator.ajv = new Ajv(); JSONSchemaValidator.loadedSchemas = []; JSONSchemaValidator.__dirname = path.dirname(fileURLToPath(import.meta.url));