systelab-components-wdio-test
Version:
Widgets to be use in the E2E Tests based in WDIO
78 lines (77 loc) • 2.96 kB
JavaScript
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 validateLongPressRequest(data) {
this.validateData(data, 'long-press-request-schema.json');
return data;
}
static validateUploadFileRequest(data) {
this.validateData(data, 'upload-file-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));