mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-08-27 21:20:03 +00:00
More tests.
This commit is contained in:
@@ -7,11 +7,70 @@ const mqtt = {
|
||||
subscribe: (topic) => {},
|
||||
};
|
||||
|
||||
const zigbee = {
|
||||
getDevice: null,
|
||||
publish: sinon.spy(),
|
||||
};
|
||||
|
||||
const cfg = {
|
||||
default: {
|
||||
manufSpec: 0,
|
||||
disDefaultRsp: 0,
|
||||
},
|
||||
};
|
||||
|
||||
describe('DevicePublish', () => {
|
||||
let devicePublish;
|
||||
|
||||
beforeEach(() => {
|
||||
devicePublish = new DevicePublish(null, mqtt, null, null);
|
||||
devicePublish = new DevicePublish(zigbee, mqtt, null, null);
|
||||
});
|
||||
|
||||
describe('Parse topic', () => {
|
||||
it('Should publish messages to zigbee devices', () => {
|
||||
zigbee.publish.resetHistory();
|
||||
zigbee.getDevice = sinon.fake.returns({modelId: 'TRADFRI bulb E27 CWS opal 600lm'});
|
||||
devicePublish = new DevicePublish(zigbee, mqtt, null, null);
|
||||
devicePublish.onMQTTMessage('zigbee2mqtt/0x12345678/set', JSON.stringify({brightness: '200'}));
|
||||
chai.assert.isTrue(zigbee.publish.calledOnce);
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[0], '0x12345678');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[1], 'genLevelCtrl');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[2], 'moveToLevelWithOnOff');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[3], 'functional');
|
||||
chai.assert.deepEqual(zigbee.publish.getCall(0).args[4], {level: '200', transtime: 0});
|
||||
chai.assert.deepEqual(zigbee.publish.getCall(0).args[5], cfg.default);
|
||||
chai.assert.deepEqual(zigbee.publish.getCall(0).args[6], null);
|
||||
});
|
||||
|
||||
it('Should publish messages to zigbee devices with non-default ep', () => {
|
||||
zigbee.publish.resetHistory();
|
||||
zigbee.getDevice = sinon.fake.returns({modelId: 'lumi.ctrl_neutral1'});
|
||||
devicePublish = new DevicePublish(zigbee, mqtt, null, null);
|
||||
devicePublish.onMQTTMessage('zigbee2mqtt/0x12345678/set', JSON.stringify({state: 'OFF'}));
|
||||
chai.assert.isTrue(zigbee.publish.calledOnce);
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[0], '0x12345678');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[1], 'genOnOff');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[2], 'off');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[3], 'functional');
|
||||
chai.assert.deepEqual(zigbee.publish.getCall(0).args[4], {});
|
||||
chai.assert.deepEqual(zigbee.publish.getCall(0).args[5], cfg.default);
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[6], 2);
|
||||
});
|
||||
|
||||
it('Should publish messages to zigbee devices with non-default ep and postfix', () => {
|
||||
zigbee.publish.resetHistory();
|
||||
zigbee.getDevice = sinon.fake.returns({modelId: 'lumi.ctrl_neutral2'});
|
||||
devicePublish = new DevicePublish(zigbee, mqtt, null, null);
|
||||
devicePublish.onMQTTMessage('zigbee2mqtt/0x12345678/right/set', JSON.stringify({state: 'OFF'}));
|
||||
chai.assert.isTrue(zigbee.publish.calledOnce);
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[0], '0x12345678');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[1], 'genOnOff');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[2], 'off');
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[3], 'functional');
|
||||
chai.assert.deepEqual(zigbee.publish.getCall(0).args[4], {});
|
||||
chai.assert.deepEqual(zigbee.publish.getCall(0).args[5], cfg.default);
|
||||
chai.assert.strictEqual(zigbee.publish.getCall(0).args[6], 3);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Parse topic', () => {
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
const chai = require('chai');
|
||||
const sinon = require('sinon');
|
||||
const DeviceReceive = require('../lib/extension/deviceReceive');
|
||||
const settings = require('../lib/util/settings');
|
||||
const logger = require('../lib/util/logger');
|
||||
const devices = require('zigbee-shepherd-converters').devices;
|
||||
|
||||
// Devices
|
||||
const WXKG11LM = devices.find((d) => d.model === 'WXKG11LM');
|
||||
|
||||
const mqtt = {
|
||||
log: () => {},
|
||||
};
|
||||
|
||||
const msg = (device, cid, type, data) => {
|
||||
return {data: {cid: cid, data: data}, type: type, endpoints: [device]};
|
||||
};
|
||||
|
||||
describe('DeviceReceive', () => {
|
||||
let deviceReceive;
|
||||
let publishDeviceState;
|
||||
|
||||
beforeEach(() => {
|
||||
publishDeviceState = sinon.spy();
|
||||
deviceReceive = new DeviceReceive(null, mqtt, null, publishDeviceState);
|
||||
sinon.stub(settings, 'addDevice').callsFake(() => {});
|
||||
sinon.stub(logger, 'info').callsFake(() => {});
|
||||
sinon.stub(logger, 'warn').callsFake(() => {});
|
||||
});
|
||||
|
||||
describe('Handling zigbee messages', () => {
|
||||
it('Should handle a zigbee message', () => {
|
||||
const device = {ieeeAddr: '0x12345678'};
|
||||
const message = msg(device, 'genOnOff', 'attReport', {onOff: 1});
|
||||
deviceReceive.onZigbeeMessage(message, device, WXKG11LM);
|
||||
chai.assert.isTrue(publishDeviceState.calledOnce);
|
||||
chai.assert.deepEqual(publishDeviceState.getCall(0).args[1], {click: 'single'});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user