@digital-alchemy/hass 24.9.3 → 24.9.4

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.
Files changed (197) hide show
  1. package/README.md +4 -1
  2. package/dist/dynamic.d.ts +1 -1
  3. package/dist/dynamic.js +7 -2
  4. package/dist/dynamic.js.map +1 -1
  5. package/dist/extensions/area.extension.d.ts +2 -12
  6. package/dist/extensions/area.extension.js +20 -26
  7. package/dist/extensions/area.extension.js.map +1 -1
  8. package/dist/extensions/backup.extension.d.ts +2 -7
  9. package/dist/extensions/backup.extension.js +5 -8
  10. package/dist/extensions/backup.extension.js.map +1 -1
  11. package/dist/extensions/call-proxy.extension.d.ts +1 -1
  12. package/dist/extensions/call-proxy.extension.js +3 -22
  13. package/dist/extensions/call-proxy.extension.js.map +1 -1
  14. package/dist/extensions/config.extension.d.ts +2 -6
  15. package/dist/extensions/config.extension.js +21 -25
  16. package/dist/extensions/config.extension.js.map +1 -1
  17. package/dist/extensions/conversation.extension.d.ts +2 -6
  18. package/dist/extensions/conversation.extension.js +5 -8
  19. package/dist/extensions/conversation.extension.js.map +1 -1
  20. package/dist/extensions/device.extension.d.ts +2 -5
  21. package/dist/extensions/device.extension.js +16 -22
  22. package/dist/extensions/device.extension.js.map +1 -1
  23. package/dist/extensions/entity.extension.d.ts +2 -61
  24. package/dist/extensions/entity.extension.js +42 -83
  25. package/dist/extensions/entity.extension.js.map +1 -1
  26. package/dist/extensions/events.extension.d.ts +3 -11
  27. package/dist/extensions/events.extension.js +8 -11
  28. package/dist/extensions/events.extension.js.map +1 -1
  29. package/dist/extensions/fetch-api.extension.d.ts +12 -4
  30. package/dist/extensions/fetch-api.extension.js +23 -35
  31. package/dist/extensions/fetch-api.extension.js.map +1 -1
  32. package/dist/extensions/floor.extension.d.ts +2 -9
  33. package/dist/extensions/floor.extension.js +17 -23
  34. package/dist/extensions/floor.extension.js.map +1 -1
  35. package/dist/extensions/id-by.extension.js +15 -20
  36. package/dist/extensions/id-by.extension.js.map +1 -1
  37. package/dist/extensions/index.d.ts +1 -0
  38. package/dist/extensions/index.js +16 -18
  39. package/dist/extensions/index.js.map +1 -1
  40. package/dist/extensions/internal.extension.d.ts +18 -0
  41. package/dist/extensions/internal.extension.js +102 -0
  42. package/dist/extensions/internal.extension.js.map +1 -0
  43. package/dist/extensions/label.extension.d.ts +2 -9
  44. package/dist/extensions/label.extension.js +17 -23
  45. package/dist/extensions/label.extension.js.map +1 -1
  46. package/dist/extensions/reference.extension.d.ts +2 -12
  47. package/dist/extensions/reference.extension.js +19 -25
  48. package/dist/extensions/reference.extension.js.map +1 -1
  49. package/dist/extensions/registry.extension.d.ts +2 -7
  50. package/dist/extensions/registry.extension.js +1 -4
  51. package/dist/extensions/registry.extension.js.map +1 -1
  52. package/dist/extensions/websocket-api.extension.d.ts +3 -78
  53. package/dist/extensions/websocket-api.extension.js +82 -165
  54. package/dist/extensions/websocket-api.extension.js.map +1 -1
  55. package/dist/extensions/zone.extension.d.ts +2 -7
  56. package/dist/extensions/zone.extension.js +15 -21
  57. package/dist/extensions/zone.extension.js.map +1 -1
  58. package/dist/hass.module.d.ts +47 -36
  59. package/dist/hass.module.js +70 -70
  60. package/dist/hass.module.js.map +1 -1
  61. package/dist/helpers/backup.helper.js +1 -2
  62. package/dist/helpers/constants.helper.js +15 -18
  63. package/dist/helpers/constants.helper.js.map +1 -1
  64. package/dist/helpers/device.helper.js +2 -5
  65. package/dist/helpers/device.helper.js.map +1 -1
  66. package/dist/helpers/entity-state.helper.d.ts +3 -8
  67. package/dist/helpers/entity-state.helper.js +1 -8
  68. package/dist/helpers/entity-state.helper.js.map +1 -1
  69. package/dist/helpers/features.helper.js +79 -85
  70. package/dist/helpers/features.helper.js.map +1 -1
  71. package/dist/helpers/fetch/calendar.js +1 -2
  72. package/dist/helpers/fetch/configuration.js +2 -5
  73. package/dist/helpers/fetch/configuration.js.map +1 -1
  74. package/dist/helpers/fetch/index.js +5 -8
  75. package/dist/helpers/fetch/index.js.map +1 -1
  76. package/dist/helpers/fetch/server-log.js +1 -2
  77. package/dist/helpers/fetch/server-log.js.map +1 -1
  78. package/dist/helpers/fetch/service-list.js +1 -2
  79. package/dist/helpers/fetch/weather-forecasts.js +1 -2
  80. package/dist/helpers/fetch/weather-forecasts.js.map +1 -1
  81. package/dist/helpers/fetch.helper.d.ts +162 -0
  82. package/dist/helpers/fetch.helper.js +161 -0
  83. package/dist/helpers/fetch.helper.js.map +1 -0
  84. package/dist/helpers/id-by.helper.js +1 -2
  85. package/dist/helpers/index.d.ts +2 -1
  86. package/dist/helpers/index.js +13 -15
  87. package/dist/helpers/index.js.map +1 -1
  88. package/dist/helpers/interfaces.helper.d.ts +228 -0
  89. package/dist/helpers/interfaces.helper.js +10 -0
  90. package/dist/helpers/interfaces.helper.js.map +1 -0
  91. package/dist/helpers/manifest.helper.d.ts +0 -1
  92. package/dist/helpers/manifest.helper.js +0 -1
  93. package/dist/helpers/notify.helper.d.ts +11 -3
  94. package/dist/helpers/notify.helper.js +1 -2
  95. package/dist/helpers/registry.js +7 -10
  96. package/dist/helpers/registry.js.map +1 -1
  97. package/dist/helpers/utility.helper.d.ts +6 -1
  98. package/dist/helpers/utility.helper.js +9 -13
  99. package/dist/helpers/utility.helper.js.map +1 -1
  100. package/dist/helpers/websocket.helper.d.ts +1 -2
  101. package/dist/helpers/websocket.helper.js +1 -2
  102. package/dist/index.js +5 -8
  103. package/dist/index.js.map +1 -1
  104. package/dist/mock_assistant/extensions/area.extension.d.ts +8 -0
  105. package/dist/mock_assistant/extensions/area.extension.js +51 -0
  106. package/dist/mock_assistant/extensions/area.extension.js.map +1 -0
  107. package/dist/mock_assistant/extensions/config.extension.d.ts +14 -0
  108. package/dist/mock_assistant/extensions/config.extension.js +29 -0
  109. package/dist/mock_assistant/extensions/config.extension.js.map +1 -0
  110. package/dist/mock_assistant/extensions/device.extension.d.ts +8 -0
  111. package/dist/mock_assistant/extensions/device.extension.js +33 -0
  112. package/dist/mock_assistant/extensions/device.extension.js.map +1 -0
  113. package/dist/mock_assistant/extensions/entity-registry.extension.d.ts +13 -0
  114. package/dist/mock_assistant/extensions/entity-registry.extension.js +28 -0
  115. package/dist/mock_assistant/extensions/entity-registry.extension.js.map +1 -0
  116. package/dist/mock_assistant/extensions/entity.extension.d.ts +30 -0
  117. package/dist/mock_assistant/extensions/entity.extension.js +77 -0
  118. package/dist/mock_assistant/extensions/entity.extension.js.map +1 -0
  119. package/dist/mock_assistant/extensions/events.extension.d.ts +1 -1
  120. package/dist/mock_assistant/extensions/events.extension.js +3 -6
  121. package/dist/mock_assistant/extensions/events.extension.js.map +1 -1
  122. package/dist/mock_assistant/extensions/fetch.extension.d.ts +1 -0
  123. package/dist/mock_assistant/extensions/fetch.extension.js +4 -0
  124. package/dist/mock_assistant/extensions/fetch.extension.js.map +1 -0
  125. package/dist/mock_assistant/extensions/fixtures.extension.d.ts +1 -1
  126. package/dist/mock_assistant/extensions/fixtures.extension.js +29 -33
  127. package/dist/mock_assistant/extensions/fixtures.extension.js.map +1 -1
  128. package/dist/mock_assistant/extensions/floor.extension.d.ts +8 -0
  129. package/dist/mock_assistant/extensions/floor.extension.js +51 -0
  130. package/dist/mock_assistant/extensions/floor.extension.js.map +1 -0
  131. package/dist/mock_assistant/extensions/index.d.ts +10 -0
  132. package/dist/mock_assistant/extensions/index.js +12 -5
  133. package/dist/mock_assistant/extensions/index.js.map +1 -1
  134. package/dist/mock_assistant/extensions/label.extension.d.ts +8 -0
  135. package/dist/mock_assistant/extensions/label.extension.js +51 -0
  136. package/dist/mock_assistant/extensions/label.extension.js.map +1 -0
  137. package/dist/mock_assistant/extensions/services.extension.d.ts +12 -0
  138. package/dist/mock_assistant/extensions/services.extension.js +20 -0
  139. package/dist/mock_assistant/extensions/services.extension.js.map +1 -0
  140. package/dist/mock_assistant/extensions/websocket-api.extension.d.ts +15 -0
  141. package/dist/mock_assistant/extensions/websocket-api.extension.js +68 -0
  142. package/dist/mock_assistant/extensions/websocket-api.extension.js.map +1 -0
  143. package/dist/mock_assistant/extensions/zone.extension.d.ts +8 -0
  144. package/dist/mock_assistant/extensions/zone.extension.js +51 -0
  145. package/dist/mock_assistant/extensions/zone.extension.js.map +1 -0
  146. package/dist/mock_assistant/helpers/fixtures.js +1 -2
  147. package/dist/mock_assistant/helpers/index.d.ts +0 -1
  148. package/dist/mock_assistant/helpers/index.js +1 -5
  149. package/dist/mock_assistant/helpers/index.js.map +1 -1
  150. package/dist/mock_assistant/index.js +3 -6
  151. package/dist/mock_assistant/index.js.map +1 -1
  152. package/dist/mock_assistant/main.js +11 -15
  153. package/dist/mock_assistant/main.js.map +1 -1
  154. package/dist/mock_assistant/mock-assistant.module.d.ts +156 -3
  155. package/dist/mock_assistant/mock-assistant.module.js +56 -11
  156. package/dist/mock_assistant/mock-assistant.module.js.map +1 -1
  157. package/dist/quickboot.module.js +5 -8
  158. package/dist/quickboot.module.js.map +1 -1
  159. package/dist/testing/area.spec.js +106 -194
  160. package/dist/testing/area.spec.js.map +1 -1
  161. package/dist/testing/backup.spec.js +97 -139
  162. package/dist/testing/backup.spec.js.map +1 -1
  163. package/dist/testing/config.spec.js +79 -153
  164. package/dist/testing/config.spec.js.map +1 -1
  165. package/dist/testing/device.spec.js +35 -69
  166. package/dist/testing/device.spec.js.map +1 -1
  167. package/dist/testing/entity.spec.js +94 -149
  168. package/dist/testing/entity.spec.js.map +1 -1
  169. package/dist/testing/events.spec.js +33 -57
  170. package/dist/testing/events.spec.js.map +1 -1
  171. package/dist/testing/fetch-api.spec.js +242 -427
  172. package/dist/testing/fetch-api.spec.js.map +1 -1
  173. package/dist/testing/fixtures.spec.d.ts +1 -0
  174. package/dist/testing/fixtures.spec.js +150 -0
  175. package/dist/testing/fixtures.spec.js.map +1 -0
  176. package/dist/testing/floor.spec.js +106 -194
  177. package/dist/testing/floor.spec.js.map +1 -1
  178. package/dist/testing/id-by.spec.js +68 -107
  179. package/dist/testing/id-by.spec.js.map +1 -1
  180. package/dist/testing/label.spec.js +106 -194
  181. package/dist/testing/label.spec.js.map +1 -1
  182. package/dist/testing/ref-by.spec.js +155 -219
  183. package/dist/testing/ref-by.spec.js.map +1 -1
  184. package/dist/testing/websocket.spec.d.ts +1 -8
  185. package/dist/testing/websocket.spec.js +35 -50
  186. package/dist/testing/websocket.spec.js.map +1 -1
  187. package/dist/testing/workflow.spec.js +82 -81
  188. package/dist/testing/workflow.spec.js.map +1 -1
  189. package/dist/testing/zone.spec.js +61 -113
  190. package/dist/testing/zone.spec.js.map +1 -1
  191. package/package.json +56 -40
  192. package/dist/helpers/metrics.helper.d.ts +0 -29
  193. package/dist/helpers/metrics.helper.js +0 -62
  194. package/dist/helpers/metrics.helper.js.map +0 -1
  195. package/dist/mock_assistant/helpers/utils.d.ts +0 -4
  196. package/dist/mock_assistant/helpers/utils.js +0 -57
  197. package/dist/mock_assistant/helpers/utils.js.map +0 -1
