From 467c0062bbb151f6a23c5c3addf325571b28a80f Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Sun, 3 Nov 2019 15:02:00 +0100 Subject: [PATCH] Dont' crash when removing non-existing device. https://github.com/Koenkk/zigbee2mqtt/issues/2241 --- lib/extension/bridgeConfig.js | 5 +++++ test/bridgeConfig.test.js | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/lib/extension/bridgeConfig.js b/lib/extension/bridgeConfig.js index 64749988d..c122b735b 100644 --- a/lib/extension/bridgeConfig.js +++ b/lib/extension/bridgeConfig.js @@ -236,6 +236,11 @@ class BridgeConfig extends BaseExtension { remove: ['removed', 'Removing', 'remove'], }; + if (!entity) { + logger.error(`Cannot ${lookup[action][2]}, device '${message}' does not exist`); + return; + } + const cleanup = () => { // Remove from configuration.yaml settings.removeDevice(entity.settings.ID); diff --git a/test/bridgeConfig.test.js b/test/bridgeConfig.test.js index b6ff9cfa8..c40f8419c 100644 --- a/test/bridgeConfig.test.js +++ b/test/bridgeConfig.test.js @@ -289,6 +289,13 @@ describe('Bridge config', () => { expect(settings.get().ban).toStrictEqual(['0x000b57fffec6a5b3']); }); + it('Shouldnt crash when removing non-existing device', async () => { + MQTT.publish.mockClear(); + MQTT.events.message('zigbee2mqtt/bridge/config/remove', 'not_existing_123'); + await flushPromises(); + expect(logger.error).toHaveBeenCalledWith(`Cannot remove, device 'not_existing_123' does not exist`); + }); + it('Should handle when remove fails', async () => { const device = zigbeeHerdsman.devices.bulb_color; device.removeFromNetwork.mockClear();