From 344776b63379ab91bf7b35e9c208cff0f88bb84b Mon Sep 17 00:00:00 2001 From: Maximilian Rink Date: Sun, 5 Jul 2026 08:50:33 +0200 Subject: [PATCH] fix: Refresh exposes after manual device configure (#32486) --- lib/extension/configure.ts | 2 +- test/extensions/configure.test.ts | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/extension/configure.ts b/lib/extension/configure.ts index dd9601c58..68316ca78 100644 --- a/lib/extension/configure.ts +++ b/lib/extension/configure.ts @@ -137,7 +137,7 @@ export default class Configure extends Extension { logger.info(`Successfully configured '${device.name}' (definition v${definitionVersion})`); device.zh.meta.configured = definitionVersion; device.zh.save(); - this.eventBus.emitDevicesChanged(); + this.eventBus.emitExposesAndDevicesChanged(device); } catch (error) { const newAttempts = attempts + 1; this.attempts.set(device.ieeeAddr, newAttempts); diff --git a/test/extensions/configure.test.ts b/test/extensions/configure.test.ts index 36865d816..3c6046e70 100644 --- a/test/extensions/configure.test.ts +++ b/test/extensions/configure.test.ts @@ -193,16 +193,28 @@ describe("Extension: Configure", () => { }); it("Should allow to configure via MQTT", async () => { + const emitDevicesChanged = vi.spyOn(controller.eventBus, "emitDevicesChanged"); + const emitExposesChanged = vi.spyOn(controller.eventBus, "emitExposesChanged"); + mockClear(devices.remote); expectRemoteNotConfigured(); - await mockMQTTEvents.message("zigbee2mqtt/bridge/request/device/configure", "remote"); - await flushPromises(); - expectRemoteConfigured(); - expect(mockMQTTPublishAsync).toHaveBeenCalledWith( - "zigbee2mqtt/bridge/response/device/configure", - stringify({data: {id: "remote"}, status: "ok"}), - {}, - ); + try { + await mockMQTTEvents.message("zigbee2mqtt/bridge/request/device/configure", "remote"); + await flushPromises(); + expectRemoteConfigured(); + expect(emitDevicesChanged).toHaveBeenCalledTimes(1); + expect(emitExposesChanged).toHaveBeenCalledWith({ + device: controller.zigbee.resolveEntity(devices.remote), + }); + expect(mockMQTTPublishAsync).toHaveBeenCalledWith( + "zigbee2mqtt/bridge/response/device/configure", + stringify({data: {id: "remote"}, status: "ok"}), + {}, + ); + } finally { + emitExposesChanged.mockRestore(); + emitDevicesChanged.mockRestore(); + } }); it("Fail to configure via MQTT when device does not exist", async () => {