diff --git a/lib/extension/bridgeConfig.js b/lib/extension/bridgeConfig.js index 642fbe8c8..f4417aab5 100644 --- a/lib/extension/bridgeConfig.js +++ b/lib/extension/bridgeConfig.js @@ -99,7 +99,7 @@ class BridgeConfig { return; } - settings.set(['advanced', 'elapsed'], message); + settings.set(['advanced', 'elapsed'], message === 'true'); logger.info(`Set elapsed to ${message}`); } diff --git a/test/bridgeConfig.test.js b/test/bridgeConfig.test.js new file mode 100644 index 000000000..6cf71e066 --- /dev/null +++ b/test/bridgeConfig.test.js @@ -0,0 +1,59 @@ +const BridgeConfig = require('../lib/extension/bridgeConfig'); +const settings = require('../lib/util/settings'); +const fs = require('../lib/util/fs'); +const objectAssignDeep = require('object-assign-deep'); +const data = require('../lib/util/data'); +const configurationFile = data.joinPath('configuration.yaml'); + +const mqtt = { + subscribe: (topic) => {}, +}; + +describe('BridgeConfig', () => { + let bridgeConfig; + const write = (file, json) => fs.writeYaml(file, json); + const read = (file) => fs.readYaml(file); + const files = new Map(); + + beforeAll(() => { + jest.spyOn(fs, 'readYaml').mockImplementation((file) => { + if (files.has(file)) return objectAssignDeep.noMutate(files.get(file)); + throw new Error(`Fake file not found: ${file}`); + }); + jest.spyOn(fs, 'readYamlIfExists').mockImplementation((file) => { + if (files.has(file)) return objectAssignDeep.noMutate(files.get(file)); + return null; + }); + jest.spyOn(fs, 'writeYaml').mockImplementation((file, content) => { + files.set(file, objectAssignDeep.noMutate(content)); + }); + }); + + beforeEach(() => { + settings._clear(); + files.clear(); + bridgeConfig = new BridgeConfig(null, mqtt, null, null); + }); + + afterAll(() => { + fs.readYaml.mockRestore(); + fs.readYamlIfExists.mockRestore(); + fs.writeYaml.mockRestore(); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('Setting elapsed false', async () => { + write(configurationFile, {advanced: {elapsed: true}}); + bridgeConfig.onMQTTMessage('zigbee2mqtt/bridge/config/elapsed', 'false'); + const expected = { + advanced: { + elapsed: false, + }, + }; + + expect(read(configurationFile)).toStrictEqual(expected); + }); +});