@digital-alchemy/hass 25.3.2 → 25.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hass.module.d.mts +23 -1
- package/dist/hass.module.mjs +26 -1
- package/dist/hass.module.mjs.map +1 -1
- package/dist/helpers/fetch.mjs +0 -1
- package/dist/helpers/fetch.mjs.map +1 -1
- package/dist/helpers/utility.d.mts +1 -0
- package/dist/helpers/utility.mjs +4 -0
- package/dist/helpers/utility.mjs.map +1 -1
- package/dist/mock_assistant/mock-assistant.module.d.mts +22 -0
- package/dist/services/area.service.mjs +9 -1
- package/dist/services/area.service.mjs.map +1 -1
- package/dist/services/call-proxy.service.mjs +10 -2
- package/dist/services/call-proxy.service.mjs.map +1 -1
- package/dist/services/config.service.mjs +15 -13
- package/dist/services/config.service.mjs.map +1 -1
- package/dist/services/device.service.mjs +3 -1
- package/dist/services/device.service.mjs.map +1 -1
- package/dist/services/diagnostics.service.d.mts +26 -0
- package/dist/services/diagnostics.service.mjs +41 -0
- package/dist/services/diagnostics.service.mjs.map +1 -0
- package/dist/services/entity.service.mjs +12 -1
- package/dist/services/entity.service.mjs.map +1 -1
- package/dist/services/fetch-api.service.mjs +8 -2
- package/dist/services/fetch-api.service.mjs.map +1 -1
- package/dist/services/floor.service.mjs +3 -1
- package/dist/services/floor.service.mjs.map +1 -1
- package/dist/services/id-by.service.d.mts +1 -1
- package/dist/services/id-by.service.mjs +20 -13
- package/dist/services/id-by.service.mjs.map +1 -1
- package/dist/services/index.d.mts +1 -0
- package/dist/services/index.mjs +1 -0
- package/dist/services/index.mjs.map +1 -1
- package/dist/services/label.service.mjs +3 -1
- package/dist/services/label.service.mjs.map +1 -1
- package/dist/services/reference.service.mjs +15 -4
- package/dist/services/reference.service.mjs.map +1 -1
- package/dist/services/registry.service.mjs +8 -8
- package/dist/services/registry.service.mjs.map +1 -1
- package/dist/services/websocket-api.service.mjs +10 -2
- package/dist/services/websocket-api.service.mjs.map +1 -1
- package/dist/services/zone.service.mjs +3 -1
- package/dist/services/zone.service.mjs.map +1 -1
- package/dist/testing/area.spec.mjs +141 -132
- package/dist/testing/area.spec.mjs.map +1 -1
- package/dist/testing/device.spec.mjs +17 -0
- package/dist/testing/device.spec.mjs.map +1 -1
- package/dist/testing/entity.spec.mjs +167 -0
- package/dist/testing/entity.spec.mjs.map +1 -1
- package/dist/testing/fetch.spec.d.mts +1 -0
- package/dist/testing/fetch.spec.mjs +45 -0
- package/dist/testing/fetch.spec.mjs.map +1 -0
- package/dist/testing/floor.spec.mjs +17 -0
- package/dist/testing/floor.spec.mjs.map +1 -1
- package/dist/testing/id-by.spec.mjs +93 -5
- package/dist/testing/id-by.spec.mjs.map +1 -1
- package/dist/testing/label.spec.mjs +17 -0
- package/dist/testing/label.spec.mjs.map +1 -1
- package/dist/testing/ref-by.spec.mjs +1 -1
- package/dist/testing/ref-by.spec.mjs.map +1 -1
- package/dist/testing/zone.spec.mjs +24 -5
- package/dist/testing/zone.spec.mjs.map +1 -1
- package/package.json +35 -31
- package/src/hass.module.mts +29 -0
- package/src/helpers/fetch.mts +1 -1
- package/src/helpers/utility.mts +5 -0
- package/src/services/area.service.mts +9 -0
- package/src/services/call-proxy.service.mts +16 -9
- package/src/services/config.service.mts +21 -16
- package/src/services/device.service.mts +3 -0
- package/src/services/diagnostics.service.mts +45 -0
- package/src/services/entity.service.mts +12 -0
- package/src/services/fetch-api.service.mts +11 -2
- package/src/services/floor.service.mts +3 -0
- package/src/services/id-by.service.mts +25 -15
- package/src/services/index.mts +1 -0
- package/src/services/label.service.mts +3 -0
- package/src/services/reference.service.mts +15 -3
- package/src/services/registry.service.mts +8 -8
- package/src/services/websocket-api.service.mts +10 -2
- package/src/services/zone.service.mts +3 -0
- package/src/testing/area.spec.mts +153 -140
- package/src/testing/device.spec.mts +22 -0
- package/src/testing/entity.spec.mts +201 -0
- package/src/testing/fetch.spec.mts +54 -0
- package/src/testing/floor.spec.mts +22 -0
- package/src/testing/id-by.spec.mts +100 -5
- package/src/testing/label.spec.mts +22 -0
- package/src/testing/ref-by.spec.mts +1 -1
- package/src/testing/zone.spec.mts +29 -5
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { hassTestRunner } from "../mock_assistant/index.mts";
|
|
2
2
|
import { PICK_ENTITY } from "../user.mts";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
});
|
|
4
|
+
afterEach(async () => {
|
|
5
|
+
await hassTestRunner.teardown();
|
|
6
|
+
vi.restoreAllMocks();
|
|
7
|
+
});
|
|
9
8
|
|
|
9
|
+
describe("enabled entities", () => {
|
|
10
10
|
describe("area", () => {
|
|
11
11
|
it("find entities by area", async () => {
|
|
12
12
|
expect.assertions(2);
|
|
@@ -138,3 +138,98 @@ describe("ID By", () => {
|
|
|
138
138
|
});
|
|
139
139
|
});
|
|
140
140
|
});
|
|
141
|
+
|
|
142
|
+
describe("disabled entities", () => {
|
|
143
|
+
beforeAll(() => {
|
|
144
|
+
hassTestRunner
|
|
145
|
+
// .emitLogs()
|
|
146
|
+
.configure({
|
|
147
|
+
hass: {
|
|
148
|
+
FILTER_DISABLED_ENTITIES_ID_BY: false,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
describe("area", () => {
|
|
153
|
+
it("find entities by area", async () => {
|
|
154
|
+
expect.assertions(2);
|
|
155
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
156
|
+
lifecycle.onReady(() => {
|
|
157
|
+
const bedroom = hass.idBy.area("bedroom");
|
|
158
|
+
const kitchen = hass.idBy.area("kitchen");
|
|
159
|
+
expect(bedroom.length).toBe(4);
|
|
160
|
+
expect(kitchen.length).toBe(3);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("find entities by area limiting by domain", async () => {
|
|
166
|
+
expect.assertions(2);
|
|
167
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
168
|
+
lifecycle.onReady(() => {
|
|
169
|
+
const bedroom = hass.idBy.area("bedroom", "light");
|
|
170
|
+
const kitchen = hass.idBy.area("kitchen", "light");
|
|
171
|
+
expect(bedroom.length).toBe(1);
|
|
172
|
+
expect(kitchen.length).toBe(1);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
describe("label", () => {
|
|
179
|
+
it("find entities by label", async () => {
|
|
180
|
+
expect.assertions(1);
|
|
181
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
182
|
+
lifecycle.onReady(() => {
|
|
183
|
+
const synapse = hass.idBy.label("synapse");
|
|
184
|
+
expect(synapse.length).toBe(9);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
describe("device", () => {
|
|
191
|
+
it("find entities by device", async () => {
|
|
192
|
+
expect.assertions(1);
|
|
193
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
194
|
+
lifecycle.onReady(() => {
|
|
195
|
+
const synapse = hass.idBy.device("308e39cf50a9fc6c30b4110724ed1f2e");
|
|
196
|
+
expect(synapse.length).toBe(12);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
describe("platform", () => {
|
|
203
|
+
it("find entities by platform", async () => {
|
|
204
|
+
expect.assertions(1);
|
|
205
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
206
|
+
lifecycle.onReady(() => {
|
|
207
|
+
const synapse = hass.idBy.platform("synapse");
|
|
208
|
+
expect(synapse.length).toBe(8);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
describe("floor", () => {
|
|
215
|
+
it("find entities by floor", async () => {
|
|
216
|
+
expect.assertions(1);
|
|
217
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
218
|
+
lifecycle.onReady(() => {
|
|
219
|
+
const synapse = hass.idBy.floor("downstairs");
|
|
220
|
+
expect(synapse.length).toBe(6);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it("find entities by floor limiting by domain", async () => {
|
|
226
|
+
expect.assertions(1);
|
|
227
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
228
|
+
lifecycle.onReady(() => {
|
|
229
|
+
const synapse = hass.idBy.floor("downstairs", "light");
|
|
230
|
+
expect(synapse.length).toBe(1);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { subscribe } from "node:diagnostics_channel";
|
|
2
|
+
|
|
1
3
|
import { sleep } from "@digital-alchemy/core";
|
|
2
4
|
|
|
3
5
|
import { LABEL_REGISTRY_UPDATED, LabelDefinition } from "../helpers/index.mts";
|
|
@@ -103,6 +105,26 @@ describe("Label", () => {
|
|
|
103
105
|
});
|
|
104
106
|
});
|
|
105
107
|
});
|
|
108
|
+
|
|
109
|
+
it("should publish diagnostics on label registry update", async () => {
|
|
110
|
+
expect.assertions(1);
|
|
111
|
+
hassTestRunner.configure({ hass: { EMIT_DIAGNOSTICS: true } });
|
|
112
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
113
|
+
vi.spyOn(hass.socket, "sendMessage").mockImplementation(async () => undefined);
|
|
114
|
+
const spy = vi.fn();
|
|
115
|
+
subscribe(hass.diagnostics.label.registry_update.name, spy);
|
|
116
|
+
lifecycle.onReady(async () => {
|
|
117
|
+
setImmediate(async () => {
|
|
118
|
+
hass.socket.socketEvents.emit("label_registry_updated");
|
|
119
|
+
});
|
|
120
|
+
await sleep(100);
|
|
121
|
+
expect(spy).toHaveBeenCalledWith(
|
|
122
|
+
expect.objectContaining({ ms: expect.any(Number) }),
|
|
123
|
+
hass.diagnostics.label.registry_update.name,
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
});
|
|
106
128
|
});
|
|
107
129
|
|
|
108
130
|
describe("Order of operations", () => {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { subscribe } from "node:diagnostics_channel";
|
|
2
|
+
|
|
1
3
|
import { sleep } from "@digital-alchemy/core";
|
|
2
4
|
|
|
3
5
|
import { ZONE_REGISTRY_UPDATED, ZoneDetails } from "../helpers/index.mts";
|
|
@@ -10,11 +12,13 @@ describe("Zone", () => {
|
|
|
10
12
|
});
|
|
11
13
|
|
|
12
14
|
const EXAMPLE_ZONE = {
|
|
13
|
-
icon: "",
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
icon: "mdi:map-marker",
|
|
16
|
+
id: "test",
|
|
17
|
+
latitude: 37.7749,
|
|
18
|
+
longitude: -122.4194,
|
|
19
|
+
name: "Example Zone",
|
|
20
|
+
passive: false,
|
|
21
|
+
radius: 100,
|
|
18
22
|
} as ZoneDetails;
|
|
19
23
|
|
|
20
24
|
describe("Lifecycle", () => {
|
|
@@ -62,6 +66,26 @@ describe("Zone", () => {
|
|
|
62
66
|
});
|
|
63
67
|
});
|
|
64
68
|
});
|
|
69
|
+
|
|
70
|
+
it("should publish diagnostics on zone registry update", async () => {
|
|
71
|
+
expect.assertions(1);
|
|
72
|
+
hassTestRunner.configure({ hass: { EMIT_DIAGNOSTICS: true } });
|
|
73
|
+
await hassTestRunner.run(({ lifecycle, hass }) => {
|
|
74
|
+
vi.spyOn(hass.socket, "sendMessage").mockImplementation(async () => undefined);
|
|
75
|
+
const spy = vi.fn();
|
|
76
|
+
subscribe(hass.diagnostics.zone.registry_update.name, spy);
|
|
77
|
+
lifecycle.onReady(async () => {
|
|
78
|
+
setImmediate(async () => {
|
|
79
|
+
hass.socket.socketEvents.emit("zone_registry_updated");
|
|
80
|
+
});
|
|
81
|
+
await sleep(100);
|
|
82
|
+
expect(spy).toHaveBeenCalledWith(
|
|
83
|
+
expect.objectContaining({ ms: expect.any(Number) }),
|
|
84
|
+
hass.diagnostics.zone.registry_update.name,
|
|
85
|
+
);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
});
|
|
65
89
|
});
|
|
66
90
|
|
|
67
91
|
describe("Order of operations", () => {
|