UNPKG

@mindconnect/mindconnect-nodejs

Version:

NodeJS Library for Siemens Insights Hub Connectivity - TypeScript SDK for Insights Hub and Industrial IoT - Command Line Interface - Insights Hub Development Proxy (Siemens Insights Hub was formerly known as MindSphere)

283 lines 10.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai = require("chai"); const src_1 = require("../src"); chai.should(); describe("validation tests", () => { const config = { id: "db1e5617-a73a-4b37-9e91-8404cd61c800", configurationId: "CF-castidev.Pump", dataSources: [ { name: "DS-Environment", customData: { aspect: "Environment" }, description: null, dataPoints: [ { id: "DP-Temperature", name: "Temperature", description: null, unit: "°C", type: "DOUBLE", customData: { variable: "Temperature" }, }, { id: "DP-Pressure", name: "Pressure", description: null, unit: "kPa", type: "DOUBLE", customData: { variable: "Pressure" }, }, { id: "DP-Humidity", name: "Humidity", description: null, unit: "%", type: "INT", customData: { variable: "Humidity" }, }, ], }, { name: "DS-PumpData", customData: { aspect: "PumpData" }, description: null, dataPoints: [ { id: "DP-StuffingBoxTemperature", name: "StuffingBoxTemperature", description: null, unit: "°C", type: "DOUBLE", customData: { variable: "StuffingBoxTemperature" }, }, { id: "DP-PressureOut", name: "PressureOut", description: null, unit: "hPa", type: "DOUBLE", customData: { variable: "PressureOut" }, }, { id: "DP-PressureIn", name: "PressureIn", description: null, unit: "hPa", type: "DOUBLE", customData: { variable: "PressureIn" }, }, { id: "DP-MotorCurrent", name: "MotorCurrent", description: null, unit: "V", type: "DOUBLE", customData: { variable: "MotorCurrent" }, }, { id: "DP-Flow", name: "Flow", description: null, unit: "l/s", type: "DOUBLE", customData: { variable: "Flow" }, }, { id: "DP-TimeStamp", name: "TimeStamp", description: null, unit: "Z", type: "TIMESTAMP", customData: { variable: "TimeStamp" }, }, { id: "DP-BigString", name: "BigString", description: null, unit: "Z", type: "BIG_STRING", customData: { variable: "BigString" }, }, ], }, ], eTag: "1", }; const validator = (0, src_1.dataValidator)(config); it("should validate a valid schema", () => { const currentMessage = [ { dataPointId: "DP-Humidity", qualityCode: "0", value: `${Math.ceil(Math.random() * 25) + 70}`, }, { dataPointId: "DP-Pressure", qualityCode: "0", value: `${Math.random() * 120 + 40}`, }, { dataPointId: "DP-Temperature", qualityCode: "0", value: `${Math.random() * 120 + 40}`, }, { dataPointId: "DP-Flow", qualityCode: "0", value: `${Math.random() * 120 + 40}`, }, { dataPointId: "DP-MotorCurrent", qualityCode: "0", value: `${Math.random() * 120 + 40}`, }, { dataPointId: "DP-PressureIn", qualityCode: "0", value: `${Math.random() * 120 + 40}`, }, { dataPointId: "DP-PressureOut", qualityCode: "0", value: `${Math.random() * 120 + 40}`, }, { dataPointId: "DP-StuffingBoxTemperature", qualityCode: "0", value: `${Math.random() * 120 + 40}`, }, ]; const result = validator(currentMessage); result.should.be.true; }); it("should catch non integers in integer variables", () => { const currentMessage = [ { dataPointId: "DP-Humidity", qualityCode: "0", value: "125.4", }, ]; const result = validator(currentMessage); result.should.be.false; validator.errors.should.have.lengthOf(1); validator.errors[0].message.should.equal('must pass "str_integer" keyword validation'); }); it("should catch invalid dataPoint ids", () => { const currentMessage = [ { dataPointId: "DP-XXy", qualityCode: "0", value: "125.4", }, ]; const result = validator(currentMessage); result.should.be.false; validator.errors.should.have.lengthOf(1); validator.errors[0].message.should.equal("must be equal to one of the allowed values"); }); it("should validate ISO8601 timestamps", () => { const currentMessage = [ { dataPointId: "DP-TimeStamp", qualityCode: "0", value: new Date().toISOString(), }, ]; const result = validator(currentMessage); result.should.be.true; }); it("should catch non-iso8701 timestamps", () => { const currentMessage = [ { dataPointId: "DP-TimeStamp", qualityCode: "0", value: new Date().toLocaleDateString(), // invalid date non ISO8601 }, ]; const result = validator(currentMessage); result.should.be.false; validator.errors.should.have.lengthOf(1); validator.errors[0].message.should.equal('must pass "str_timestamp" keyword validation'); // console.log(validator.errors); }); it("should validate arrays in big strings", () => { const currentMessage = [ { dataPointId: "DP-BigString", qualityCode: "0", value: `${JSON.stringify(Array.from(Array(1000).keys()))}`, }, ]; const result = validator(currentMessage); result.should.be.true; }); it("should validate numbers", () => { const currentMessage = [ { dataPointId: "DP-Flow", qualityCode: "0", value: `45.45`, }, ]; const result = validator(currentMessage); result.should.be.true; }); it("should catch invalid numbers", () => { const currentMessage = [ { dataPointId: "DP-Flow", qualityCode: "0", value: `45.45s`, }, ]; const result = validator(currentMessage); result.should.be.false; }); it("should catch invalid case in qualityCode", () => { const currentMessage = [ { dataPointId: "DP-Flow", qualitycode: "0", value: `45.45`, }, ]; const result = validator(currentMessage); result.should.be.false; validator.errors.should.have.lengthOf(1); validator.errors[0].message.should.equal("must have required property 'qualityCode'"); }); it("should catch invalid case in dataPointId", () => { const currentMessage = [ { datapointid: "DP-Flow", }, ]; const result = validator(currentMessage); result.should.be.false; validator.errors.should.have.lengthOf(1); validator.errors[0].message.should.equal("must have required property 'dataPointId'"); }); it("should validate events", () => { const validator = (0, src_1.eventValidator)(); const result = validator({ entityId: "1324567890123456789012abcdefabcd", timestamp: new Date().toISOString() }); result.should.be.true; }); it("should validate events", () => { const validator = (0, src_1.eventValidator)(); const result = validator({ entityId: "1324567890123456789012abcdefabcd", sourceType: "Agent", sourceId: "application", source: "MindConnect Agent", severity: 20, description: "Event sent from @mindconnect/node-red-contrib-mindconnect", timestamp: "2021-08-19T18:41:25.740Z", additionalProperty: "", }); result.should.be.true; }); }); //# sourceMappingURL=schema-validation.spec.js.map