@homebridge-plugins/homebridge-august 3.1.0 → 3.1.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.
Files changed (52) hide show
  1. package/.github/scripts/npm-version-script-esm-auto.js +201 -0
  2. package/.github/scripts/resolve-version-bump-esm.js +118 -0
  3. package/.github/workflows/release.yml +62 -13
  4. package/CHANGELOG.md +9 -2
  5. package/dist/devices/device.d.ts +1 -0
  6. package/dist/devices/device.d.ts.map +1 -1
  7. package/dist/devices/device.js +6 -4
  8. package/dist/devices/device.js.map +1 -1
  9. package/dist/devices/lock.js +2 -2
  10. package/dist/devices/lock.js.map +1 -1
  11. package/dist/homebridge-ui/server.js.map +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/package.json +6 -7
  16. package/dist/platform.d.ts +1 -1
  17. package/dist/platform.d.ts.map +1 -1
  18. package/dist/platform.js +2 -9
  19. package/dist/platform.js.map +1 -1
  20. package/dist/platform.matter.d.ts +45 -0
  21. package/dist/platform.matter.d.ts.map +1 -1
  22. package/dist/platform.matter.js +120 -65
  23. package/dist/platform.matter.js.map +1 -1
  24. package/dist/settings.d.ts +4 -4
  25. package/dist/settings.d.ts.map +1 -1
  26. package/docs/variables/default.html +1 -1
  27. package/package.json +6 -7
  28. package/typedoc.json +1 -1
  29. package/dist/devices/device.test.d.ts +0 -2
  30. package/dist/devices/device.test.d.ts.map +0 -1
  31. package/dist/devices/device.test.js +0 -281
  32. package/dist/devices/device.test.js.map +0 -1
  33. package/dist/devices/lock.test.d.ts +0 -2
  34. package/dist/devices/lock.test.d.ts.map +0 -1
  35. package/dist/devices/lock.test.js +0 -265
  36. package/dist/devices/lock.test.js.map +0 -1
  37. package/dist/index.test.d.ts +0 -2
  38. package/dist/index.test.d.ts.map +0 -1
  39. package/dist/index.test.js +0 -97
  40. package/dist/index.test.js.map +0 -1
  41. package/dist/platform.matter.test.d.ts +0 -2
  42. package/dist/platform.matter.test.d.ts.map +0 -1
  43. package/dist/platform.matter.test.js +0 -385
  44. package/dist/platform.matter.test.js.map +0 -1
  45. package/dist/platform.test.d.ts +0 -2
  46. package/dist/platform.test.d.ts.map +0 -1
  47. package/dist/platform.test.js +0 -514
  48. package/dist/platform.test.js.map +0 -1
  49. package/dist/settings.test.d.ts +0 -2
  50. package/dist/settings.test.d.ts.map +0 -1
  51. package/dist/settings.test.js +0 -138
  52. package/dist/settings.test.js.map +0 -1