@@ -1,16 +1,169 @@
1
- import { Events, Fixtures } from "./extensions";
1
+ import { MockAreaExtension, MockConfig, MockDeviceExtension, MockEntityExtension, MockEntityRegistryExtension, MockEvents, MockFixtures, MockFloorExtension, MockLabelExtension, MockServices, MockWebsocketAPI, MockZoneExtension } from "./extensions";
2
2
  export declare const LIB_MOCK_ASSISTANT: import("@digital-alchemy/core").LibraryDefinition<{
3
- events: typeof Events;
4
- fixtures: typeof Fixtures;
3
+ area: typeof MockAreaExtension;
4
+ config: typeof MockConfig;
5
+ device: typeof MockDeviceExtension;
6
+ entity: typeof MockEntityExtension;
7
+ entity_registry: typeof MockEntityRegistryExtension;
8
+ events: typeof MockEvents;
9
+ fixtures: typeof MockFixtures;
10
+ floor: typeof MockFloorExtension;
11
+ label: typeof MockLabelExtension;
12
+ services: typeof MockServices;
13
+ socket: typeof MockWebsocketAPI;
14
+ zone: typeof MockZoneExtension;
5
15
  }, {
16
+ EMIT_SLEEP: {
17
+ default: number;
18
+ description: string;
19
+ type: "number";
20
+ };
6
21
  FIXTURES_FILE: {
7
22
  default: string;
8
23
  description: any[];
9
24
  type: "string";
10
25
  };
26
+ PASS_AUTH: {
27
+ default: true;
28
+ description: string;
29
+ type: "boolean";
30
+ };
11
31
  }>;
