UNPKG

homebridge-ecowitt-weather-sensors

Version:

Homebridge support for your Fine Offset weather station (Ecowitt, Ambient, Froggit, GoGen, and more)

109 lines (86 loc) 4.37 kB
import { expect } from 'chai'; import { WH57 } from './../../../src/devices/WH57'; import { createPlatform, api } from './../../driver'; import MockDate from "mockdate"; //------------------------------------------------------------------------------ let platform = null; let accessory = null; let sensor = null; MockDate.set("2024-09-02"); const dataReport = { "dateutc": "2024-07-24 19:04:22", "lightning_num": "3", "lightning": "37", "lightning_time": "1662632990", "wh57batt": "5" }; const configs = ["v1Default", "v1Full", "v2Default", "v2Full"]; configs.forEach(config => { describe(`WH57 device should be configured ${config}`, () => { before('Initialize device', () => { platform = createPlatform(config); accessory = new api.platformAccessory('Accessory', "5746853e-4fee-4e47-97dd-53065ef1de03"); platform.baseStationInfo.protocol = "Ecowitt"; platform.config.nameOverrides = []; platform.config.hidden = {}; device = new WH57(platform, accessory); }); beforeEach('Reset config', () => { platform.config.nameOverrides = []; platform.config.hidden = {}; }); it('Services are created', (done) => { expect(device.battery).to.not.be.undefined; expect(device.lightningEvents).to.not.be.undefined; expect(device.lightningDistance).to.not.be.undefined; expect(device.lightningTime).to.not.be.undefined; expect(device.battery.service.displayName).to.equal('Battery'); expect(device.lightningEvents.service.displayName).to.equal("Strike Events"); expect(device.lightningDistance.service.displayName).to.equal("Last Strike Distance"); expect(device.lightningTime.service.displayName).to.equal("Last Strike Time"); done(); }); it('Update is called successfully', (done) => { device.update(dataReport); expect(device.battery.service.characteristics[1].value).to.equal(0); // low batt expect(device.battery.service.characteristics[4].value).to.equal(100); // batt percentage expect(device.lightningEvents.service.characteristics[0].value).to.equal("Strike Events 3 strikes"); expect(device.lightningDistance.service.characteristics[0].value).to.equal("Last Strike Distance 23.0 mi"); expect(device.lightningTime.service.characteristics[0].value).to.equal("Last Strike Time 3 weeks ago"); done(); }); it('Services are created with name overrides', (done) => { platform.config.nameOverrides[0] = {"key": "WH57:lightningEvents", "value": "Test Lightning Events Name"}; platform.config.nameOverrides[1] = {"key": "WH57:lightningDistance", "value": "Test Lightning Distance Name"}; platform.config.nameOverrides[2] = {"key": "WH57:lightningTime", "value": "Test Lightning Time Name"}; device = new WH57(platform, accessory); expect(device.lightningEvents).to.not.be.undefined; expect(device.lightningDistance).to.not.be.undefined; expect(device.lightningTime).to.not.be.undefined; expect(device.lightningEvents.service.characteristics[0].value).to.equal("Test Lightning Events Name") expect(device.lightningDistance.service.characteristics[0].value).to.equal("Test Lightning Distance Name") expect(device.lightningTime.service.characteristics[0].value).to.equal("Test Lightning Time Name") done(); }); it('Services are not created when hidden with general override', (done) => { platform.config.hidden["lightningEvents"] = true; platform.config.hidden["lightningDistance"] = true; platform.config.hidden["lightningTime"] = true; device = new WH57(platform, accessory); expect(device.lightningEvents).to.be.undefined; expect(device.lightningDistance).to.be.undefined; expect(device.lightningTime).to.be.undefined; done(); }); it('Services are not created when hidden with device-specific override', (done) => { platform.config.hidden["WH57:lightningEvents"] = true; platform.config.hidden["WH57:lightningDistance"] = true; platform.config.hidden["WH57:lightningTime"] = true; device = new WH57(platform, accessory); expect(device.lightningEvents).to.be.undefined; expect(device.lightningDistance).to.be.undefined; expect(device.lightningTime).to.be.undefined; done(); }); }); });