UNPKG

inventoresed

Version:

Z-Wave driver written entirely in JavaScript/TypeScript

179 lines (156 loc) 4.7 kB
import { CommandClass, FibaroVenetianBlindCCGet, FibaroVenetianBlindCCReport, FibaroVenetianBlindCCSet, ManufacturerSpecificCCValues, } from "@zwave-js/cc"; import { FibaroCCIDs, FibaroVenetianBlindCCCommand, MANUFACTURERID_FIBARO, } from "@zwave-js/cc/manufacturerProprietary/FibaroCC"; import { CommandClasses } from "@zwave-js/core"; import type { Driver } from "../../driver/Driver"; import { ZWaveNode } from "../../node/Node"; import { createEmptyMockDriver } from "../../test/mocks"; describe("lib/commandclass/manufacturerProprietary/Fibaro => ", () => { let fakeDriver: Driver; let node2: ZWaveNode; beforeAll(async () => { fakeDriver = createEmptyMockDriver() as unknown as Driver; node2 = new ZWaveNode(2, fakeDriver as any); (fakeDriver.controller.nodes as any).set(node2.id, node2); await fakeDriver.configManager.loadDeviceIndex(); }, 30000); afterAll(() => { node2.destroy(); }); beforeAll(async () => { const manufacturerId = 0x10f; node2.valueDB.setValue( ManufacturerSpecificCCValues.manufacturerId.id, manufacturerId, ); node2.addCC(CommandClasses["Manufacturer Proprietary"], { isSupported: true, version: 1, }); }); it("the set tilt command should serialize correctly", () => { const blindCC = new FibaroVenetianBlindCCSet(fakeDriver, { nodeId: 2, tilt: 99, }); const expected = Buffer.from([ CommandClasses["Manufacturer Proprietary"], // CC 0x01, 0x0f, 0x26, 0x01, 0x01, 0x00, 0x63, ]); expect(blindCC.serialize()).toEqual(expected); }); it("FibaroVenetianBlindCCReport should be deserialized correctly", () => { const data = Buffer.from("91010f2603030000", "hex"); const cc = CommandClass.from(fakeDriver as any, { nodeId: 2, data }); expect(cc).toBeInstanceOf(FibaroVenetianBlindCCReport); }); describe("responses should be detected correctly", () => { it("FibaroVenetianBlindCCSet should expect no response", () => { const cc = new FibaroVenetianBlindCCSet(fakeDriver, { nodeId: 2, tilt: 7, }); expect(cc.expectsCCResponse()).toBeFalse(); }); it("FibaroVenetianBlindCCGet should expect a response", () => { const cc = new FibaroVenetianBlindCCGet(fakeDriver, { nodeId: 2, }); expect(cc.expectsCCResponse()).toBeTrue(); }); it("FibaroVenetianBlindCCSet => FibaroVenetianBlindCCReport = unexpected", () => { const ccRequest = new FibaroVenetianBlindCCSet(fakeDriver, { nodeId: 2, tilt: 7, }); const ccResponse = new FibaroVenetianBlindCCReport(fakeDriver, { nodeId: 2, data: Buffer.from([ CommandClasses["Manufacturer Specific"], MANUFACTURERID_FIBARO >>> 8, MANUFACTURERID_FIBARO & 0xff, FibaroCCIDs.VenetianBlind, FibaroVenetianBlindCCCommand.Report, 0x03, 1, 7, ]), }); expect(ccRequest.isExpectedCCResponse(ccResponse)).toBeFalse(); }); it("FibaroVenetianBlindCCGet => FibaroVenetianBlindCCReport = expected", () => { const ccRequest = new FibaroVenetianBlindCCGet(fakeDriver, { nodeId: 2, }); const ccResponse = new FibaroVenetianBlindCCReport(fakeDriver, { nodeId: 2, data: Buffer.from([ CommandClasses["Manufacturer Specific"], MANUFACTURERID_FIBARO >>> 8, MANUFACTURERID_FIBARO & 0xff, FibaroCCIDs.VenetianBlind, FibaroVenetianBlindCCCommand.Report, 0x03, 1, 7, ]), }); expect(ccRequest.isExpectedCCResponse(ccResponse)).toBeTrue(); }); }); describe("Fibaro FGR222 should support this CC", () => { beforeAll(async () => { const productType = 0x0302; const productId = 0x1000; const firmwareVersion = "25.25"; node2.valueDB.setValue( ManufacturerSpecificCCValues.productType.id, productType, ); node2.valueDB.setValue( ManufacturerSpecificCCValues.productId.id, productId, ); node2.valueDB.setValue( { commandClass: CommandClasses.Version, property: "firmwareVersion", }, firmwareVersion, ); await (node2 as any).loadDeviceConfig(); (fakeDriver.sendCommand as jest.Mock).mockClear(); }); it("loads the correct device config", () => { const CCs = node2.deviceConfig?.proprietary?.fibaroCCs ?? []; expect(CCs).toContain(0x26); }); it.skip("does the interview correctly", () => { const cc = node2.createCCInstance( CommandClasses["Manufacturer Proprietary"], )!; cc.interview(fakeDriver).catch(() => { // we expect an error, since there will be no response }); expect(fakeDriver.sendCommand).toHaveBeenCalledTimes(1); expect( (fakeDriver.sendCommand as jest.Mock).mock.calls[0][0], ).toBeInstanceOf(FibaroVenetianBlindCCGet); }); }); });