mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-09-01 16:48:31 +00:00
fix: Various fixes to align behaviors (+add benchmarks for dev) (#28011)
This commit is contained in:
+1
-18
@@ -55,7 +55,6 @@ describe("Controller", () => {
|
||||
let mockExit: Mock;
|
||||
|
||||
const getZ2MDevice = (zhDevice: string | number | ZhDevice): Device => {
|
||||
// @ts-expect-error private
|
||||
return controller.zigbee.resolveEntity(zhDevice)! as Device;
|
||||
};
|
||||
|
||||
@@ -295,11 +294,9 @@ describe("Controller", () => {
|
||||
await controller.start();
|
||||
await flushPromises();
|
||||
mockMQTTPublishAsync.mockClear();
|
||||
// @ts-expect-error private
|
||||
await controller.mqtt.publish("z2m/#/status", "empty");
|
||||
expect(mockMQTTPublishAsync).toHaveBeenCalledTimes(0);
|
||||
expect(mockLogger.error).toHaveBeenCalledWith(`Topic 'z2m/#/status' includes wildcard characters, skipping publish.`);
|
||||
// @ts-expect-error private
|
||||
await controller.mqtt.publish("z2m/+/status", "empty");
|
||||
expect(mockMQTTPublishAsync).toHaveBeenCalledTimes(0);
|
||||
expect(mockLogger.error).toHaveBeenCalledWith(`Topic 'z2m/+/status' includes wildcard characters, skipping publish.`);
|
||||
@@ -503,7 +500,6 @@ describe("Controller", () => {
|
||||
});
|
||||
|
||||
it("Handle mqtt message", async () => {
|
||||
// @ts-expect-error private
|
||||
const spyEventbusEmitMQTTMessage = vi.spyOn(controller.eventBus, "emitMQTTMessage").mockImplementation(vi.fn());
|
||||
|
||||
await controller.start();
|
||||
@@ -514,7 +510,6 @@ describe("Controller", () => {
|
||||
});
|
||||
|
||||
it("Skip MQTT messages on topic we published to", async () => {
|
||||
// @ts-expect-error private
|
||||
const spyEventbusEmitMQTTMessage = vi.spyOn(controller.eventBus, "emitMQTTMessage").mockImplementation(vi.fn());
|
||||
|
||||
await controller.start();
|
||||
@@ -522,7 +517,6 @@ describe("Controller", () => {
|
||||
await mockMQTTEvents.message("zigbee2mqtt/skip-this-topic", "skipped");
|
||||
expect(spyEventbusEmitMQTTMessage).toHaveBeenCalledWith({topic: "zigbee2mqtt/skip-this-topic", message: "skipped"});
|
||||
mockLogger.debug.mockClear();
|
||||
// @ts-expect-error private
|
||||
await controller.mqtt.publish("skip-this-topic", "", {});
|
||||
await mockMQTTEvents.message("zigbee2mqtt/skip-this-topic", "skipped");
|
||||
expect(mockLogger.debug).toHaveBeenCalledTimes(0);
|
||||
@@ -844,13 +838,11 @@ describe("Controller", () => {
|
||||
mockMQTTPublishAsync.mockClear();
|
||||
|
||||
const device = getZ2MDevice("bulb");
|
||||
// @ts-expect-error private
|
||||
expect(controller.state.get(device)).toStrictEqual({brightness: 50, color_temp: 370, linkquality: 99, state: "ON"});
|
||||
|
||||
await controller.publishEntityState(device, {state: "ON", brightness: 200, color_temp: 370, linkquality: 87});
|
||||
await flushPromises();
|
||||
|
||||
// @ts-expect-error private
|
||||
expect(controller.state.get(device)).toStrictEqual({brightness: 200, color_temp: 370, state: "ON"});
|
||||
expect(mockMQTTPublishAsync).toHaveBeenCalledTimes(5);
|
||||
expect(mockMQTTPublishAsync).toHaveBeenCalledWith("zigbee2mqtt/bulb/state", "ON", {qos: 0, retain: true});
|
||||
@@ -870,13 +862,11 @@ describe("Controller", () => {
|
||||
mockMQTTPublishAsync.mockClear();
|
||||
|
||||
const device = getZ2MDevice("bulb");
|
||||
// @ts-expect-error private
|
||||
expect(controller.state.get(device)).toStrictEqual({brightness: 50, color_temp: 370, linkquality: 99, state: "ON"});
|
||||
|
||||
await controller.publishEntityState(device, {state: "ON", brightness: 200, color_temp: 370, linkquality: 87});
|
||||
await flushPromises();
|
||||
|
||||
// @ts-expect-error private
|
||||
expect(controller.state.get(device)).toStrictEqual({brightness: 200, color_temp: 370, state: "ON"});
|
||||
expect(mockMQTTPublishAsync).toHaveBeenCalledTimes(5);
|
||||
expect(mockMQTTPublishAsync).toHaveBeenCalledWith("zigbee2mqtt/bulb/state", "ON", {qos: 0, retain: true});
|
||||
@@ -1059,10 +1049,7 @@ describe("Controller", () => {
|
||||
await controller.start();
|
||||
await flushPromises();
|
||||
|
||||
const retainedMessages = Object.keys(
|
||||
// @ts-expect-error private
|
||||
controller.mqtt.retainedMessages,
|
||||
).length;
|
||||
const retainedMessages = Object.keys(controller.mqtt.retainedMessages).length;
|
||||
|
||||
mockMQTTPublishAsync.mockClear();
|
||||
await vi.advanceTimersByTimeAsync(2500); // before any startup configure triggers
|
||||
@@ -1083,7 +1070,6 @@ describe("Controller", () => {
|
||||
|
||||
it("Should prevent any message being published with retain flag when force_disable_retain is set", async () => {
|
||||
settings.set(["mqtt", "force_disable_retain"], true);
|
||||
// @ts-expect-error private
|
||||
await controller.mqtt.connect();
|
||||
mockMQTTPublishAsync.mockClear();
|
||||
// @ts-expect-error private
|
||||
@@ -1141,7 +1127,6 @@ describe("Controller", () => {
|
||||
it("Should remove state of removed device when stopped", async () => {
|
||||
await controller.start();
|
||||
const device = getZ2MDevice("bulb");
|
||||
// @ts-expect-error private
|
||||
expect(controller.state.get(device)).toStrictEqual({brightness: 50, color_temp: 370, linkquality: 99, state: "ON"});
|
||||
device.zh.isDeleted = true;
|
||||
await controller.stop();
|
||||
@@ -1150,7 +1135,6 @@ describe("Controller", () => {
|
||||
});
|
||||
|
||||
it("EventBus should handle sync errors", async () => {
|
||||
// @ts-expect-error private
|
||||
const eventbus = controller.eventBus;
|
||||
const callback = vi.fn().mockImplementation(() => {
|
||||
throw new Error("Whoops!");
|
||||
@@ -1163,7 +1147,6 @@ describe("Controller", () => {
|
||||
});
|
||||
|
||||
it("EventBus should handle async errors", async () => {
|
||||
// @ts-expect-error private
|
||||
const eventbus = controller.eventBus;
|
||||
const callback = vi.fn().mockRejectedValue(new Error("Whoops!"));
|
||||
eventbus.onStateChange({constructor: {name: "Test"}}, callback);
|
||||
|
||||
Reference in New Issue
Block a user