UNPKG

mysensors-handlers

Version:

Encode / decode MQTT stream from Devices using MySensors protocol

167 lines (141 loc) 4.21 kB
const {assert} = require('chai'); const {mySensorsDecoder} = require('../lib/decoder'); const {mySensorsPatternDetector} = require('../lib/detector'); // const mySensorsPattern = "+prefixedDevEui/+nodeId/+sensorId/+method/+ack/+type"; describe('mySensorsDecoder - test 1', () => { const packet = {topic: 'MySensors123-out/0/2/1/0/4', payload: 'test'}; const pattern = mySensorsPatternDetector(packet); const params = pattern.params; const decoded = mySensorsDecoder(packet, params); const keys = [ 'devEui', 'transportProtocol', 'messageProtocol', 'nativeSensorId', 'nativeNodeId', 'nativeResource', 'resource', 'resources', 'inputPath', 'outputPath', 'inPrefix', 'outPrefix', 'value', 'lastSignal', 'method', 'prefix', ]; it('pattern should exist', () => { assert.typeOf(pattern, 'object'); }); it('pattern should contain params and value properties', () => { assert.hasAllKeys(pattern, ['params', 'name']); }); it(`pattern name should be mySensors`, () => { assert.strictEqual('mySensors', pattern.name); }); it('decoded should exist', () => { assert.typeOf(decoded, 'object'); }); it('decoded payload should contain all sensor properties', () => { assert.hasAllKeys(decoded, keys); }); it(`decoded payload should be ${packet.payload}`, () => { assert.strictEqual(packet.payload, decoded.value); }); it(`decoded topic should be ${packet.topic}`, () => { assert.strictEqual(packet.topic, decoded.outputPath); }); }); describe('mySensorsDecoder - test 2', () => { const packet = {topic: 'MySensors123-out/0/2/0/0/4', payload: 'test'}; const pattern = mySensorsPatternDetector(packet); const params = pattern.params; const decoded = mySensorsDecoder(packet, params); const keys = [ 'name', 'devEui', 'transportProtocol', 'messageProtocol', 'type', 'nativeSensorId', 'nativeNodeId', 'nativeType', 'resources', 'inPrefix', 'outPrefix', 'value', 'colors', 'frameCounter', 'icons', 'lastSignal', 'method', 'prefix', ]; it('pattern should exist', () => { assert.typeOf(pattern, 'object'); }); it('pattern should contain params and value properties', () => { assert.hasAllKeys(pattern, ['params', 'name']); }); it(`pattern name should be mySensors`, () => { assert.strictEqual('mySensors', pattern.name); }); it('decoded should exist', () => { assert.typeOf(decoded, 'object'); }); it('decoded payload should contain all sensor registering properties', () => { assert.hasAllKeys(decoded, keys); }); it(`decoded payload should be ${packet.payload}`, () => { assert.strictEqual(packet.payload, decoded.value); }); it(`decoded type should be 3312`, () => { assert.strictEqual(3312, decoded.type); }); }); describe('mySensorsDecoder - test 3', () => { const packet = {topic: 'MySensors123-out/10/5/1/0/23', payload: '1'}; const pattern = mySensorsPatternDetector(packet); const params = pattern.params; const decoded = mySensorsDecoder(packet, params); const keys = [ 'devEui', 'transportProtocol', 'messageProtocol', 'nativeSensorId', 'nativeNodeId', 'nativeResource', 'resource', 'resources', 'inputPath', 'outputPath', 'inPrefix', 'outPrefix', 'value', 'lastSignal', 'method', 'prefix', ]; it('pattern should exist', () => { assert.typeOf(pattern, 'object'); }); it('pattern should contain params and value properties', () => { assert.hasAllKeys(pattern, ['params', 'name']); }); it(`pattern name should be mySensors`, () => { assert.strictEqual('mySensors', pattern.name); }); it('decoded should exist', () => { assert.typeOf(decoded, 'object'); }); it('decoded payload should contain all sensor properties', () => { assert.hasAllKeys(decoded, keys); }); it(`decoded payload should be ${packet.payload}`, () => { assert.strictEqual(packet.payload, decoded.value); }); it(`decoded topic should be ${packet.topic}`, () => { assert.strictEqual(packet.topic, decoded.outputPath); }); });