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();