Object.assign(event, { disconnected: true, subscribe: fake.resolves(null), unsubscribe: fake.resolves(null), publish: fake.yieldsAsync(null), internalEnd: fake.resolves(null), end: () => { mqttApi.disconnected = true; mqttApi.internalEnd(); }, })
describe('gateway.getLatestGladysVersion', () => { it('should return gladys version', async () => { const variable = { getValue: fake.resolves('key'), setValue: fake.resolves(null), }; const gateway = new Gateway(variable, event, system, sequelize, config); const version = await gateway.getLatestGladysVersion(); expect(version).to.have.property('name'); expect(version).to.have.property('created_at'); }); });
describe('GET /api/v1/service/tasmota/discover', () => { let controller; beforeEach(() => { controller = TasmotaController(tasmotaHandler); }); it('Discover', () => { const res = { json: fake.returns(null), }; controller['get /api/v1/service/tasmota/discover'].controller(undefined, res); assert.calledOnce(tasmotaHandler.getDiscoveredDevices); assert.calledWith(res.json, discoveredDevices); }); });
it('should throw an error', async () => { const stateManager = new StateManager(); const device = { setValue: fake.resolves(null), }; const sceneManager = new SceneManager(stateManager, event, device); expect(() => { sceneManager.checkTrigger({ type: 'one-unknown-event', device_feature: 'light-1', last_value: 12, }); }).to.throw(Error, 'Trigger type "one-unknown-event" has no checker function.'); });
describe('room.getAll', () => { const brain = { addRoom: fake.returns(null), removeRoom: fake.returns(null), }; const room = new Room(brain); it('should get all rooms', async () => { const rooms = await room.getAll(); expect(rooms).to.be.instanceOf(Array); rooms.forEach((oneRoom) => { expect(oneRoom).to.have.property('name'); }); }); });
describe('GET /api/v1/service/mqtt/status', () => { let controller; beforeEach(() => { controller = MqttController(mqttHandler); sinon.reset(); }); it('Status test', async () => { const req = {}; const res = { json: fake.returns(null), }; await controller['get /api/v1/service/mqtt/status'].controller(req, res); assert.calledOnce(mqttHandler.status); assert.calledOnce(res.json); }); });
it('should execute switch turn on', async () => { const device = { setValue: fake.resolves(null), }; const stateManager = new StateManager(event); await executeActions( { stateManager, event, device }, [ [ { type: ACTIONS.SWITCH.TURN_ON, devices: ['switch-1'], }, ], ], {}, ); assert.calledOnce(device.setValue); });
it('should saveConfiguration: destroy all', async () => { const gladys = { variable: { destroy: fake.resolves('value'), setValue: fake.resolves('value'), getValue: fake.resolves(true), }, }; const config = { mqttUrl: 'mqttUrl', }; const mqttHandler = new MqttHandler(gladys, MockedMqttClient, serviceId); await mqttHandler.saveConfiguration(config); assert.callCount(gladys.variable.destroy, 3); assert.callCount(gladys.variable.setValue, 1); assert.calledWith(gladys.variable.destroy, CONFIGURATION.MQTT_USERNAME_KEY, serviceId); assert.calledWith(gladys.variable.destroy, CONFIGURATION.MQTT_PASSWORD_KEY); assert.calledWith(gladys.variable.destroy, CONFIGURATION.MQTT_EMBEDDED_BROKER_KEY, serviceId); });
describe('room.destroy', () => { const brain = { addRoom: fake.returns(null), removeRoom: fake.returns(null), }; const room = new Room(brain); it('should destroy a room', async () => { await room.destroy('test-room'); assert.calledOnce(brain.removeRoom); }); it('should return room not found', async () => { const promise = room.destroy('room-does-not-exist'); return assertChai.isRejected(promise, 'Room not found'); }); });
describe('mqttHandler.init', () => { it('should init', async () => { const gladys = { variable: { getValue: fake.resolves('value'), }, system: { isDocker: fake.resolves(false), }, }; const mqttHandler = new MqttHandler(gladys, MockedMqttClient, 'faea9c35-759a-44d5-bcc9-2af1de37b8b4'); await mqttHandler.init(); assert.callCount(gladys.variable.getValue, 3); expect(Object.keys(mqttHandler.topicBinds)).is.deep.eq(DEFAULT.TOPICS); }); });
describe('gateway.login', () => { const variable = { getValue: fake.resolves(null), setValue: fake.resolves(null), }; const gateway = new Gateway(variable, event, system, sequelize, config); it('should login to gladys gateway', async () => { const loginResults = await gateway.login('tony.stark@gladysassistant.com', 'warmachine123'); expect(loginResults).to.have.property('two_factor_token'); assert.calledWith(gateway.gladysGatewayClient.login, 'tony.stark@gladysassistant.com', 'warmachine123'); }); it('should login two factor to gladys gateway', async () => { await gateway.loginTwoFactor('token', '123456'); assert.calledWith(gateway.gladysGatewayClient.loginInstance, 'token', '123456'); assert.called(variable.getValue); assert.called(variable.setValue); assert.calledOnce(gateway.gladysGatewayClient.createInstance); }); });
describe('gateway.disconnect', () => { it('should disconnect Gateway', async () => { const variable = { getValue: fake.resolves('key'), setValue: fake.resolves(null), destroy: fake.resolves(null), }; const gateway = new Gateway(variable, event, system, sequelize, config); await gateway.login('tony.stark@gladysassistant.com', 'warmachine123'); await gateway.disconnect(); }); });
it('should execute light turn on', async () => { const device = { setValue: fake.resolves(null), }; const stateManager = new StateManager(event); await executeActions( { stateManager, event, device }, [ [ { type: ACTIONS.LIGHT.TURN_ON, devices: ['light-1'], }, ], ], {}, ); assert.calledOnce(device.setValue); });
describe('POST /api/v1/service/mqtt/config/docker', () => { let controller; beforeEach(() => { controller = MqttController(mqttHandler); sinon.reset(); }); it('Install container', async () => { const req = {}; const res = { json: fake.returns(null), }; await controller['post /api/v1/service/mqtt/config/docker'].controller(req, res); assert.calledOnce(mqttHandler.installContainer); assert.calledOnce(res.json); }); });