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'); }); });
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.'); });
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); });
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('Device', () => { it('should purgeStates', async () => { const variable = { getValue: () => fake.resolves(1), }; const stateManager = new StateManager(event); const service = {}; const device = new Device(event, {}, stateManager, service, {}, variable); await device.purgeStates(); }); it('should not purgeStates, invalid date', async () => { const variable = { getValue: () => fake.resolves('NOT A DATE'), }; const stateManager = new StateManager(event); const service = {}; const device = new Device(event, {}, stateManager, service, {}, variable); await device.purgeStates(); }); });
it('should execute stop service', async () => { const example = { stop: fake.resolves(null), }; const stateManager = new StateManager(event); stateManager.setState('service', 'example', example); await executeActions( { stateManager, event }, [ [ { type: ACTIONS.SERVICE.STOP, service: 'example', }, ], ], {}, ); assert.calledOnce(example.stop); });
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); }); });
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('gateway.downloadBackup', () => { it('should restore a backup', async () => { const variable = { getValue: fake.resolves('key'), setValue: fake.resolves(null), }; const gateway = new Gateway(variable, event, system, sequelize, config); await gateway.login('tony.stark@gladysassistant.com', 'warmachine123'); const { encryptedBackupFilePath } = await gateway.backup(); const { backupFilePath } = await gateway.downloadBackup(encryptedBackupFilePath); gateway.config.storage = '/tmp/gladys-database-restore-test.db'; await gateway.restoreBackup(backupFilePath); }); it('should restore a backup with error', async () => { const variable = { getValue: fake.resolves('key'), setValue: fake.resolves(null), }; const gateway = new Gateway(variable, event, system, sequelize, config); await gateway.login('tony.stark@gladysassistant.com', 'warmachine123'); await gateway.restoreBackupEvent('this-path-does-not-exist'); }); });
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 throw error, action type does not exist', async () => { const light = { turnOn: fake.resolves(null), }; const stateManager = new StateManager(event); stateManager.setState('device', 'light-1', light); const promise = executeActions( { stateManager, event }, [ [ { type: 'THISDOESNOTEXIST', device: 'light-1', }, ], ], {}, ); return chaiAssert.isRejected(promise, 'Action type "THISDOESNOTEXIST" does not exist.'); });
it('should execute start service', async () => { const example = { start: fake.resolves(null), }; const stateManager = new StateManager(event); stateManager.setState('service', 'example', example); await executeActions( { stateManager, event }, [ [ { type: ACTIONS.SERVICE.START, service: 'example', }, ], ], {}, ); assert.calledOnce(example.start); });
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); });