From 8f40d18c0a718b47aa276e20d67dbad240daafe1 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Wed, 7 Oct 2020 17:05:46 +0200 Subject: [PATCH] Fix last seen unknown when opening frontend. #4266 --- lib/extension/frontend.js | 12 ++++++++++-- test/frontend.test.js | 13 +++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/extension/frontend.js b/lib/extension/frontend.js index 545869d3f..c8adf862a 100644 --- a/lib/extension/frontend.js +++ b/lib/extension/frontend.js @@ -92,10 +92,18 @@ class Frontend extends Extension { } for (const device of this.zigbee.getClients()) { + let payload = {}; + const resolvedEntity = this.zigbee.resolveEntity(device); if (this.state.exists(device.ieeeAddr)) { - const resolvedEntity = this.zigbee.resolveEntity(device); - ws.send(stringify({topic: resolvedEntity.name, payload: this.state.get(device.ieeeAddr)})); + payload = {...payload, ...this.state.get(device.ieeeAddr)}; } + + const lastSeen = settings.get().advanced.last_seen; + if (lastSeen !== 'disable') { + payload.last_seen = utils.formatDate(resolvedEntity.device.lastSeen, lastSeen); + } + + ws.send(stringify({topic: resolvedEntity.name, payload})); } } diff --git a/test/frontend.test.js b/test/frontend.test.js index a989edcec..2fed86bf8 100644 --- a/test/frontend.test.js +++ b/test/frontend.test.js @@ -122,9 +122,10 @@ describe('Frontend', () => { }; mockWS.implementation.clients.push(mockWSClient.implementation); await mockWS.events.connection(mockWSClient.implementation); - expect(mockWSClient.implementation.send).toHaveBeenCalledTimes(9); + expect(mockWSClient.implementation.send).toHaveBeenCalledTimes(48); + expect(JSON.parse(mockWSClient.implementation.send.mock.calls[0])).toStrictEqual({topic: 'bridge/state', payload: 'online'}); - expect(JSON.parse(mockWSClient.implementation.send.mock.calls[8])).toStrictEqual({topic:"remote", payload:{brightness:255, update:{state: "idle"}, update_available: false}}); + expect(JSON.parse(mockWSClient.implementation.send.mock.calls[12])).toStrictEqual({topic:"remote", payload:{brightness:255, update:{state: "idle"}, update_available: false}}); // Message MQTT.publish.mockClear(); @@ -152,6 +153,14 @@ describe('Frontend', () => { mockWSClient.implementation.readyState = 'close'; mockWSClient.events.message(stringify({topic: 'bulb_color/set', payload: {state: 'ON'}})) expect(mockWSClient.implementation.send).toHaveBeenCalledTimes(0); + + // Send last seen on connect + mockWSClient.implementation.send.mockClear(); + mockWSClient.implementation.readyState = 'open'; + settings.set(['advanced'], {last_seen: 'ISO_8601'}); + mockWS.implementation.clients.push(mockWSClient.implementation); + await mockWS.events.connection(mockWSClient.implementation); + expect(JSON.parse(mockWSClient.implementation.send.mock.calls[12])).toStrictEqual({topic:"remote", payload:{brightness:255, last_seen: "1970-01-01T00:00:01.000Z", update:{state: "idle"}, update_available: false}}); }); it('onReques/onUpgrade', async () => {