From f992597392a5b2f9de7714d6ffa30948804296fa Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Sun, 7 Feb 2021 14:07:27 +0100 Subject: [PATCH] bridge/request/options: fix exception on null value. --- lib/extension/bridge.js | 2 +- test/bridge.test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/extension/bridge.js b/lib/extension/bridge.js index 52f8da44c..c3affc8f9 100644 --- a/lib/extension/bridge.js +++ b/lib/extension/bridge.js @@ -163,7 +163,7 @@ class Bridge extends Extension { const beforeValue = before[key]; if (Array.isArray(beforeValue)) { after[key] = beforeValue; - } else if (typeof beforeValue === 'object') { + } else if (afterValue && typeof beforeValue === 'object') { convertBackArray(beforeValue, afterValue); } } diff --git a/test/bridge.test.js b/test/bridge.test.js index 10fa4dbc2..cdef6bd91 100644 --- a/test/bridge.test.js +++ b/test/bridge.test.js @@ -1009,6 +1009,20 @@ describe('Bridge', () => { ); }); + it('Change options with null', async () => { + zigbeeHerdsman.permitJoin.mockClear(); + expect(settings.get().serial).toStrictEqual({"disable_led": false, "port": "/dev/dummy"}) + MQTT.publish.mockClear(); + MQTT.events.message('zigbee2mqtt/bridge/request/options', stringify({"options":{"serial":{"disable_led":false,"port":null}}})); + await flushPromises(); + expect(settings.get().serial).toStrictEqual({"disable_led": false, "port": null}); + expect(MQTT.publish).toHaveBeenCalledWith( + 'zigbee2mqtt/bridge/response/options', + stringify({"data":{"restart_required":true},"status":"ok"}), + {retain: false, qos: 0}, expect.any(Function) + ); + }); + it('Change options invalid payload', async () => { zigbeeHerdsman.permitJoin.mockClear(); MQTT.publish.mockClear();