@@ -1,97 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import registerPlatform from './index.js';
3
- import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
4
- describe('registerPlatform', () => {
5
- it('should register a platform proxy with homebridge', () => {
6
- const api = {
7
- registerPlatform: vi.fn(),
8
- isMatterAvailable: vi.fn(() => false),
9
- isMatterEnabled: vi.fn(() => false),
10
- };
11
- registerPlatform(api);
12
- expect(api.registerPlatform).toHaveBeenCalledWith(PLUGIN_NAME, PLATFORM_NAME, expect.any(Function));
13
- });
14
- it('should instantiate AugustPlatform (HAP) when Matter is not available', () => {
15
- const log = { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn(), success: vi.fn() };
16
- const config = { platform: 'August', name: 'Test', credentials: { augustId: 'a', password: 'b', countryCode: 'US', isValidated: false } };
17
- const api = {
18
- registerPlatform: vi.fn(),
19
- isMatterAvailable: vi.fn(() => false),
20
- isMatterEnabled: vi.fn(() => false),
21
- hap: { uuid: { generate: vi.fn(() => 'mock-uuid') } },
22
- on: vi.fn(),
23
- user: { configPath: vi.fn(() => '/mock/config.json') },
24
- };
25
- let registeredCtor;
26
- vi.mocked(api.registerPlatform).mockImplementation((_plugin, _platform, ctor) => {
27
- registeredCtor = ctor;
28
- });
29
- registerPlatform(api);
30
- const instance = new registeredCtor(log, config, api);
31
- // Should be an AugustPlatform instance (HAP) when Matter is unavailable
32
- expect(instance).toBeDefined();
33
- expect(instance.constructor.name).toBe('AugustPlatform');
34
- });
35
- it('should instantiate AugustMatterPlatform when Matter is available and enabled', () => {
36
- const log = { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn(), success: vi.fn() };
37
- const config = { platform: 'August', name: 'Test', credentials: { augustId: 'a', password: 'b', countryCode: 'US', isValidated: false } };
38
- const api = {
39
- registerPlatform: vi.fn(),
40
- isMatterAvailable: vi.fn(() => true),
41
- isMatterEnabled: vi.fn(() => true),
42
- hap: { uuid: { generate: vi.fn(() => 'mock-uuid') } },
43
- matter: {
44
- uuid: { generate: vi.fn(() => 'mock-matter-uuid') },
45
- deviceTypes: { DoorLock: {} },
46
- updateAccessoryState: vi.fn(),
47
- registerPlatformAccessories: vi.fn(),
48
- unregisterPlatformAccessories: vi.fn(),
49
- },
50
- on: vi.fn(),
51
- user: { configPath: vi.fn(() => '/mock/config.json') },
52
- };
53
- let registeredCtor;
54
- vi.mocked(api.registerPlatform).mockImplementation((_plugin, _platform, ctor) => {
55
- registeredCtor = ctor;
56
- });
57
- registerPlatform(api);
58
- const instance = new registeredCtor(log, config, api);
59
- // Should be an AugustMatterPlatform instance when Matter is available
60
- expect(instance).toBeDefined();
61
- expect(instance.constructor.name).toBe('AugustMatterPlatform');
62
- });
63
- it('should fall back to AugustPlatform (HAP) when disableMatter is true', () => {
64
- const log = { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn(), success: vi.fn() };
65
- const config = {
66
- platform: 'August',
67
- name: 'Test',
68
- credentials: { augustId: 'a', password: 'b', countryCode: 'US', isValidated: false },
69
- options: { disableMatter: true },
70
- };
71
- const api = {
72
- registerPlatform: vi.fn(),
73
- isMatterAvailable: vi.fn(() => true),
74
- isMatterEnabled: vi.fn(() => true),
75
- hap: { uuid: { generate: vi.fn(() => 'mock-uuid') } },
76
- matter: {
77
- uuid: { generate: vi.fn(() => 'mock-matter-uuid') },
78
- deviceTypes: { DoorLock: {} },
79
- updateAccessoryState: vi.fn(),
80
- registerPlatformAccessories: vi.fn(),
81
- unregisterPlatformAccessories: vi.fn(),
82
- },
83
- on: vi.fn(),
84
- user: { configPath: vi.fn(() => '/mock/config.json') },
85
- };
86
- let registeredCtor;
87
- vi.mocked(api.registerPlatform).mockImplementation((_plugin, _platform, ctor) => {
88
- registeredCtor = ctor;
89
- });
90
- registerPlatform(api);
91
- const instance = new registeredCtor(log, config, api);
92
- // Should be AugustPlatform (HAP) when disableMatter is true
93
- expect(instance).toBeDefined();
94
- expect(instance.constructor.name).toBe('AugustPlatform');
95
- });
96
- });
97
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=platform.matter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.matter.test.d.ts","sourceRoot":"","sources":["../src/platform.matter.test.ts"],"names":[],"mappings":""}
@@ -1,385 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
- import August from 'august-yale';
4
- import { AugustMatterPlatform } from './platform.matter.js';
5
- // Mock the august-yale module
6
- vi.mock('august-yale', () => {
7
- const MockAugust = vi.fn().mockImplementation(function () {
8
- return {
9
- end: vi.fn(),
10
- lock: vi.fn().mockResolvedValue(undefined),
11
- unlock: vi.fn().mockResolvedValue(undefined),
12
- details: vi.fn(),
13
- };
14
- });
15
- const MockConstructor = MockAugust;
16
- MockConstructor.details = vi.fn();
17
- MockConstructor.authorize = vi.fn();
18
- MockConstructor.validate = vi.fn();
19
- MockConstructor.subscribe = vi.fn().mockResolvedValue(() => { }); // returns unsubscribe fn by default
20
- return {
21
- default: MockConstructor,
22
- };
23
- });
24
- // Mock file system
25
- vi.mock('node:fs', () => ({
26
- readFileSync: vi.fn(),
27
- writeFileSync: vi.fn(),
28
- }));
29
- describe('augustMatterPlatform', () => {
30
- let platform;
31
- let mockApi;
32
- let mockLog;
33
- let mockConfig;
34
- let mockMatterApi;
35
- beforeEach(() => {
36
- vi.clearAllMocks();
37
- mockMatterApi = {
38
- uuid: { generate: vi.fn((id) => `matter-uuid-${id}`) },
39
- deviceTypes: { DoorLock: { deviceType: 11 } },
40
- types: {
41
- DoorLock: {
42
- LockState: {
43
- NotFullyLocked: 0,
44
- Locked: 1,
45
- Unlocked: 2,
46
- },
47
- },
48
- },
49
- registerPlatformAccessories: vi.fn().mockResolvedValue(undefined),
50
- updatePlatformAccessories: vi.fn().mockResolvedValue(undefined),
51
- unregisterPlatformAccessories: vi.fn().mockResolvedValue(undefined),
52
- updateAccessoryState: vi.fn().mockResolvedValue(undefined),
53
- getAccessoryState: vi.fn().mockResolvedValue(undefined),
54
- };
55
- mockApi = {
56
- hap: {
57
- uuid: { generate: vi.fn(() => 'hap-uuid') },
58
- },
59
- user: {
60
- configPath: vi.fn(() => '/mock/config.json'),
61
- },
62
- on: vi.fn(),
63
- registerPlatformAccessories: vi.fn(),
64
- updatePlatformAccessories: vi.fn(),
65
- unregisterPlatformAccessories: vi.fn(),
66
- publishExternalAccessories: vi.fn(),
67
- isMatterAvailable: vi.fn(() => true),
68
- isMatterEnabled: vi.fn(() => true),
69
- matter: mockMatterApi,
70
- };
71
- mockLog = {
72
- info: vi.fn(),
73
- warn: vi.fn(),
74
- error: vi.fn(),
75
- debug: vi.fn(),
76
- success: vi.fn(),
77
- };
78
- mockConfig = {
79
- platform: 'August',
80
- name: 'Test August',
81
- credentials: {
82
- augustId: 'test@example.com',
83
- password: 'testpassword',
84
- countryCode: 'US',
85
- installId: 'test-install-id',
86
- isValidated: true,
87
- },
88
- options: {
89
- logging: 'debug',
90
- },
91
- };
92
- vi.mocked(readFileSync).mockReturnValue(JSON.stringify({
93
- platforms: [mockConfig],
94
- }));
95
- });
96
- afterEach(() => {
97
- vi.restoreAllMocks();
98
- });
99
- describe('configureAccessory', () => {
100
- it('should stage (not immediately unregister) cached HAP accessories for deferred cleanup', async () => {
101
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
102
- const hapAccessory = {
103
- UUID: 'hap-uuid-1',
104
- displayName: 'Front Door',
105
- };
106
- await platform.configureAccessory(hapAccessory);
107
- // HAP accessory should NOT be unregistered immediately; deferred until Matter registration succeeds
108
- expect(mockApi.unregisterPlatformAccessories).not.toHaveBeenCalled();
109
- });
110
- it('should unregister staged HAP accessory after successful Matter registration', async () => {
111
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
112
- const device = {
113
- lockId: 'lock-abc',
114
- LockName: 'Front Door',
115
- SerialNumber: 'SN123',
116
- skuNumber: 'AUG-SL05',
117
- currentFirmwareVersion: '1.2.3',
118
- hide_device: false,
119
- homeKitEnabled: false,
120
- };
121
- // Stage a HAP accessory with UUID matching what matterApi.uuid.generate will return for this lockId
122
- const hapAccessory = {
123
- UUID: 'matter-uuid-lock-abc',
124
- displayName: 'Front Door',
125
- };
126
- await platform.configureAccessory(hapAccessory);
127
- await platform.Lock(device);
128
- // After Matter registration succeeds, the staged HAP accessory should be unregistered
129
- expect(mockApi.unregisterPlatformAccessories).toHaveBeenCalledWith('homebridge-august', 'August', [hapAccessory]);
130
- });
131
- it('should not add HAP accessories to the accessories cache', async () => {
132
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
133
- const hapAccessory = {
134
- UUID: 'hap-uuid-2',
135
- displayName: 'Back Door',
136
- };
137
- await platform.configureAccessory(hapAccessory);
138
- // accessories array from the HAP base class should remain empty
139
- expect(platform.accessories).toHaveLength(0);
140
- });
141
- });
142
- describe('configureMatterAccessory', () => {
143
- it('should store Matter accessories in the matterAccessories map', () => {
144
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
145
- const matterAccessory = {
146
- UUID: 'matter-uuid-lock1',
147
- displayName: 'Front Door',
148
- deviceType: { deviceType: 11 },
149
- serialNumber: 'ABC123',
150
- manufacturer: 'August Home Inc.',
151
- model: 'AUG-SL05',
152
- context: { lockId: 'lock1' },
153
- };
154
- platform.configureMatterAccessory(matterAccessory);
155
- expect(platform.matterAccessories.has('matter-uuid-lock1')).toBe(true);
156
- expect(platform.matterAccessories.get('matter-uuid-lock1')).toBe(matterAccessory);
157
- });
158
- });
159
- describe('lock (Matter accessory registration)', () => {
160
- it('should register a new Matter DoorLock accessory when Matter API is available', async () => {
161
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
162
- const device = {
163
- lockId: 'lock-abc',
164
- LockName: 'Front Door',
165
- SerialNumber: 'SN123',
166
- skuNumber: 'AUG-SL05',
167
- currentFirmwareVersion: '1.2.3',
168
- hide_device: false,
169
- homeKitEnabled: false,
170
- };
171
- // Expose the protected Lock method for testing
172
- await platform.Lock(device);
173
- expect(mockMatterApi.registerPlatformAccessories).toHaveBeenCalledOnce();
174
- const [pluginName, platformName, accessories] = mockMatterApi.registerPlatformAccessories.mock.calls[0];
175
- expect(pluginName).toBe('homebridge-august');
176
- expect(platformName).toBe('August');
177
- expect(accessories).toHaveLength(1);
178
- expect(accessories[0].deviceType).toBe(mockMatterApi.deviceTypes.DoorLock);
179
- expect(accessories[0].manufacturer).toBe('August Home Inc.');
180
- expect(accessories[0].serialNumber).toBe('SN123');
181
- });
182
- it('should restore an existing cached Matter accessory', async () => {
183
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
184
- const uuid = 'matter-uuid-lock-abc';
185
- const cachedAccessory = {
186
- UUID: uuid,
187
- displayName: 'Front Door',
188
- deviceType: { deviceType: 11 },
189
- serialNumber: 'SN123',
190
- manufacturer: 'August Home Inc.',
191
- model: 'AUG-SL05',
192
- context: { lockId: 'lock-abc' },
193
- };
194
- platform.configureMatterAccessory(cachedAccessory);
195
- const device = {
196
- lockId: 'lock-abc',
197
- LockName: 'Front Door',
198
- SerialNumber: 'SN123',
199
- skuNumber: 'AUG-SL05',
200
- currentFirmwareVersion: '1.2.3',
201
- hide_device: false,
202
- homeKitEnabled: false,
203
- };
204
- await platform.Lock(device);
205
- // re-registers to update handlers
206
- expect(mockMatterApi.registerPlatformAccessories).toHaveBeenCalledOnce();
207
- // Should have logged the "Restoring" message
208
- expect(mockLog.info).toHaveBeenCalledWith(expect.stringContaining('Restoring existing Matter accessory'));
209
- });
210
- it('should unregister stale Matter accessory when device is hidden', async () => {
211
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
212
- const uuid = 'matter-uuid-hidden-lock';
213
- mockMatterApi.uuid.generate.mockReturnValueOnce(uuid);
214
- const cachedAccessory = {
215
- UUID: uuid,
216
- displayName: 'Hidden Lock',
217
- deviceType: { deviceType: 11 },
218
- serialNumber: 'SN456',
219
- manufacturer: 'August Home Inc.',
220
- model: 'AUG-SL05',
221
- context: { lockId: 'hidden-lock' },
222
- };
223
- platform.configureMatterAccessory(cachedAccessory);
224
- const device = {
225
- lockId: 'hidden-lock',
226
- LockName: 'Hidden Lock',
227
- SerialNumber: 'SN456',
228
- hide_device: true, // hidden device
229
- homeKitEnabled: false,
230
- };
231
- await platform.Lock(device);
232
- // Should unregister the stale accessory
233
- expect(mockMatterApi.unregisterPlatformAccessories).toHaveBeenCalledWith('homebridge-august', 'August', [cachedAccessory]);
234
- expect(platform.matterAccessories.has(uuid)).toBe(false);
235
- expect(mockMatterApi.registerPlatformAccessories).not.toHaveBeenCalled();
236
- });
237
- it('should not register when Matter API is unavailable', async () => {
238
- const apiWithoutMatter = {
239
- ...mockApi,
240
- matter: null,
241
- };
242
- platform = new AugustMatterPlatform(mockLog, mockConfig, apiWithoutMatter);
243
- const device = {
244
- lockId: 'lock-xyz',
245
- LockName: 'Some Lock',
246
- hide_device: false,
247
- homeKitEnabled: false,
248
- };
249
- await platform.Lock(device);
250
- expect(mockMatterApi.registerPlatformAccessories).not.toHaveBeenCalled();
251
- });
252
- it('should set initial lockState to 0 (NotFullyLocked) until first poll resolves', async () => {
253
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
254
- const device = {
255
- lockId: 'lock-nullstate',
256
- LockName: 'Null State Lock',
257
- SerialNumber: 'SN789',
258
- hide_device: false,
259
- homeKitEnabled: false,
260
- };
261
- await platform.Lock(device);
262
- const registeredAccessory = mockMatterApi.registerPlatformAccessories.mock.calls[0][2][0];
263
- expect(registeredAccessory.clusters?.doorLock?.lockState).toBe(0);
264
- });
265
- });
266
- describe('fetchAndUpdateMatterLockState', () => {
267
- it('should update lockState to 1 (Locked) when lock is locked', async () => {
268
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
269
- const mockDetailsResult = { LockStatus: { state: { locked: true, unlocked: false } } };
270
- platform.augustConfig = {
271
- details: vi.fn().mockResolvedValue(mockDetailsResult),
272
- };
273
- const device = { lockId: 'lock-test', LockName: 'Test Lock' };
274
- await platform.fetchAndUpdateMatterLockState(device, 'test-uuid', mockMatterApi);
275
- expect(mockMatterApi.updateAccessoryState).toHaveBeenCalledWith('test-uuid', 'doorLock', { lockState: 1 });
276
- });
277
- it('should update lockState to 2 (Unlocked) when lock is unlocked', async () => {
278
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
279
- const mockDetailsResult = { LockStatus: { state: { locked: false, unlocked: true } } };
280
- platform.augustConfig = {
281
- details: vi.fn().mockResolvedValue(mockDetailsResult),
282
- };
283
- const device = { lockId: 'lock-test', LockName: 'Test Lock' };
284
- await platform.fetchAndUpdateMatterLockState(device, 'test-uuid', mockMatterApi);
285
- expect(mockMatterApi.updateAccessoryState).toHaveBeenCalledWith('test-uuid', 'doorLock', { lockState: 2 });
286
- });
287
- it('should update lockState to 0 (NotFullyLocked) for ambiguous state', async () => {
288
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
289
- const mockDetailsResult = { LockStatus: { state: { locked: false, unlocked: false } } };
290
- platform.augustConfig = {
291
- details: vi.fn().mockResolvedValue(mockDetailsResult),
292
- };
293
- const device = { lockId: 'lock-test', LockName: 'Test Lock' };
294
- await platform.fetchAndUpdateMatterLockState(device, 'test-uuid', mockMatterApi);
295
- expect(mockMatterApi.updateAccessoryState).toHaveBeenCalledWith('test-uuid', 'doorLock', { lockState: 0 });
296
- });
297
- it('should not throw when August API details call fails', async () => {
298
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
299
- platform.augustConfig = {
300
- details: vi.fn().mockRejectedValue(new Error('API error')),
301
- };
302
- // Mock refreshAugustSession to do nothing so retry also fails gracefully
303
- vi.spyOn(platform, 'refreshAugustSession').mockResolvedValue(undefined);
304
- const device = { lockId: 'lock-test', LockName: 'Test Lock' };
305
- await expect(platform.fetchAndUpdateMatterLockState(device, 'test-uuid', mockMatterApi)).resolves.toBeUndefined();
306
- expect(mockMatterApi.updateAccessoryState).not.toHaveBeenCalled();
307
- });
308
- it('should not call updateAccessoryState when augustConfig is not initialized', async () => {
309
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
310
- // augustConfig is not set (undefined / no details method)
311
- const device = { lockId: 'lock-test', LockName: 'Test Lock' };
312
- await expect(platform.fetchAndUpdateMatterLockState(device, 'test-uuid', mockMatterApi)).resolves.toBeUndefined();
313
- expect(mockMatterApi.updateAccessoryState).not.toHaveBeenCalled();
314
- });
315
- it('should retry with session refresh when details call fails', async () => {
316
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
317
- const mockDetailsResult = { LockStatus: { state: { locked: true, unlocked: false } } };
318
- const mockDetails = vi.fn()
319
- .mockRejectedValueOnce(new Error('502 Bad Gateway'))
320
- .mockResolvedValueOnce(mockDetailsResult);
321
- platform.augustConfig = { details: mockDetails };
322
- const refreshSpy = vi.spyOn(platform, 'refreshAugustSession').mockResolvedValue(undefined);
323
- const device = { lockId: 'lock-test', LockName: 'Test Lock' };
324
- await platform.fetchAndUpdateMatterLockState(device, 'test-uuid', mockMatterApi);
325
- expect(refreshSpy).toHaveBeenCalledOnce();
326
- expect(mockMatterApi.updateAccessoryState).toHaveBeenCalledWith('test-uuid', 'doorLock', { lockState: 1 });
327
- });
328
- it('should not throw when both initial call and retry fail', async () => {
329
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
330
- platform.augustConfig = {
331
- details: vi.fn().mockRejectedValue(new Error('ETIMEDOUT')),
332
- };
333
- vi.spyOn(platform, 'refreshAugustSession').mockResolvedValue(undefined);
334
- const device = { lockId: 'lock-test', LockName: 'Test Lock' };
335
- await expect(platform.fetchAndUpdateMatterLockState(device, 'test-uuid', mockMatterApi)).resolves.toBeUndefined();
336
- expect(mockMatterApi.updateAccessoryState).not.toHaveBeenCalled();
337
- });
338
- });
339
- describe('PubNub subscription lifecycle (Matter path equivalent of PR #206)', () => {
340
- it('should capture unsubscribe function from August.subscribe()', async () => {
341
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
342
- const mockUnsubscribe = vi.fn();
343
- vi.mocked(August.subscribe).mockResolvedValueOnce(mockUnsubscribe);
344
- const device = {
345
- lockId: 'lock-sub',
346
- LockName: 'Sub Lock',
347
- SerialNumber: 'SN001',
348
- hide_device: false,
349
- homeKitEnabled: false,
350
- };
351
- await platform.Lock(device);
352
- // The unsubscribe should be stored in the internal map
353
- const uuid = mockMatterApi.uuid.generate('lock-sub');
354
- const stored = platform.matterPubNubUnsubscribes.get(uuid);
355
- expect(stored).toBe(mockUnsubscribe);
356
- });
357
- it('should tear down PubNub subscription when device is hidden (stale accessory removal)', async () => {
358
- platform = new AugustMatterPlatform(mockLog, mockConfig, mockApi);
359
- const uuid = 'matter-uuid-hidden-sub';
360
- mockMatterApi.uuid.generate.mockReturnValueOnce(uuid);
361
- const mockUnsubscribe = vi.fn();
362
- platform.matterPubNubUnsubscribes.set(uuid, mockUnsubscribe);
363
- const cachedAccessory = {
364
- UUID: uuid,
365
- displayName: 'Hidden Lock',
366
- deviceType: { deviceType: 11 },
367
- serialNumber: 'SN002',
368
- manufacturer: 'August Home Inc.',
369
- model: 'AUG-SL05',
370
- context: { lockId: 'hidden-sub' },
371
- };
372
- platform.configureMatterAccessory(cachedAccessory);
373
- const device = {
374
- lockId: 'hidden-sub',
375
- LockName: 'Hidden Lock',
376
- hide_device: true,
377
- homeKitEnabled: false,
378
- };
379
- await platform.Lock(device);
380
- expect(mockUnsubscribe).toHaveBeenCalledOnce();
381
- expect(platform.matterPubNubUnsubscribes.has(uuid)).toBe(false);
382
- });
383
- });
384
- });
385
- //# sourceMappingURL=platform.matter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.matter.test.js","sourceRoot":"","sources":["../src/platform.matter.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=platform.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.test.d.ts","sourceRoot":"","sources":["../src/platform.test.ts"],"names":[],"mappings":""}