@switchbot/homebridge-switchbot 5.0.0-beta.63 → 5.0.0-beta.64

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.
@@ -1,366 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- // Mock the base accessory
3
- vi.mock('../../../devices-matter/BaseMatterAccessory.js', () => ({
4
- BaseMatterAccessory: class {
5
- api;
6
- log;
7
- config;
8
- context;
9
- constructor(api, log, config) {
10
- this.api = api;
11
- this.log = log;
12
- this.config = config;
13
- this.context = config.context;
14
- }
15
- logInfo = vi.fn();
16
- logWarn = vi.fn();
17
- logError = vi.fn();
18
- sendOpenAPICommand = vi.fn(async () => { });
19
- updateState = vi.fn();
20
- },
21
- }));
22
- describe('roboticVacuumAccessory', () => {
23
- let mockAPI;
24
- let mockLogger;
25
- let RoboticVacuumAccessory;
26
- beforeEach(async () => {
27
- // Clear all mocks
28
- vi.clearAllMocks();
29
- // Mock API
30
- mockAPI = {
31
- matter: {
32
- uuid: {
33
- generate: vi.fn((serial) => `uuid-${serial}`),
34
- },
35
- deviceTypes: {
36
- RoboticVacuumCleaner: 'RoboticVacuumCleaner',
37
- },
38
- },
39
- };
40
- // Mock Logger
41
- mockLogger = {
42
- info: vi.fn(),
43
- warn: vi.fn(),
44
- error: vi.fn(),
45
- debug: vi.fn(),
46
- };
47
- // Dynamically import the class after mocks are set up
48
- const module = await import('../../../devices-matter/RoboticVacuumAccessory.js');
49
- RoboticVacuumAccessory = module.RoboticVacuumAccessory;
50
- });
51
- describe('model detection', () => {
52
- it('should detect S1 model from Robot Vacuum Cleaner S1', () => {
53
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
54
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
55
- });
56
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
57
- expect(vacuum.capabilities.suctionKind).toBe('powLevel-0-3');
58
- expect(vacuum.capabilities.pause).toBe(false);
59
- });
60
- it('should detect S1 Plus model', () => {
61
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
62
- context: { deviceType: 'Robot Vacuum Cleaner S1 Plus' },
63
- });
64
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
65
- expect(vacuum.capabilities.pause).toBe(false);
66
- });
67
- it('should detect S1 Pro model', () => {
68
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
69
- context: { deviceType: 'Robot Vacuum Cleaner S1 Pro' },
70
- });
71
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
72
- });
73
- it('should detect S1 Mini model', () => {
74
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
75
- context: { deviceType: 'Robot Vacuum Cleaner S1 Mini' },
76
- });
77
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
78
- });
79
- it('should detect WoSweeper model', () => {
80
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
81
- context: { deviceType: 'WoSweeper' },
82
- });
83
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
84
- expect(vacuum.capabilities.suctionKind).toBe('powLevel-0-3');
85
- });
86
- it('should detect WoSweeperMini model', () => {
87
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
88
- context: { deviceType: 'WoSweeperMini' },
89
- });
90
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
91
- });
92
- it('should detect K10+ model', () => {
93
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
94
- context: { deviceType: 'K10+' },
95
- });
96
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
97
- expect(vacuum.capabilities.pause).toBe(false);
98
- });
99
- it('should detect K10+ Pro model', () => {
100
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
101
- context: { deviceType: 'K10+ Pro' },
102
- });
103
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
104
- expect(vacuum.capabilities.pause).toBe(false);
105
- });
106
- it('should detect K10+ Pro Combo model with mop capability', () => {
107
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
108
- context: { deviceType: 'Robot Vacuum Cleaner K10+ Pro Combo' },
109
- });
110
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-or-mop');
111
- expect(vacuum.capabilities.suctionKind).toBe('fanLevel-1-4');
112
- expect(vacuum.capabilities.pause).toBe(true);
113
- expect(vacuum.capabilities.waterLevel).toBe(false);
114
- });
115
- it('should detect S10 model with vacuum+mop and advanced commands', () => {
116
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
117
- context: { deviceType: 'Robot Vacuum Cleaner S10' },
118
- });
119
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-or-vacmop');
120
- expect(vacuum.capabilities.suctionKind).toBe('fanLevel-1-4');
121
- expect(vacuum.capabilities.pause).toBe(true);
122
- expect(vacuum.capabilities.waterLevel).toBe(true);
123
- expect(vacuum.capabilities.advancedCommands?.selfClean).toBe(true);
124
- expect(vacuum.capabilities.advancedCommands?.addWaterForHumi).toBe(true);
125
- });
126
- it('should detect S20 model with vacuum+mop and advanced commands', () => {
127
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
128
- context: { deviceType: 'Robot Vacuum Cleaner S20' },
129
- });
130
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-or-vacmop');
131
- expect(vacuum.capabilities.advancedCommands?.selfClean).toBe(true);
132
- });
133
- it('should detect K11+ model', () => {
134
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
135
- context: { deviceType: 'Robot Vacuum Cleaner K11+' },
136
- });
137
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-or-mop');
138
- expect(vacuum.capabilities.waterLevel).toBe(true);
139
- expect(vacuum.capabilities.advancedCommands?.setVolume).toBe(true);
140
- expect(vacuum.capabilities.advancedCommands?.selfClean).toBeUndefined();
141
- });
142
- it('should detect K20+ Pro model', () => {
143
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
144
- context: { deviceType: 'Robot Vacuum Cleaner K20 Plus Pro' },
145
- });
146
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-or-mop');
147
- expect(vacuum.capabilities.pause).toBe(true);
148
- });
149
- it('should default to basic vacuum for unknown models', () => {
150
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
151
- context: { deviceType: 'Unknown Model' },
152
- });
153
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
154
- expect(vacuum.capabilities.pause).toBe(false);
155
- expect(vacuum.capabilities.suctionKind).toBe('powLevel-0-3');
156
- });
157
- it('should handle missing context', () => {
158
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {});
159
- expect(vacuum.capabilities.cleanAction).toBe('vacuum-only');
160
- expect(vacuum.capabilities.pause).toBe(false);
161
- });
162
- });
163
- describe('capability matrix', () => {
164
- it('should configure correct clusters for basic vacuum (S1)', () => {
165
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
166
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
167
- });
168
- const clusters = vacuum.config.clusters;
169
- // Should have rvcRunMode with Idle and Cleaning only
170
- expect(clusters.rvcRunMode.supportedModes).toHaveLength(2);
171
- expect(clusters.rvcRunMode.supportedModes[0].label).toBe('Idle');
172
- expect(clusters.rvcRunMode.supportedModes[1].label).toBe('Cleaning');
173
- // Should have rvcCleanMode with suction levels
174
- expect(clusters.rvcCleanMode.supportedModes).toHaveLength(4);
175
- expect(clusters.rvcCleanMode.supportedModes.map((m) => m.label)).toEqual([
176
- 'Quiet',
177
- 'Standard',
178
- 'Strong',
179
- 'MAX',
180
- ]);
181
- // Should not have serviceArea cluster
182
- expect(clusters.serviceArea).toBeUndefined();
183
- });
184
- it('should configure correct clusters for K10+ Pro Combo', () => {
185
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
186
- context: { deviceType: 'K10+ Pro Combo' },
187
- });
188
- const clusters = vacuum.config.clusters;
189
- // Should have vacuum/mop action modes
190
- expect(clusters.rvcCleanMode.supportedModes).toHaveLength(2);
191
- expect(clusters.rvcCleanMode.supportedModes.map((m) => m.label)).toEqual(['Vacuum', 'Mop']);
192
- });
193
- it('should configure correct clusters for S10', () => {
194
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
195
- context: { deviceType: 'Robot Vacuum Cleaner S10' },
196
- });
197
- const clusters = vacuum.config.clusters;
198
- // Should have vacuum and vacuum+mop modes
199
- expect(clusters.rvcCleanMode.supportedModes).toHaveLength(2);
200
- expect(clusters.rvcCleanMode.supportedModes.map((m) => m.label)).toEqual(['Vacuum', 'Vacuum & Mop']);
201
- });
202
- it('should include pause handler for models that support it', () => {
203
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
204
- context: { deviceType: 'K10+ Pro Combo' },
205
- });
206
- const handlers = vacuum.config.handlers;
207
- expect(handlers.rvcOperationalState.pause).toBeDefined();
208
- expect(handlers.rvcOperationalState.start).toBeDefined();
209
- expect(handlers.rvcOperationalState.stop).toBeDefined();
210
- expect(handlers.rvcOperationalState.goHome).toBeDefined();
211
- });
212
- it('should not include pause handler for basic models', () => {
213
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
214
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
215
- });
216
- const handlers = vacuum.config.handlers;
217
- expect(handlers.rvcOperationalState.pause).toBeUndefined();
218
- expect(handlers.rvcOperationalState.start).toBeDefined();
219
- });
220
- });
221
- describe('openAPI command mapping', () => {
222
- it('should send start command for basic vacuum', async () => {
223
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
224
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
225
- });
226
- await vacuum.handleStart();
227
- expect(vacuum.sendOpenAPICommand).toHaveBeenCalledWith('start');
228
- });
229
- it('should send stop command for basic vacuum', async () => {
230
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
231
- context: { deviceType: 'K10+' },
232
- });
233
- await vacuum.handleStop();
234
- expect(vacuum.sendOpenAPICommand).toHaveBeenCalledWith('stop');
235
- });
236
- it('should send dock command on goHome', async () => {
237
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
238
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
239
- });
240
- await vacuum.handleGoHome();
241
- expect(vacuum.sendOpenAPICommand).toHaveBeenCalledWith('dock');
242
- });
243
- it('should send PowLevel command for basic vacuum suction change', async () => {
244
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
245
- context: { deviceType: 'WoSweeper' },
246
- });
247
- await vacuum.handleChangeCleanMode({ newMode: 2 }); // Strong
248
- expect(vacuum.sendOpenAPICommand).toHaveBeenCalledWith('PowLevel', '2');
249
- });
250
- it('should send startClean with action for K10+ Pro Combo', async () => {
251
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
252
- context: { deviceType: 'K10+ Pro Combo' },
253
- });
254
- // Set to vacuum mode first
255
- await vacuum.handleChangeCleanMode({ newMode: 0 });
256
- expect(vacuum.currentCleanAction).toBe('vacuum');
257
- await vacuum.handleStart();
258
- const expectedPayload = JSON.stringify({
259
- action: 'vacuum',
260
- param: { fanLevel: 2 },
261
- });
262
- expect(vacuum.sendOpenAPICommand).toHaveBeenCalledWith('startClean', expectedPayload);
263
- });
264
- it('should send startClean with sweep_mop action for S10 vacuum+mop mode', async () => {
265
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
266
- context: { deviceType: 'Robot Vacuum Cleaner S10' },
267
- });
268
- // Set to vacuum+mop mode
269
- await vacuum.handleChangeCleanMode({ newMode: 1 });
270
- expect(vacuum.currentCleanAction).toBe('vacuum_mop');
271
- await vacuum.handleStart();
272
- const calls = vacuum.sendOpenAPICommand.mock.calls;
273
- const startCleanCall = calls.find((call) => call[0] === 'startClean');
274
- expect(startCleanCall).toBeDefined();
275
- const payload = JSON.parse(startCleanCall[1]);
276
- expect(payload.action).toBe('sweep_mop');
277
- expect(payload.param.fanLevel).toBe(2);
278
- expect(payload.param.waterLevel).toBe(1);
279
- });
280
- it('should include waterLevel for S20 models', async () => {
281
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
282
- context: { deviceType: 'Robot Vacuum Cleaner S20' },
283
- });
284
- await vacuum.handleStart();
285
- const calls = vacuum.sendOpenAPICommand.mock.calls;
286
- const startCleanCall = calls.find((call) => call[0] === 'startClean');
287
- const payload = JSON.parse(startCleanCall[1]);
288
- expect(payload.param.waterLevel).toBe(1);
289
- });
290
- it('should not include waterLevel for K10+ Pro Combo', async () => {
291
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
292
- context: { deviceType: 'K10+ Pro Combo' },
293
- });
294
- await vacuum.handleStart();
295
- const calls = vacuum.sendOpenAPICommand.mock.calls;
296
- const startCleanCall = calls.find((call) => call[0] === 'startClean');
297
- const payload = JSON.parse(startCleanCall[1]);
298
- expect(payload.param.waterLevel).toBeUndefined();
299
- });
300
- it('should send pause command for models that support it', async () => {
301
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
302
- context: { deviceType: 'S10' },
303
- });
304
- await vacuum.handlePause();
305
- expect(vacuum.sendOpenAPICommand).toHaveBeenCalledWith('pause');
306
- });
307
- it('should update local action state for clean mode changes on K10+ Pro Combo', async () => {
308
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
309
- context: { deviceType: 'K10+ Pro Combo' },
310
- });
311
- // Change to mop mode
312
- await vacuum.handleChangeCleanMode({ newMode: 1 });
313
- expect(vacuum.currentCleanAction).toBe('mop');
314
- // Change back to vacuum mode
315
- await vacuum.handleChangeCleanMode({ newMode: 0 });
316
- expect(vacuum.currentCleanAction).toBe('vacuum');
317
- // Clean mode changes should just update state, not call OpenAPI
318
- expect(vacuum.sendOpenAPICommand).not.toHaveBeenCalled();
319
- });
320
- });
321
- describe('state updates', () => {
322
- it('should update run mode correctly', () => {
323
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
324
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
325
- });
326
- vacuum.updateRunMode(1); // Cleaning
327
- expect(vacuum.updateState).toHaveBeenCalledWith('rvcRunMode', { currentMode: 1 });
328
- });
329
- it('should update clean mode correctly', () => {
330
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
331
- context: { deviceType: 'K10+' },
332
- });
333
- vacuum.updateCleanMode(2); // Strong
334
- expect(vacuum.updateState).toHaveBeenCalledWith('rvcCleanMode', { currentMode: 2 });
335
- });
336
- it('should update operational state correctly', () => {
337
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
338
- context: { deviceType: 'S10' },
339
- });
340
- vacuum.updateOperationalState(64); // Seeking Charger
341
- expect(vacuum.updateState).toHaveBeenCalledWith('rvcOperationalState', { operationalState: 64 });
342
- });
343
- it('should update battery percentage without PowerSource cluster', async () => {
344
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
345
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
346
- });
347
- await vacuum.updateBatteryPercentage(75);
348
- // Should log but not update any cluster
349
- expect(vacuum.logInfo).toHaveBeenCalledWith(expect.stringContaining('75%'));
350
- expect(vacuum.context.batteryPercentage).toBe(75);
351
- });
352
- });
353
- describe('error handling', () => {
354
- it('should handle OpenAPI command failures gracefully', async () => {
355
- const vacuum = new RoboticVacuumAccessory(mockAPI, mockLogger, {
356
- context: { deviceType: 'Robot Vacuum Cleaner S1' },
357
- });
358
- vacuum.sendOpenAPICommand = vi.fn(async () => {
359
- throw new Error('API Error');
360
- });
361
- await vacuum.handleStart();
362
- expect(vacuum.logWarn).toHaveBeenCalledWith(expect.stringContaining('failed'));
363
- });
364
- });
365
- });
366
- //# sourceMappingURL=roboticVacuumAccessory.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roboticVacuumAccessory.test.js","sourceRoot":"","sources":["../../../../src/test/matter/devices-matter/roboticVacuumAccessory.test.ts"],"names":[],"mappings":"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"}