mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-08-29 07:08:56 +00:00
Replace sinon with jest builtins
This commit is contained in:
Generated
+16
-140
@@ -499,42 +499,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"@sinonjs/commons": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz",
|
||||
"integrity": "sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-detect": "4.0.8"
|
||||
}
|
||||
},
|
||||
"@sinonjs/formatio": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz",
|
||||
"integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinonjs/commons": "^1",
|
||||
"@sinonjs/samsam": "^3.1.0"
|
||||
}
|
||||
},
|
||||
"@sinonjs/samsam": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.0.tgz",
|
||||
"integrity": "sha512-beHeJM/RRAaLLsMJhsCvHK31rIqZuobfPLa/80yGH5hnD8PV1hyh9xJBJNFfNmO7yWqm+zomijHsXpI6iTQJfQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinonjs/commons": "^1.0.2",
|
||||
"array-from": "^2.1.1",
|
||||
"lodash": "^4.17.11"
|
||||
}
|
||||
},
|
||||
"@sinonjs/text-encoding": {
|
||||
"version": "0.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
|
||||
"integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/babel__core": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.0.tgz",
|
||||
@@ -704,14 +668,6 @@
|
||||
"resolved": "https://registry.npmjs.org/areq/-/areq-0.2.0.tgz",
|
||||
"integrity": "sha1-ad0ojIF8hy3HLDfp0eciayayMcU="
|
||||
},
|
||||
"argparse": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
||||
"requires": {
|
||||
"sprintf-js": "~1.0.2"
|
||||
}
|
||||
},
|
||||
"arr-diff": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
||||
@@ -736,12 +692,6 @@
|
||||
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
|
||||
"dev": true
|
||||
},
|
||||
"array-from": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
|
||||
"integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
|
||||
"dev": true
|
||||
},
|
||||
"array-unique": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
||||
@@ -2389,12 +2339,6 @@
|
||||
"integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
|
||||
"dev": true
|
||||
},
|
||||
"diff": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
|
||||
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
|
||||
"dev": true
|
||||
},
|
||||
"diff-sequences": {
|
||||
"version": "24.3.0",
|
||||
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz",
|
||||
@@ -2760,11 +2704,6 @@
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"esprima": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
|
||||
},
|
||||
"esquery": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
|
||||
@@ -3350,8 +3289,7 @@
|
||||
"has-flag": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
||||
"dev": true
|
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
|
||||
},
|
||||
"has-symbols": {
|
||||
"version": "1.0.0",
|
||||
@@ -3873,8 +3811,7 @@
|
||||
"istanbul-lib-coverage": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
|
||||
"integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw=="
|
||||
},
|
||||
"istanbul-lib-hook": {
|
||||
"version": "2.0.3",
|
||||
@@ -4388,8 +4325,19 @@
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
|
||||
"integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==",
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"esprima": "^4.0.0"
|
||||
"istanbul-lib-coverage": "^2.0.3",
|
||||
"make-dir": "^1.3.0",
|
||||
"supports-color": "^6.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"supports-color": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
|
||||
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"jsbn": {
|
||||
@@ -4505,12 +4453,6 @@
|
||||
"verror": "1.10.0"
|
||||
}
|
||||
},
|
||||
"just-extend": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz",
|
||||
"integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==",
|
||||
"dev": true
|
||||
},
|
||||
"kind-of": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
|
||||
@@ -4603,12 +4545,6 @@
|
||||
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
|
||||
"dev": true
|
||||
},
|
||||
"lolex": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz",
|
||||
"integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==",
|
||||
"dev": true
|
||||
},
|
||||
"loose-envify": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||
@@ -4622,7 +4558,6 @@
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
|
||||
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pify": "^3.0.0"
|
||||
}
|
||||
@@ -4894,27 +4829,6 @@
|
||||
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
|
||||
"dev": true
|
||||
},
|
||||
"nise": {
|
||||
"version": "1.4.10",
|
||||
"resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz",
|
||||
"integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinonjs/formatio": "^3.1.0",
|
||||
"@sinonjs/text-encoding": "^0.7.1",
|
||||
"just-extend": "^4.0.2",
|
||||
"lolex": "^2.3.2",
|
||||
"path-to-regexp": "^1.7.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"lolex": {
|
||||
"version": "2.7.5",
|
||||
"resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz",
|
||||
"integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node-abi": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.7.1.tgz",
|
||||
@@ -5302,23 +5216,6 @@
|
||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
||||
"dev": true
|
||||
},
|
||||
"path-to-regexp": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
|
||||
"integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"isarray": "0.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"isarray": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"path-type": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
|
||||
@@ -5342,8 +5239,7 @@
|
||||
"pify": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
|
||||
"dev": true
|
||||
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
|
||||
},
|
||||
"pirates": {
|
||||
"version": "4.0.1",
|
||||
@@ -5929,21 +5825,6 @@
|
||||
"simple-concat": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"sinon": {
|
||||
"version": "7.2.7",
|
||||
"resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.7.tgz",
|
||||
"integrity": "sha512-rlrre9F80pIQr3M36gOdoCEWzFAMDgHYD8+tocqOw+Zw9OZ8F84a80Ds69eZfcjnzDqqG88ulFld0oin/6rG/g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinonjs/commons": "^1.3.1",
|
||||
"@sinonjs/formatio": "^3.2.1",
|
||||
"@sinonjs/samsam": "^3.2.0",
|
||||
"diff": "^3.5.0",
|
||||
"lolex": "^3.1.0",
|
||||
"nise": "^1.4.10",
|
||||
"supports-color": "^5.5.0"
|
||||
}
|
||||
},
|
||||
"sisteransi": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz",
|
||||
@@ -6189,11 +6070,6 @@
|
||||
"through2": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"sprintf-js": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
|
||||
|
||||
+1
-2
@@ -52,7 +52,6 @@
|
||||
"eslint": "*",
|
||||
"eslint-config-google": "*",
|
||||
"eslint-plugin-jest": "^22.3.0",
|
||||
"jest": "^24.3.1",
|
||||
"sinon": "*"
|
||||
"jest": "^24.3.1"
|
||||
}
|
||||
}
|
||||
|
||||
+17
-18
@@ -1,4 +1,3 @@
|
||||
const sinon = require('sinon');
|
||||
const Controller = require('../lib/controller');
|
||||
const settings = require('../lib/util/settings');
|
||||
const mqtt = require('../lib/mqtt');
|
||||
@@ -9,11 +8,11 @@ describe('Controller', () => {
|
||||
let mqttPublish;
|
||||
|
||||
beforeEach(() => {
|
||||
utils.stubLogger(sinon);
|
||||
sinon.stub(settings, 'getDevice').callsFake((ieeeAddr) => {
|
||||
utils.stubLogger(jest);
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation((ieeeAddr) => {
|
||||
return {friendly_name: 'test'};
|
||||
});
|
||||
mqttPublish = sinon.stub(mqtt.prototype, 'publish').callsFake(() => {});
|
||||
mqttPublish = jest.spyOn(mqtt.prototype, 'publish').mockImplementation(() => {});
|
||||
controller = new Controller();
|
||||
controller.zigbee = {
|
||||
getDevice: () => {
|
||||
@@ -26,7 +25,7 @@ describe('Controller', () => {
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sinon.restore();
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
describe('Handling zigbee messages', () => {
|
||||
@@ -34,12 +33,12 @@ describe('Controller', () => {
|
||||
const device = {ieeeAddr: '0x12345678', modelId: 'TRADFRI bulb E27 CWS opal 600lm'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'devChange', {onOff: 1}, 1);
|
||||
controller.onZigbeeMessage(message);
|
||||
expect(mqttPublish.calledOnce).toBe(true);
|
||||
expect(mqttPublish.getCall(0).args[1]).toBe(JSON.stringify({state: 'ON'}));
|
||||
expect(mqttPublish).toHaveBeenCalledTimes(1);
|
||||
expect(mqttPublish.mock.calls[0][1]).toBe(JSON.stringify({state: 'ON'}));
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message when include_device_information is set', () => {
|
||||
sinon.stub(settings, 'get').callsFake(() => {
|
||||
jest.spyOn(settings, 'get').mockImplementation(() => {
|
||||
return {
|
||||
mqtt: {
|
||||
include_device_information: true,
|
||||
@@ -56,8 +55,8 @@ describe('Controller', () => {
|
||||
const device = {ieeeAddr: '0x12345678', modelId: 'TRADFRI bulb E27 CWS opal 600lm'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'devChange', {onOff: 1}, 1);
|
||||
controller.onZigbeeMessage(message);
|
||||
expect(mqttPublish.calledOnce).toBe(true);
|
||||
expect(mqttPublish.getCall(0).args[1]).toBe(
|
||||
expect(mqttPublish).toHaveBeenCalledTimes(1);
|
||||
expect(mqttPublish.mock.calls[0][1]).toBe(
|
||||
`{"state":"ON","device":{"ieeeAddr":"0x12345678","friendlyName":"test",` +
|
||||
`"manufName":"IKEA","modelId":"TRADFRI bulb E27 CWS opal 600lm"}}`
|
||||
);
|
||||
@@ -67,12 +66,12 @@ describe('Controller', () => {
|
||||
it('Should output to json by default', () => {
|
||||
const payload = {temperature: 1, humidity: 2};
|
||||
controller.publishEntityState('0x12345678', payload);
|
||||
expect(mqttPublish.calledOnce).toBe(true);
|
||||
expect(JSON.parse(mqttPublish.getCall(0).args[1])).toEqual(payload);
|
||||
expect(mqttPublish).toHaveBeenCalledTimes(1);
|
||||
expect(JSON.parse(mqttPublish.mock.calls[0][1])).toEqual(payload);
|
||||
});
|
||||
|
||||
it('Should output to attribute', () => {
|
||||
sinon.stub(settings, 'get').callsFake(() => {
|
||||
jest.spyOn(settings, 'get').mockImplementation(() => {
|
||||
return {
|
||||
mqtt: {
|
||||
include_device_information: false,
|
||||
@@ -88,11 +87,11 @@ describe('Controller', () => {
|
||||
|
||||
const payload = {temperature: 1, humidity: 2};
|
||||
controller.publishEntityState('0x12345678', payload);
|
||||
expect(mqttPublish.calledTwice).toBe(true);
|
||||
expect(mqttPublish.getCall(0).args[0]).toEqual('test/temperature');
|
||||
expect(mqttPublish.getCall(0).args[1]).toEqual('1');
|
||||
expect(mqttPublish.getCall(1).args[0]).toEqual('test/humidity');
|
||||
expect(mqttPublish.getCall(1).args[1]).toEqual('2');
|
||||
expect(mqttPublish).toHaveBeenCalledTimes(2);
|
||||
expect(mqttPublish.mock.calls[0][0]).toEqual('test/temperature');
|
||||
expect(mqttPublish.mock.calls[0][1]).toEqual('1');
|
||||
expect(mqttPublish.mock.calls[1][0]).toEqual('test/humidity');
|
||||
expect(mqttPublish.mock.calls[1][1]).toEqual('2');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
const sinon = require('sinon');
|
||||
const Availability = require('../lib/extension/deviceAvailability');
|
||||
const utils = require('./utils');
|
||||
|
||||
@@ -6,12 +5,12 @@ describe('Availability', () => {
|
||||
let availability;
|
||||
|
||||
beforeEach(() => {
|
||||
utils.stubLogger(sinon);
|
||||
utils.stubLogger(jest);
|
||||
availability = new Availability(null, null, null, () => {});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sinon.restore();
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
describe('Determine pingable devices', () => {
|
||||
|
||||
+406
-408
File diff suppressed because it is too large
Load Diff
+46
-47
@@ -1,4 +1,3 @@
|
||||
const sinon = require('sinon');
|
||||
const DeviceReceive = require('../lib/extension/deviceReceive');
|
||||
const settings = require('../lib/util/settings');
|
||||
const devices = require('zigbee-shepherd-converters').devices;
|
||||
@@ -19,14 +18,14 @@ describe('DeviceReceive', () => {
|
||||
let publishEntityState;
|
||||
|
||||
beforeEach(() => {
|
||||
utils.stubLogger(sinon);
|
||||
sinon.stub(settings, 'addDevice').callsFake(() => {});
|
||||
publishEntityState = sinon.spy();
|
||||
utils.stubLogger(jest);
|
||||
jest.spyOn(settings, 'addDevice').mockImplementation(() => {});
|
||||
publishEntityState = jest.fn();
|
||||
deviceReceive = new DeviceReceive(null, mqtt, null, publishEntityState);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sinon.restore();
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
describe('Handling zigbee messages', () => {
|
||||
@@ -34,24 +33,24 @@ describe('DeviceReceive', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'attReport', {onOff: 1}, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG11LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({click: 'single'});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({click: 'single'});
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message which uses ep (left)', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'attReport', {onOff: 1}, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({click: 'left'});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({click: 'left'});
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message which uses ep (right)', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'attReport', {onOff: 1}, 2);
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({click: 'right'});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({click: 'right'});
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message with default precision', () => {
|
||||
@@ -60,39 +59,39 @@ describe('DeviceReceive', () => {
|
||||
device, 'msTemperatureMeasurement', 'attReport', {measuredValue: -85}, 1
|
||||
);
|
||||
deviceReceive.onZigbeeMessage(message, device, WSDCGQ11LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({temperature: -0.85});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({temperature: -0.85});
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message with 1 precision', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {temperature_precision: 1};
|
||||
});
|
||||
const message = utils.zigbeeMessage(
|
||||
device, 'msTemperatureMeasurement', 'attReport', {measuredValue: -85}, 1
|
||||
);
|
||||
deviceReceive.onZigbeeMessage(message, device, WSDCGQ11LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({temperature: -0.8});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({temperature: -0.8});
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message with 0 precision', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {temperature_precision: 0};
|
||||
});
|
||||
const message = utils.zigbeeMessage(
|
||||
device, 'msTemperatureMeasurement', 'attReport', {measuredValue: -85}, 1
|
||||
);
|
||||
deviceReceive.onZigbeeMessage(message, device, WSDCGQ11LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({temperature: -1});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({temperature: -1});
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message with 1 precision when set via device_options', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
sinon.stub(settings, 'get').callsFake(() => {
|
||||
jest.spyOn(settings, 'get').mockImplementation(() => {
|
||||
return {
|
||||
device_options: {
|
||||
temperature_precision: 1,
|
||||
@@ -102,21 +101,21 @@ describe('DeviceReceive', () => {
|
||||
},
|
||||
};
|
||||
});
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {};
|
||||
});
|
||||
const message = utils.zigbeeMessage(
|
||||
device, 'msTemperatureMeasurement', 'attReport', {measuredValue: -85}, 1
|
||||
);
|
||||
deviceReceive.onZigbeeMessage(message, device, WSDCGQ11LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({temperature: -0.8});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({temperature: -0.8});
|
||||
}
|
||||
);
|
||||
|
||||
it('Should handle a zigbee message with 2 precision when overrides device_options', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
sinon.stub(settings, 'get').callsFake(() => {
|
||||
jest.spyOn(settings, 'get').mockImplementation(() => {
|
||||
return {
|
||||
device_options: {
|
||||
temperature_precision: 1,
|
||||
@@ -126,7 +125,7 @@ describe('DeviceReceive', () => {
|
||||
},
|
||||
};
|
||||
});
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {
|
||||
temperature_precision: 2,
|
||||
};
|
||||
@@ -135,8 +134,8 @@ describe('DeviceReceive', () => {
|
||||
device, 'msTemperatureMeasurement', 'attReport', {measuredValue: -85}, 1
|
||||
);
|
||||
deviceReceive.onZigbeeMessage(message, device, WSDCGQ11LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual({temperature: -0.85});
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual({temperature: -0.85});
|
||||
}
|
||||
);
|
||||
|
||||
@@ -144,36 +143,36 @@ describe('DeviceReceive', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genBasic', 'attReport', {'65281': {'1': 3010}}, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
const expected = {battery: 100, voltage: 3010};
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual(expected);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual(expected);
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message with voltage 2850', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genBasic', 'attReport', {'65281': {'1': 2850}}, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
const expected = {battery: 35, voltage: 2850};
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual(expected);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual(expected);
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message with voltage 2650', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genBasic', 'attReport', {'65281': {'1': 2650}}, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
const expected = {battery: 14, voltage: 2650};
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual(expected);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual(expected);
|
||||
});
|
||||
|
||||
it('Should handle a zigbee message with voltage 2000', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genBasic', 'attReport', {'65281': {'1': 2000}}, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
const expected = {battery: 0, voltage: 2000};
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual(expected);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual(expected);
|
||||
});
|
||||
|
||||
it('Should publish 1 message when converted twice', () => {
|
||||
@@ -183,9 +182,9 @@ describe('DeviceReceive', () => {
|
||||
};
|
||||
const message = utils.zigbeeMessage(device, 'genBasic', 'attReport', payload, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, RTCGQ11LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
const expected = {'battery': 100, 'illuminance': 381, 'voltage': 3045};
|
||||
expect(publishEntityState.getCall(0).args[1]).toEqual(expected);
|
||||
expect(publishEntityState.mock.calls[0][1]).toEqual(expected);
|
||||
});
|
||||
|
||||
it('Should publish no message when converted without result', () => {
|
||||
@@ -193,13 +192,13 @@ describe('DeviceReceive', () => {
|
||||
const payload = {'9999': {'1': 3045}};
|
||||
const message = utils.zigbeeMessage(device, 'genBasic', 'attReport', payload, 1);
|
||||
deviceReceive.onZigbeeMessage(message, device, RTCGQ11LM);
|
||||
expect(publishEntityState.notCalled).toBe(true);
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(0);
|
||||
});
|
||||
|
||||
it('Should publish last_seen epoch', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'attReport', {onOff: 1}, 1);
|
||||
sinon.stub(settings, 'get').callsFake(() => {
|
||||
jest.spyOn(settings, 'get').mockImplementation(() => {
|
||||
return {
|
||||
advanced: {
|
||||
last_seen: 'epoch',
|
||||
@@ -207,14 +206,14 @@ describe('DeviceReceive', () => {
|
||||
};
|
||||
});
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(typeof publishEntityState.getCall(0).args[1].last_seen).toEqual('number');
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(typeof publishEntityState.mock.calls[0][1].last_seen).toEqual('number');
|
||||
});
|
||||
|
||||
it('Should publish last_seen ISO_8601', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'attReport', {onOff: 1}, 1);
|
||||
sinon.stub(settings, 'get').callsFake(() => {
|
||||
jest.spyOn(settings, 'get').mockImplementation(() => {
|
||||
return {
|
||||
advanced: {
|
||||
last_seen: 'ISO_8601',
|
||||
@@ -222,14 +221,14 @@ describe('DeviceReceive', () => {
|
||||
};
|
||||
});
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(typeof publishEntityState.getCall(0).args[1].last_seen).toEqual('string');
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(typeof publishEntityState.mock.calls[0][1].last_seen).toEqual('string');
|
||||
});
|
||||
|
||||
it('Should publish last_seen ISO_8601_local', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = utils.zigbeeMessage(device, 'genOnOff', 'attReport', {onOff: 1}, 1);
|
||||
sinon.stub(settings, 'get').callsFake(() => {
|
||||
jest.spyOn(settings, 'get').mockImplementation(() => {
|
||||
return {
|
||||
advanced: {
|
||||
last_seen: 'ISO_8601_local',
|
||||
@@ -237,8 +236,8 @@ describe('DeviceReceive', () => {
|
||||
};
|
||||
});
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG02LM);
|
||||
expect(publishEntityState.calledOnce).toBe(true);
|
||||
expect(typeof publishEntityState.getCall(0).args[1].last_seen).toEqual('string');
|
||||
expect(publishEntityState).toHaveBeenCalledTimes(1);
|
||||
expect(typeof publishEntityState.mock.calls[0][1].last_seen).toEqual('string');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+74
-75
@@ -1,6 +1,5 @@
|
||||
const devices = require('zigbee-shepherd-converters').devices;
|
||||
const HomeassistantExtension = require('../lib/extension/homeassistant');
|
||||
const sinon = require('sinon');
|
||||
const settings = require('../lib/util/settings');
|
||||
|
||||
const WSDCGQ11LM = devices.find((d) => d.model === 'WSDCGQ11LM');
|
||||
@@ -12,7 +11,7 @@ describe('HomeAssistant extension', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
mqtt = {
|
||||
publish: sinon.spy(),
|
||||
publish: jest.fn(),
|
||||
};
|
||||
|
||||
homeassistant = new HomeassistantExtension(null, mqtt, null, null);
|
||||
@@ -20,7 +19,7 @@ describe('HomeAssistant extension', () => {
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sinon.restore();
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
it('Should have mapping for all devices supported by zigbee-shepherd-converters', () => {
|
||||
@@ -38,12 +37,12 @@ describe('HomeAssistant extension', () => {
|
||||
|
||||
it('Should discover devices', () => {
|
||||
let payload = null;
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {friendly_name: 'my_device'};
|
||||
});
|
||||
|
||||
homeassistant.discover('0x12345678', WSDCGQ11LM, false);
|
||||
expect(mqtt.publish.callCount).toEqual(5);
|
||||
expect(mqtt.publish).toHaveBeenCalledTimes(5);
|
||||
|
||||
// 1
|
||||
payload = {
|
||||
@@ -64,10 +63,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(0).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(0).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(0).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(0).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[0][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[0][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[0][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[0][4]).toEqual('homeassistant');
|
||||
|
||||
// 2
|
||||
payload = {
|
||||
@@ -88,10 +87,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(1).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(1).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(1).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(1).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[1][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[1][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[1][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[1][4]).toEqual('homeassistant');
|
||||
|
||||
// 3
|
||||
payload = {
|
||||
@@ -112,10 +111,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(2).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(2).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(2).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(2).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[2][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[2][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[2][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[2][4]).toEqual('homeassistant');
|
||||
|
||||
// 4
|
||||
payload = {
|
||||
@@ -136,10 +135,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(3).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(3).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(3).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(3).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[3][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[3][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[3][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[3][4]).toEqual('homeassistant');
|
||||
|
||||
// 5
|
||||
payload = {
|
||||
@@ -159,15 +158,15 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(4).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(4).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(4).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(4).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[4][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[4][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[4][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[4][4]).toEqual('homeassistant');
|
||||
});
|
||||
|
||||
it('Should discover devices with precision', () => {
|
||||
let payload = null;
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {
|
||||
friendly_name: 'my_device',
|
||||
humidity_precision: 0,
|
||||
@@ -177,7 +176,7 @@ describe('HomeAssistant extension', () => {
|
||||
});
|
||||
|
||||
homeassistant.discover('0x12345678', WSDCGQ11LM, false);
|
||||
expect(mqtt.publish.callCount).toEqual(5);
|
||||
expect(mqtt.publish).toHaveBeenCalledTimes(5);
|
||||
|
||||
// 1
|
||||
payload = {
|
||||
@@ -198,10 +197,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(0).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(0).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(0).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(0).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[0][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[0][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[0][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[0][4]).toEqual('homeassistant');
|
||||
|
||||
// 2
|
||||
payload = {
|
||||
@@ -222,10 +221,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(1).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(1).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(1).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(1).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[1][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[1][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[1][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[1][4]).toEqual('homeassistant');
|
||||
|
||||
// 3
|
||||
payload = {
|
||||
@@ -246,10 +245,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(2).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(2).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(2).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(2).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[2][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[2][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[2][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[2][4]).toEqual('homeassistant');
|
||||
|
||||
// 4
|
||||
payload = {
|
||||
@@ -270,10 +269,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(3).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(3).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(3).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(3).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[3][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[3][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[3][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[3][4]).toEqual('homeassistant');
|
||||
|
||||
// 5
|
||||
payload = {
|
||||
@@ -293,15 +292,15 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(4).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(4).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(4).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(4).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[4][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[4][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[4][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[4][4]).toEqual('homeassistant');
|
||||
});
|
||||
|
||||
it('Should discover devices with overriden user configuration', () => {
|
||||
let payload = null;
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {
|
||||
friendly_name: 'my_device',
|
||||
homeassistant: {
|
||||
@@ -315,7 +314,7 @@ describe('HomeAssistant extension', () => {
|
||||
});
|
||||
|
||||
homeassistant.discover('0x12345678', WSDCGQ11LM, false);
|
||||
expect(mqtt.publish.callCount).toEqual(5);
|
||||
expect(mqtt.publish).toHaveBeenCalledTimes(5);
|
||||
|
||||
// 1
|
||||
payload = {
|
||||
@@ -338,10 +337,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(0).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(0).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(0).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(0).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[0][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[0][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[0][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[0][4]).toEqual('homeassistant');
|
||||
|
||||
// 2
|
||||
payload = {
|
||||
@@ -364,10 +363,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(1).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(1).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(1).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(1).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[1][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[1][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[1][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[1][4]).toEqual('homeassistant');
|
||||
|
||||
// 3
|
||||
payload = {
|
||||
@@ -390,10 +389,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(2).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(2).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(2).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(2).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[2][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[2][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[2][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[2][4]).toEqual('homeassistant');
|
||||
|
||||
// 4
|
||||
payload = {
|
||||
@@ -416,10 +415,10 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(3).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(3).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(3).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(3).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[3][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[3][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[3][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[3][4]).toEqual('homeassistant');
|
||||
|
||||
// 5
|
||||
payload = {
|
||||
@@ -441,20 +440,20 @@ describe('HomeAssistant extension', () => {
|
||||
'availability_topic': 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(4).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(4).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(4).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(4).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[4][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[4][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[4][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[4][4]).toEqual('homeassistant');
|
||||
});
|
||||
|
||||
it('Should discover devices with cover_position', () => {
|
||||
let payload = null;
|
||||
sinon.stub(settings, 'getDevice').callsFake(() => {
|
||||
jest.spyOn(settings, 'getDevice').mockImplementation(() => {
|
||||
return {friendly_name: 'my_device'};
|
||||
});
|
||||
|
||||
homeassistant.discover('0x12345678', SV01, false);
|
||||
expect(mqtt.publish.callCount).toEqual(5);
|
||||
expect(mqtt.publish).toHaveBeenCalledTimes(5);
|
||||
|
||||
// 1
|
||||
payload = {
|
||||
@@ -475,9 +474,9 @@ describe('HomeAssistant extension', () => {
|
||||
availability_topic: 'zigbee2mqtt/bridge/state',
|
||||
};
|
||||
|
||||
expect(JSON.parse(mqtt.publish.getCall(0).args[1])).toEqual(payload);
|
||||
expect(mqtt.publish.getCall(0).args[2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.getCall(0).args[3]).toBeNull();
|
||||
expect(mqtt.publish.getCall(0).args[4]).toEqual('homeassistant');
|
||||
expect(JSON.parse(mqtt.publish.mock.calls[0][1])).toEqual(payload);
|
||||
expect(mqtt.publish.mock.calls[0][2]).toEqual({retain: true, qos: 0});
|
||||
expect(mqtt.publish.mock.calls[0][3]).toBeNull();
|
||||
expect(mqtt.publish.mock.calls[0][4]).toEqual('homeassistant');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
const sinon = require('sinon');
|
||||
const objectAssignDeep = require('object-assign-deep');
|
||||
|
||||
const data = require('../lib/util/data');
|
||||
@@ -17,15 +16,15 @@ describe('Settings', () => {
|
||||
const files = new Map();
|
||||
|
||||
beforeAll(() => {
|
||||
sinon.stub(fs, 'readYaml').callsFake((file) => {
|
||||
jest.spyOn(fs, 'readYaml').mockImplementation((file) => {
|
||||
if (files.has(file)) return objectAssignDeep.noMutate(files.get(file));
|
||||
throw new Error(`Fake file not found: ${file}`);
|
||||
});
|
||||
sinon.stub(fs, 'readYamlIfExists').callsFake((file) => {
|
||||
jest.spyOn(fs, 'readYamlIfExists').mockImplementation((file) => {
|
||||
if (files.has(file)) return objectAssignDeep.noMutate(files.get(file));
|
||||
return null;
|
||||
});
|
||||
sinon.stub(fs, 'writeYaml').callsFake((file, content) => {
|
||||
jest.spyOn(fs, 'writeYaml').mockImplementation((file, content) => {
|
||||
files.set(file, objectAssignDeep.noMutate(content));
|
||||
});
|
||||
});
|
||||
@@ -36,9 +35,9 @@ describe('Settings', () => {
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
fs.readYaml.restore();
|
||||
fs.readYamlIfExists.restore();
|
||||
fs.writeYaml.restore();
|
||||
fs.readYaml.mockRestore();
|
||||
fs.readYamlIfExists.mockRestore();
|
||||
fs.writeYaml.mockRestore();
|
||||
});
|
||||
|
||||
describe('Settings', () => {
|
||||
|
||||
+5
-5
@@ -1,11 +1,11 @@
|
||||
const logger = require('../lib/util/logger');
|
||||
|
||||
module.exports = {
|
||||
stubLogger: (sandbox) => {
|
||||
sandbox.stub(logger, 'info').callsFake(() => {});
|
||||
sandbox.stub(logger, 'warn').callsFake(() => {});
|
||||
sandbox.stub(logger, 'debug').callsFake(() => {});
|
||||
sandbox.stub(logger, 'error').callsFake(() => {});
|
||||
stubLogger: (jest) => {
|
||||
jest.spyOn(logger, 'info').mockImplementation(() => {});
|
||||
jest.spyOn(logger, 'warn').mockImplementation(() => {});
|
||||
jest.spyOn(logger, 'debug').mockImplementation(() => {});
|
||||
jest.spyOn(logger, 'error').mockImplementation(() => {});
|
||||
},
|
||||
zigbeeMessage: (device, cid, type, data, epId) => {
|
||||
return {data: {cid, data}, type, endpoints: [{device, epId}]};
|
||||
|
||||
Reference in New Issue
Block a user