12
32
  declare module "@digital-alchemy/core" {
13
33
  interface LoadedModules {
14
34
  mock_assistant: typeof LIB_MOCK_ASSISTANT;
15
35
  }
16
36
  }
37
+ /**
38
+ * @internal
39
+ *
40
+ * Make your own
41
+ */
42
+ export declare const createTestRunner: () => import("@digital-alchemy/core").iTestRunner<{
43
+ area: typeof import("..").Area;
44
+ backup: typeof import("..").Backup;
45
+ call: typeof import("..").CallProxy;
46
+ configure: typeof import("..").Configure;
47
+ device: typeof import("..").Device;
48
+ entity: typeof import("..").EntityManager;
49
+ events: typeof import("..").Events;
50
+ fetch: typeof import("..").FetchAPI;
51
+ floor: typeof import("..").Floor;
52
+ idBy: typeof import("..").IDByExtension;
53
+ internals: typeof import("..").FetchInternals;
54
+ label: typeof import("..").Label;
55
+ refBy: typeof import("..").ReferenceExtension;
56
+ registry: typeof import("..").Registry;
57
+ socket: typeof import("..").WebsocketAPI;
58
+ zone: typeof import("..").Zone;
59
+ }, {
60
+ BASE_URL: {
61
+ default: string;
62
+ description: string;
63
+ type: "string";
64
+ };
65
+ EVENT_DEBOUNCE_MS: {
66
+ default: number;
67
+ description: string;
68
+ type: "number";
69
+ };
70
+ EXPECT_RESPONSE_AFTER: {
71
+ default: number;
72
+ description: string;
73
+ type: "number";
74
+ };
75
+ RETRY_INTERVAL: {
76
+ default: number;
77
+ description: string;
78
+ type: "number";
79
+ };
80
+ SOCKET_AVG_DURATION: {
81
+ default: number;
82
+ description: string;
83
+ type: "number";
84
+ };
85
+ SOCKET_CRASH_REQUESTS_PER_SEC: {
86
+ default: number;
87
+ description: string;
88
+ type: "number";
89
+ };
90
+ SOCKET_WARN_REQUESTS_PER_SEC: {
91
+ default: number;
92
+ description: string;
93
+ type: "number";
94
+ };
95
+ TOKEN: {
96
+ description: string;
97
+ required: true;
98
+ type: "string";
99
+ };
100
+ VALIDATE_CONFIGURATION: {
101
+ default: false;
102
+ description: string;
103
+ type: "boolean";
104
+ };
105
+ }>;
106
+ export declare const hassTestRunner: import("@digital-alchemy/core").iTestRunner<{
107
+ area: typeof import("..").Area;
108
+ backup: typeof import("..").Backup;
109
+ call: typeof import("..").CallProxy;
110
+ configure: typeof import("..").Configure;
111
+ device: typeof import("..").Device;
112
+ entity: typeof import("..").EntityManager;
113
+ events: typeof import("..").Events;
114
+ fetch: typeof import("..").FetchAPI;
115
+ floor: typeof import("..").Floor;
116
+ idBy: typeof import("..").IDByExtension;
117
+ internals: typeof import("..").FetchInternals;
118
+ label: typeof import("..").Label;
119
+ refBy: typeof import("..").ReferenceExtension;
120
+ registry: typeof import("..").Registry;
121
+ socket: typeof import("..").WebsocketAPI;
122
+ zone: typeof import("..").Zone;
123
+ }, {
124
+ BASE_URL: {
125
+ default: string;
126
+ description: string;
127
+ type: "string";
128
+ };
129
+ EVENT_DEBOUNCE_MS: {
130
+ default: number;
131
+ description: string;
132
+ type: "number";
133
+ };
134
+ EXPECT_RESPONSE_AFTER: {
135
+ default: number;
136
+ description: string;
137
+ type: "number";
138
+ };
139
+ RETRY_INTERVAL: {
140
+ default: number;
141
+ description: string;
142
+ type: "number";
143
+ };
144
+ SOCKET_AVG_DURATION: {
145
+ default: number;
146
+ description: string;
147
+ type: "number";
148
+ };
149
+ SOCKET_CRASH_REQUESTS_PER_SEC: {
150
+ default: number;
151
+ description: string;
152
+ type: "number";
153
+ };
154
+ SOCKET_WARN_REQUESTS_PER_SEC: {
155
+ default: number;
156
+ description: string;
157
+ type: "number";
158
+ };
159
+ TOKEN: {
160
+ description: string;
161
+ required: true;
162
+ type: "string";
163
+ };
164
+ VALIDATE_CONFIGURATION: {
165
+ default: false;
166
+ description: string;
167
+ type: "boolean";
168
+ };
169
+ }>;
@@ -1,22 +1,67 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LIB_MOCK_ASSISTANT = void 0;
4
- const core_1 = require("@digital-alchemy/core");
5
- const path_1 = require("path");
6
- const process_1 = require("process");
7
- const extensions_1 = require("./extensions");
8
- exports.LIB_MOCK_ASSISTANT = (0, core_1.CreateLibrary)({
1
+ import { CreateLibrary, createModule, SINGLE } from "@digital-alchemy/core";
2
+ import { join } from "path";
3
+ import { cwd } from "process";
4
+ import { LIB_HASS } from "..";
5
+ import { MockAreaExtension, MockConfig, MockDeviceExtension, MockEntityExtension, MockEntityRegistryExtension, MockEvents, MockFixtures, MockFloorExtension, MockLabelExtension, MockServices, MockWebsocketAPI, MockZoneExtension, } from "./extensions";
6
+ export const LIB_MOCK_ASSISTANT = CreateLibrary({
9
7
  configuration: {
8
+ EMIT_SLEEP: {
9
+ default: SINGLE,
10
+ description: "Time in ms to wait after emitting entity update events",
11
+ type: "number",
12
+ },
10
13
  FIXTURES_FILE: {
11
- default: (0, path_1.join)((0, process_1.cwd)(), "fixtures.json"),
14
+ default: join(cwd(), "fixtures.json"),
12
15
  description: [],
13
16
  type: "string",
14
17
  },
18
+ PASS_AUTH: {
19
+ default: true,
20
+ description: "Auto pass for auth challenges",
21
+ type: "boolean",
22
+ },
15
23
  },
24
+ depends: [LIB_HASS],
16
25
  name: "mock_assistant",
26
+ priorityInit: [
27
+ "socket",
28
+ "floor",
29
+ "device",
30
+ "area",
31
+ "label",
32
+ "config",
33
+ "entity",
34
+ "entity_registry",
35
+ "services",
36
+ "fixtures",
37
+ ],
17
38
  services: {
18
- events: extensions_1.Events,
19
- fixtures: extensions_1.Fixtures,
39
+ area: MockAreaExtension,
40
+ config: MockConfig,
41
+ device: MockDeviceExtension,
42
+ entity: MockEntityExtension,
43
+ entity_registry: MockEntityRegistryExtension,
44
+ events: MockEvents,
45
+ fixtures: MockFixtures,
46
+ floor: MockFloorExtension,
47
+ label: MockLabelExtension,
48
+ services: MockServices,
49
+ socket: MockWebsocketAPI,
50
+ zone: MockZoneExtension,
20
51
  },
21
52
  });
53
+ /**
54
+ * @internal
55
+ *
56
+ * Make your own
57
+ */
58
+ export const createTestRunner = () => createModule
59
+ .fromLibrary(LIB_HASS)
60
+ .extend()
61
+ .toTest()
62
+ .configure({
63
+ boilerplate: { IS_TEST: true },
64
+ })
65
+ .appendLibrary(LIB_MOCK_ASSISTANT);
66
+ export const hassTestRunner = createTestRunner();
22
67
  //# sourceMappingURL=mock-assistant.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-assistant.module.js","sourceRoot":"","sources":["../../src/mock_assistant/mock-assistant.module.ts"],"names":[],"mappings":";;;AAAA,gDAAsD;AACtD,+BAA4B;AAC5B,qCAA8B;AAE9B,6CAAgD;AAEnC,QAAA,kBAAkB,GAAG,IAAA,oBAAa,EAAC;IAC9C,aAAa,EAAE;QACb,aAAa,EAAE;YACb,OAAO,EAAE,IAAA,WAAI,EAAC,IAAA,aAAG,GAAE,EAAE,eAAe,CAAC;YACrC,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,QAAQ;SACf;KACF;IACD,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE;QACR,MAAM,EAAE,mBAAM;QACd,QAAQ,EAAE,qBAAQ;KACnB;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-assistant.module.js","sourceRoot":"","sources":["../../src/mock_assistant/mock-assistant.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;IAC9C,aAAa,EAAE;QACb,UAAU,EAAE;YACV,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,wDAAwD;YACrE,IAAI,EAAE,QAAQ;SACf;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;YACrC,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,QAAQ;SACf;QACD,SAAS,EAAE;YACT,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,+BAA+B;YAC5C,IAAI,EAAE,SAAS;SAChB;KACF;IACD,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,IAAI,EAAE,gBAAgB;IACtB,YAAY,EAAE;QACZ,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,MAAM;QACN,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,iBAAiB;QACjB,UAAU;QACV,UAAU;KACX;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE,mBAAmB;QAC3B,eAAe,EAAE,2BAA2B;QAC5C,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,kBAAkB;QACzB,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,gBAAgB;QACxB,IAAI,EAAE,iBAAiB;KACxB;CACF,CAAC,CAAC;AAQH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACnC,YAAY;KACT,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,EAAE;KACR,MAAM,EAAE;KACR,SAAS,CAAC;IACT,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;CAC/B,CAAC;KACD,aAAa,CAAC,kBAAkB,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,EAAE,CAAC"}
@@ -1,16 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QuickBoot = QuickBoot;
4
- const core_1 = require("@digital-alchemy/core");
5
- const _1 = require(".");
1
+ import { CreateApplication } from "@digital-alchemy/core";
2
+ import { LIB_HASS } from ".";
6
3
  /**
7
4
  * Use from the node command line to probe apis
8
5
  * Not for normal application usage
9
6
  */
10
- async function QuickBoot(name) {
7
+ export async function QuickBoot(name) {
11
8
  let out;
12
- const app = (0, core_1.CreateApplication)({
13
- libraries: [_1.LIB_HASS],
9
+ const app = CreateApplication({
10
+ libraries: [LIB_HASS],
14
11
  // @ts-expect-error fake app, name used for loading credentials
15
12
  name,
16
13
  services: {
@@ -1 +1 @@
1
- {"version":3,"file":"quickboot.module.js","sourceRoot":"","sources":["../src/quickboot.module.ts"],"names":[],"mappings":";;AAQA,8BAcC;AAtBD,gDAA0E;AAE1E,wBAA6B;AAE7B;;;GAGG;AACI,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,GAAmB,CAAC;IACxB,MAAM,GAAG,GAAG,IAAA,wBAAiB,EAAC;QAC5B,SAAS,EAAE,CAAC,WAAQ,CAAC;QACrB,+DAA+D;QAC/D,IAAI;QACJ,QAAQ,EAAE;YACR,MAAM,CAAC,MAAsB;gBAC3B,GAAG,GAAG,MAAM,CAAC;YACf,CAAC;SACF;KACF,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC;IACtB,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"quickboot.module.js","sourceRoot":"","sources":["../src/quickboot.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAkB,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,GAAmB,CAAC;IACxB,MAAM,GAAG,GAAG,iBAAiB,CAAC;QAC5B,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,+DAA+D;QAC/D,IAAI;QACJ,QAAQ,EAAE;YACR,MAAM,CAAC,MAAsB;gBAC3B,GAAG,GAAG,MAAM,CAAC;YACf,CAAC;SACF;KACF,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC;IACtB,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,10 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@digital-alchemy/core");
4
- const helpers_1 = require("../helpers");
5
- const mock_assistant_1 = require("../mock_assistant");
1
+ import { sleep } from "@digital-alchemy/core";
2
+ import { AREA_REGISTRY_UPDATED } from "../helpers";
3
+ import { hassTestRunner, INTERNAL_MESSAGE } from "../mock_assistant";
6
4
  describe("Area", () => {
7
- let application;
8
5
  const EXAMPLE_AREA = {
9
6
  area_id: "empty_area",
10
7
  floor_id: null,
@@ -14,241 +11,156 @@ describe("Area", () => {
14
11
  picture: null,
15
12
  };
16
13
  afterEach(async () => {
17
- if (application) {
18
- await application.teardown();
19
- application = undefined;
20
- }
14
+ await hassTestRunner.teardown();
21
15
  jest.restoreAllMocks();
22
16
  });
23
17
  describe("Lifecycle", () => {
24
18
  it("should force values to be available before ready", async () => {
25
19
  expect.assertions(1);
26
- application = (0, mock_assistant_1.CreateTestingApplication)({
27
- Test({ lifecycle, hass }) {
28
- const spy = jest
29
- .spyOn(hass.socket, "sendMessage")
30
- .mockImplementation(async () => [EXAMPLE_AREA]);
31
- lifecycle.onReady(async () => {
32
- await hass.area.list();
33
- expect(spy).toHaveBeenCalledWith(expect.objectContaining({ type: "config/area_registry/list" }));
34
- });
35
- },
20
+ const app = await hassTestRunner.run(({ mock_assistant, lifecycle, hass }) => {
21
+ const spy = jest.fn();
22
+ mock_assistant.socket.connection.on(INTERNAL_MESSAGE, spy);
23
+ lifecycle.onReady(async () => {
24
+ await hass.area.list();
25
+ expect(spy).toHaveBeenCalledWith(expect.objectContaining({ type: "config/area_registry/list" }));
26
+ }, -1);
36
27
  });
37
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
38
- hass: {
39
- AUTO_CONNECT_SOCKET: false,
40
- AUTO_SCAN_CALL_PROXY: false,
41
- },
42
- }));
28
+ await app.teardown();
43
29
  });
44
30
  });
45
31
  describe("API", () => {
46
32
  describe("Formatting", () => {
47
33
  it("should call list properly", async () => {
48
34
  expect.assertions(1);
49
- application = (0, mock_assistant_1.CreateTestingApplication)({
50
- Test({ lifecycle, hass }) {
51
- const spy = jest
52
- .spyOn(hass.socket, "sendMessage")
53
- .mockImplementation(async () => []);
54
- lifecycle.onReady(async () => {
55
- await hass.area.list();
56
- expect(spy).toHaveBeenCalledWith(expect.objectContaining({ type: "config/area_registry/list" }));
57
- });
58
- },
35
+ await hassTestRunner.run(({ lifecycle, hass }) => {
36
+ const spy = jest.spyOn(hass.socket, "sendMessage").mockImplementation(async () => []);
37
+ lifecycle.onReady(async () => {
38
+ await hass.area.list();
39
+ expect(spy).toHaveBeenCalledWith(expect.objectContaining({ type: "config/area_registry/list" }));
40
+ });
59
41
  });
60
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
61
- hass: {
62
- AUTO_CONNECT_SOCKET: false,
63
- AUTO_SCAN_CALL_PROXY: false,
64
- },
65
- }));
66
42
  });
67
43
  it("should call update properly", async () => {
68
44
  expect.assertions(1);
69
- application = (0, mock_assistant_1.CreateTestingApplication)({
70
- Test({ lifecycle, hass, event }) {
71
- const spy = jest
72
- .spyOn(hass.socket, "sendMessage")
73
- .mockImplementation(async () => undefined);
74
- lifecycle.onReady(async () => {
75
- setImmediate(() => event.emit(helpers_1.AREA_REGISTRY_UPDATED));
76
- await hass.area.update(EXAMPLE_AREA);
77
- expect(spy).toHaveBeenCalledWith({
78
- type: "config/area_registry/update",
79
- ...EXAMPLE_AREA,
80
- });
45
+ await hassTestRunner.run(({ lifecycle, hass, event }) => {
46
+ const spy = jest
47
+ .spyOn(hass.socket, "sendMessage")
48
+ .mockImplementation(async () => undefined);
49
+ lifecycle.onReady(async () => {
50
+ setImmediate(() => event.emit(AREA_REGISTRY_UPDATED));
51
+ await hass.area.update(EXAMPLE_AREA);
52
+ expect(spy).toHaveBeenCalledWith({
53
+ type: "config/area_registry/update",
54
+ ...EXAMPLE_AREA,
81
55
  });
82
- },
56
+ });
83
57
  });
84
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
85
- hass: {
86
- AUTO_CONNECT_SOCKET: false,
87
- AUTO_SCAN_CALL_PROXY: false,
88
- },
89
- }));
90
58
  });
91
59
  it("should debounce updates properly", async () => {
92
60
  expect.assertions(1);
93
- application = (0, mock_assistant_1.CreateTestingApplication)({
94
- Test({ lifecycle, hass }) {
95
- jest
96
- .spyOn(hass.socket, "sendMessage")
97
- .mockImplementation(async () => undefined);
98
- let counter = 0;
99
- hass.events.onAreaRegistryUpdate(() => counter++);
100
- lifecycle.onReady(async () => {
101
- setImmediate(async () => {
102
- hass.socket.socketEvents.emit("area_registry_updated");
103
- await (0, core_1.sleep)(5);
104
- hass.socket.socketEvents.emit("area_registry_updated");
105
- await (0, core_1.sleep)(5);
106
- hass.socket.socketEvents.emit("area_registry_updated");
107
- await (0, core_1.sleep)(75);
108
- hass.socket.socketEvents.emit("area_registry_updated");
109
- });
110
- await (0, core_1.sleep)(200);
111
- expect(counter).toBe(2);
61
+ await hassTestRunner.run(({ lifecycle, hass }) => {
62
+ jest.spyOn(hass.socket, "sendMessage").mockImplementation(async () => undefined);
63
+ let counter = 0;
64
+ hass.events.onAreaRegistryUpdate(() => counter++);
65
+ lifecycle.onReady(async () => {
66
+ setImmediate(async () => {
67
+ hass.socket.socketEvents.emit("area_registry_updated");
68
+ await sleep(5);
69
+ hass.socket.socketEvents.emit("area_registry_updated");
70
+ await sleep(5);
71
+ hass.socket.socketEvents.emit("area_registry_updated");
72
+ await sleep(75);
73
+ hass.socket.socketEvents.emit("area_registry_updated");
112
74
  });
113
- },
75
+ await sleep(200);
76
+ expect(counter).toBe(2);
77
+ });
114
78
  });
115
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
116
- hass: {
117
- AUTO_CONNECT_SOCKET: false,
118
- AUTO_SCAN_CALL_PROXY: false,
119
- },
120
- }));
121
79
  });
122
80
  it("should call delete properly", async () => {
123
81
  expect.assertions(1);
124
- application = (0, mock_assistant_1.CreateTestingApplication)({
125
- Test({ lifecycle, hass, event }) {
126
- const spy = jest
127
- .spyOn(hass.socket, "sendMessage")
128
- .mockImplementation(async () => undefined);
129
- lifecycle.onReady(async () => {
130
- setImmediate(() => event.emit(helpers_1.AREA_REGISTRY_UPDATED));
131
- await hass.area.delete(EXAMPLE_AREA.area_id);
132
- expect(spy).toHaveBeenCalledWith({
133
- area_id: "empty_area",
134
- type: "config/area_registry/delete",
135
- });
82
+ await hassTestRunner.run(({ lifecycle, hass, event }) => {
83
+ const spy = jest
84
+ .spyOn(hass.socket, "sendMessage")
85
+ .mockImplementation(async () => undefined);
86
+ lifecycle.onReady(async () => {
87
+ setImmediate(() => event.emit(AREA_REGISTRY_UPDATED));
88
+ await hass.area.delete(EXAMPLE_AREA.area_id);
89
+ expect(spy).toHaveBeenCalledWith({
90
+ area_id: "empty_area",
91
+ type: "config/area_registry/delete",
136
92
  });
137
- },
93
+ });
138
94
  });
139
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
140
- hass: {
141
- AUTO_CONNECT_SOCKET: false,
142
- AUTO_SCAN_CALL_PROXY: false,
143
- },
144
- }));
145
95
  });
146
96
  it("should call create properly", async () => {
147
97
  expect.assertions(1);
148
- application = (0, mock_assistant_1.CreateTestingApplication)({
149
- Test({ lifecycle, hass, event }) {
150
- const spy = jest
151
- .spyOn(hass.socket, "sendMessage")
152
- .mockImplementation(async () => undefined);
153
- lifecycle.onReady(async () => {
154
- setImmediate(() => event.emit(helpers_1.AREA_REGISTRY_UPDATED));
155
- await hass.area.create(EXAMPLE_AREA);
156
- expect(spy).toHaveBeenCalledWith({
157
- type: "config/area_registry/create",
158
- ...EXAMPLE_AREA,
159
- });
98
+ await hassTestRunner.run(({ lifecycle, hass, event }) => {
99
+ const spy = jest
100
+ .spyOn(hass.socket, "sendMessage")
101
+ .mockImplementation(async () => undefined);
102
+ lifecycle.onReady(async () => {
103
+ setImmediate(() => event.emit(AREA_REGISTRY_UPDATED));
104
+ await hass.area.create(EXAMPLE_AREA);
105
+ expect(spy).toHaveBeenCalledWith({
106
+ type: "config/area_registry/create",
107
+ ...EXAMPLE_AREA,
160
108
  });
161
- },
109
+ });
162
110
  });
163
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
164
- hass: {
165
- AUTO_CONNECT_SOCKET: false,
166
- AUTO_SCAN_CALL_PROXY: false,
167
- },
168
- }));
169
111
  });
170
112
  });
171
113
  describe("Order of operations", () => {
172
114
  it("should wait for an update before returning when updating", async () => {
173
115
  expect.assertions(1);
174
- application = (0, mock_assistant_1.CreateTestingApplication)({
175
- Test({ lifecycle, hass, event }) {
176
- jest
177
- .spyOn(hass.socket, "sendMessage")
178
- .mockImplementation(async () => undefined);
179
- lifecycle.onReady(async () => {
180
- const response = hass.area.update(EXAMPLE_AREA);
181
- let order = "";
182
- setTimeout(() => {
183
- order += "a";
184
- event.emit(helpers_1.AREA_REGISTRY_UPDATED);
185
- }, 5);
186
- await response;
187
- order += "b";
188
- expect(order).toEqual("ab");
189
- });
190
- },
116
+ await hassTestRunner.run(({ lifecycle, hass, event }) => {
117
+ jest.spyOn(hass.socket, "sendMessage").mockImplementation(async () => undefined);
118
+ lifecycle.onReady(async () => {
119
+ const response = hass.area.update(EXAMPLE_AREA);
120
+ let order = "";
121
+ setTimeout(() => {
122
+ order += "a";
123
+ event.emit(AREA_REGISTRY_UPDATED);
124
+ }, 5);
125
+ await response;
126
+ order += "b";
127
+ expect(order).toEqual("ab");
128
+ });
191
129
  });
192
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
193
- hass: {
194
- AUTO_CONNECT_SOCKET: false,
195
- AUTO_SCAN_CALL_PROXY: false,
196
- },
197
- }));
198
130
  });
199
131
  it("should wait for an update before returning when deleting", async () => {
200
132
  expect.assertions(1);
201
- application = (0, mock_assistant_1.CreateTestingApplication)({
202
- Test({ lifecycle, hass, event }) {
203
- jest
204
- .spyOn(hass.socket, "sendMessage")
205
- .mockImplementation(async () => undefined);
206
- lifecycle.onReady(async () => {
207
- const response = hass.area.delete("example_area");
208
- let order = "";
209
- setTimeout(() => {
210
- order += "a";
211
- event.emit(helpers_1.AREA_REGISTRY_UPDATED);
212
- }, 5);
213
- await response;
214
- order += "b";
215
- expect(order).toEqual("ab");
216
- });
217
- },
133
+ await hassTestRunner.run(({ lifecycle, hass, event }) => {
134
+ jest.spyOn(hass.socket, "sendMessage").mockImplementation(async () => undefined);
135
+ lifecycle.onReady(async () => {
136
+ const response = hass.area.delete("example_area");
137
+ let order = "";
138
+ setTimeout(() => {
139
+ order += "a";
140
+ event.emit(AREA_REGISTRY_UPDATED);
141
+ }, 5);
142
+ await response;
143
+ order += "b";
144
+ expect(order).toEqual("ab");
145
+ });
218
146
  });
219
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
220
- hass: {
221
- AUTO_CONNECT_SOCKET: false,
222
- AUTO_SCAN_CALL_PROXY: false,
223
- },
224
- }));
225
147
  });
226
148
  it("should wait for an update before returning when creating", async () => {
227
149
  expect.assertions(1);
228
- application = (0, mock_assistant_1.CreateTestingApplication)({
229
- Test({ lifecycle, hass, event }) {
230
- jest
231
- .spyOn(hass.socket, "sendMessage")
232
- .mockImplementation(async () => undefined);
233
- lifecycle.onReady(async () => {
234
- const response = hass.area.create(EXAMPLE_AREA);
235
- let order = "";
236
- setTimeout(() => {
237
- order += "a";
238
- event.emit(helpers_1.AREA_REGISTRY_UPDATED);
239
- }, 5);
240
- await response;
241
- order += "b";
242
- expect(order).toEqual("ab");
243
- });
244
- },
150
+ await hassTestRunner.run(({ lifecycle, hass, event }) => {
151
+ jest.spyOn(hass.socket, "sendMessage").mockImplementation(async () => undefined);
152
+ lifecycle.onReady(async () => {
153
+ const response = hass.area.create(EXAMPLE_AREA);
154
+ let order = "";
155
+ setTimeout(() => {
156
+ order += "a";
157
+ event.emit(AREA_REGISTRY_UPDATED);
158
+ }, 5);
159
+ await response;
160
+ order += "b";
161
+ expect(order).toEqual("ab");
162
+ });
245
163
  });
246
- await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({
247
- hass: {
248
- AUTO_CONNECT_SOCKET: false,
249
- AUTO_SCAN_CALL_PROXY: false,
250
- },
251
- }));
252
164
  });
253
165
  });
254
166
  });