@homebridge-plugins/homebridge-resideo 3.2.0 → 3.2.1-beta.0
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/CHANGELOG.md +23 -0
- package/README.md +1 -2
- package/config.schema.json +43 -0
- package/dist/Platform.HAP.d.ts +0 -1
- package/dist/Platform.HAP.d.ts.map +1 -1
- package/dist/Platform.HAP.js +13 -7
- package/dist/Platform.HAP.js.map +1 -1
- package/dist/devices/device.d.ts.map +1 -1
- package/dist/devices/device.js +14 -6
- package/dist/devices/device.js.map +1 -1
- package/dist/devices/leaksensors.d.ts.map +1 -1
- package/dist/devices/leaksensors.js +23 -11
- package/dist/devices/leaksensors.js.map +1 -1
- package/dist/devices/roomsensors.d.ts.map +1 -1
- package/dist/devices/roomsensors.js +29 -13
- package/dist/devices/roomsensors.js.map +1 -1
- package/dist/devices/roomsensorthermostats.d.ts.map +1 -1
- package/dist/devices/roomsensorthermostats.js +37 -24
- package/dist/devices/roomsensorthermostats.js.map +1 -1
- package/dist/devices/thermostats.d.ts.map +1 -1
- package/dist/devices/thermostats.js +64 -45
- package/dist/devices/thermostats.js.map +1 -1
- package/dist/devices/valve.js +1 -1
- package/dist/devices/valve.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +2 -3
- package/package.json +10 -23
- package/dist/Platform.HAP.test.d.ts +0 -2
- package/dist/Platform.HAP.test.d.ts.map +0 -1
- package/dist/Platform.HAP.test.js +0 -86
- package/dist/Platform.HAP.test.js.map +0 -1
- package/dist/homebridge-ui/server.test.d.ts +0 -2
- package/dist/homebridge-ui/server.test.d.ts.map +0 -1
- package/dist/homebridge-ui/server.test.js +0 -37
- package/dist/homebridge-ui/server.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -13
- package/dist/index.test.js.map +0 -1
- package/dist/settings.test.d.ts +0 -2
- package/dist/settings.test.d.ts.map +0 -1
- package/dist/settings.test.js +0 -48
- package/dist/settings.test.js.map +0 -1
- package/dist/utils.test.d.ts +0 -2
- package/dist/utils.test.d.ts.map +0 -1
- package/dist/utils.test.js +0 -88
- package/dist/utils.test.js.map +0 -1
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { ResideoPlatform } from './Platform.HAP.js';
|
|
3
|
-
describe('resideoPlatform', () => {
|
|
4
|
-
let platform;
|
|
5
|
-
let log;
|
|
6
|
-
let config;
|
|
7
|
-
let api;
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
log = {
|
|
10
|
-
info: vi.fn(),
|
|
11
|
-
warn: vi.fn(),
|
|
12
|
-
error: vi.fn(),
|
|
13
|
-
debug: vi.fn(),
|
|
14
|
-
};
|
|
15
|
-
config = {
|
|
16
|
-
platform: 'Resideo',
|
|
17
|
-
name: 'Test Platform',
|
|
18
|
-
credentials: {
|
|
19
|
-
accessToken: 'testAccessToken',
|
|
20
|
-
consumerKey: 'testConsumerKey',
|
|
21
|
-
consumerSecret: 'testConsumerSecret',
|
|
22
|
-
refreshToken: 'testRefreshToken',
|
|
23
|
-
},
|
|
24
|
-
options: {
|
|
25
|
-
refreshRate: 120,
|
|
26
|
-
pushRate: 0.1,
|
|
27
|
-
devices: [],
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
api = {
|
|
31
|
-
hap: {
|
|
32
|
-
uuid: {
|
|
33
|
-
generate: vi.fn().mockReturnValue('test-uuid'),
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
platformAccessory: vi.fn().mockImplementation((name, uuid) => ({
|
|
37
|
-
displayName: name,
|
|
38
|
-
UUID: uuid,
|
|
39
|
-
context: {},
|
|
40
|
-
})),
|
|
41
|
-
user: {
|
|
42
|
-
configPath: vi.fn().mockReturnValue('/path/to/config.json'),
|
|
43
|
-
},
|
|
44
|
-
on: vi.fn(),
|
|
45
|
-
updatePlatformAccessories: vi.fn(),
|
|
46
|
-
};
|
|
47
|
-
platform = new ResideoPlatform(log, config, api);
|
|
48
|
-
});
|
|
49
|
-
it('should initialize platform with given config', () => {
|
|
50
|
-
expect(platform.config.name).toBe('Test Platform');
|
|
51
|
-
expect(platform.config.credentials?.accessToken).toBe('testAccessToken');
|
|
52
|
-
});
|
|
53
|
-
it('should verify config correctly', () => {
|
|
54
|
-
expect(() => platform.verifyConfig()).not.toThrow();
|
|
55
|
-
});
|
|
56
|
-
it('should throw error if refresh rate is less than 30', () => {
|
|
57
|
-
if (platform.config.options) {
|
|
58
|
-
platform.config.options.refreshRate = 20;
|
|
59
|
-
}
|
|
60
|
-
expect(() => platform.verifyConfig()).toThrow('Refresh Rate must be above 30 seconds.');
|
|
61
|
-
});
|
|
62
|
-
it('should refresh access token', async () => {
|
|
63
|
-
vi.spyOn(platform.httpClient, 'post').mockResolvedValue({
|
|
64
|
-
data: {
|
|
65
|
-
access_token: 'newAccessToken',
|
|
66
|
-
refresh_token: 'newRefreshToken',
|
|
67
|
-
},
|
|
68
|
-
status: 200,
|
|
69
|
-
headers: {},
|
|
70
|
-
});
|
|
71
|
-
await platform.refreshAccessToken();
|
|
72
|
-
expect(platform.config.credentials?.accessToken).toBe('newAccessToken');
|
|
73
|
-
expect(platform.config.credentials?.refreshToken).toBe('newRefreshToken');
|
|
74
|
-
});
|
|
75
|
-
it('should discover locations', async () => {
|
|
76
|
-
const mockLocations = [{ locationID: '1', name: 'Location 1', devices: [] }];
|
|
77
|
-
vi.spyOn(platform.httpClient, 'get').mockResolvedValue({ data: mockLocations, status: 200, headers: {} });
|
|
78
|
-
const locations = await platform.discoverlocations();
|
|
79
|
-
expect(locations).toEqual(mockLocations);
|
|
80
|
-
});
|
|
81
|
-
it('should handle error during location discovery', async () => {
|
|
82
|
-
vi.spyOn(platform.httpClient, 'get').mockRejectedValue(new Error('Network Error'));
|
|
83
|
-
await expect(platform.discoverlocations()).rejects.toThrow('Network Error');
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=Platform.HAP.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Platform.HAP.test.js","sourceRoot":"","sources":["../src/Platform.HAP.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../../src/homebridge-ui/server.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { describe, expect, it } from 'vitest';
|
|
4
|
-
import { AuthorizeURL, TokenURL } from '../settings.js';
|
|
5
|
-
const source = readFileSync(join(import.meta.dirname, 'server.ts'), 'utf8');
|
|
6
|
-
describe('setup server', () => {
|
|
7
|
-
it('uses the same host as the rest of the plugin', () => {
|
|
8
|
-
// api.honeywell.com served an expired certificate from 18 May 2026, which
|
|
9
|
-
// broke the login flow for everyone while the plugin itself kept working
|
|
10
|
-
// on api.honeywellhome.com (#927).
|
|
11
|
-
expect(AuthorizeURL).toContain('api.honeywellhome.com');
|
|
12
|
-
expect(TokenURL).toContain('api.honeywellhome.com');
|
|
13
|
-
});
|
|
14
|
-
it('does not hardcode an api host of its own', () => {
|
|
15
|
-
expect(source).not.toContain('api.honeywell.com/');
|
|
16
|
-
expect(source).not.toContain('https://api.honeywellhome.com');
|
|
17
|
-
});
|
|
18
|
-
it('exchanges the code without shelling out', () => {
|
|
19
|
-
// curl is not installed everywhere, it trusts the system CA store rather
|
|
20
|
-
// than the one Node ships, and a hand-built command line means query
|
|
21
|
-
// string values end up inside it.
|
|
22
|
-
expect(source).not.toContain('child_process');
|
|
23
|
-
expect(source).not.toMatch(/\bexec\(/);
|
|
24
|
-
expect(source).not.toContain('curlString');
|
|
25
|
-
expect(source).toContain('await fetch(TokenURL');
|
|
26
|
-
});
|
|
27
|
-
it('never echoes the request back to the page', () => {
|
|
28
|
-
// The token request carries the consumer secret in a Basic auth header, so
|
|
29
|
-
// dumping the error object (which used to include the whole command) put
|
|
30
|
-
// the user's own secret on screen.
|
|
31
|
-
expect(source).not.toContain('JSON.stringify(err)');
|
|
32
|
-
});
|
|
33
|
-
it('escapes anything it writes into the page', () => {
|
|
34
|
-
expect(source).toContain('escapeHtml');
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
//# sourceMappingURL=server.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.test.js","sourceRoot":"","sources":["../../src/homebridge-ui/server.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAA;AAE3E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,0EAA0E;QAC1E,yEAAyE;QACzE,mCAAmC;QACnC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QACvD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,yEAAyE;QACzE,qEAAqE;QACrE,kCAAkC;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,2EAA2E;QAC3E,yEAAyE;QACzE,mCAAmC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/index.test.d.ts
DELETED
package/dist/index.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
package/dist/index.test.js
DELETED
|
@@ -1,13 +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('index.ts', () => {
|
|
5
|
-
it('should register the platform with homebridge using a proxy constructor', () => {
|
|
6
|
-
const apiMock = {
|
|
7
|
-
registerPlatform: vi.fn(),
|
|
8
|
-
};
|
|
9
|
-
registerPlatform(apiMock);
|
|
10
|
-
expect(apiMock.registerPlatform).toHaveBeenCalledWith(PLUGIN_NAME, PLATFORM_NAME, expect.any(Function));
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,gBAAgB,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,OAAO,GAAQ;YACnB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;SACR,CAAA;QAEnB,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAEzB,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/settings.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.test.d.ts","sourceRoot":"","sources":["../src/settings.test.ts"],"names":[],"mappings":""}
|
package/dist/settings.test.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import * as settings from './settings.js';
|
|
3
|
-
describe('settings', () => {
|
|
4
|
-
it('should have correct PLATFORM_NAME', () => {
|
|
5
|
-
expect(settings.PLATFORM_NAME).toBe('Resideo');
|
|
6
|
-
});
|
|
7
|
-
it('should have correct PLUGIN_NAME', () => {
|
|
8
|
-
expect(settings.PLUGIN_NAME).toBe('@homebridge-plugins/homebridge-resideo');
|
|
9
|
-
});
|
|
10
|
-
it('should have correct AuthorizeURL', () => {
|
|
11
|
-
expect(settings.AuthorizeURL).toBe('https://api.honeywellhome.com/oauth2/authorize?');
|
|
12
|
-
});
|
|
13
|
-
it('should have correct TokenURL', () => {
|
|
14
|
-
expect(settings.TokenURL).toBe('https://api.honeywellhome.com/oauth2/token');
|
|
15
|
-
});
|
|
16
|
-
it('should have correct LocationURL', () => {
|
|
17
|
-
expect(settings.LocationURL).toBe('https://api.honeywellhome.com/v2/locations');
|
|
18
|
-
});
|
|
19
|
-
it('should have correct DeviceURL', () => {
|
|
20
|
-
expect(settings.DeviceURL).toBe('https://api.honeywellhome.com/v2/devices');
|
|
21
|
-
});
|
|
22
|
-
it('should have correct HttpMethod types', () => {
|
|
23
|
-
const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];
|
|
24
|
-
expect(methods).toEqual(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD']);
|
|
25
|
-
});
|
|
26
|
-
it('should have correct default ResideoPlatformConfig', () => {
|
|
27
|
-
const config = {
|
|
28
|
-
platform: 'Resideo',
|
|
29
|
-
credentials: {
|
|
30
|
-
accessToken: '',
|
|
31
|
-
refreshToken: '',
|
|
32
|
-
consumerKey: '',
|
|
33
|
-
consumerSecret: '',
|
|
34
|
-
},
|
|
35
|
-
options: {},
|
|
36
|
-
callbackUrl: '',
|
|
37
|
-
port: '',
|
|
38
|
-
};
|
|
39
|
-
expect(config.credentials?.accessToken).toBe('');
|
|
40
|
-
expect(config.credentials?.refreshToken).toBe('');
|
|
41
|
-
expect(config.credentials?.consumerKey).toBe('');
|
|
42
|
-
expect(config.credentials?.consumerSecret).toBe('');
|
|
43
|
-
expect(config.options).toEqual({});
|
|
44
|
-
expect(config.callbackUrl).toBe('');
|
|
45
|
-
expect(config.port).toBe('');
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=settings.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"settings.test.js","sourceRoot":"","sources":["../src/settings.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IAC7E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACvF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IAC7E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,OAAO,GAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QACnG,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACvF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAmC;YAC7C,QAAQ,EAAE,SAAS;YACnB,WAAW,EAAE;gBACX,WAAW,EAAE,EAAE;gBACf,YAAY,EAAE,EAAE;gBAChB,WAAW,EAAE,EAAE;gBACf,cAAc,EAAE,EAAE;aACnB;YACD,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;SACT,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/utils.test.d.ts
DELETED
package/dist/utils.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":""}
|
package/dist/utils.test.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { createPlatformProxy, toCelsius, toCelsiusWithOverride } from './utils.js';
|
|
3
|
-
describe('toCelsius', () => {
|
|
4
|
-
it('should return the same value if the unit is 0 (Celsius)', () => {
|
|
5
|
-
expect(toCelsius(25, 0)).toBe(25);
|
|
6
|
-
});
|
|
7
|
-
it('should convert Fahrenheit to Celsius correctly', () => {
|
|
8
|
-
expect(toCelsius(32, 1)).toBe(0); // 32°F is 0°C
|
|
9
|
-
expect(toCelsius(68, 1)).toBe(20); // 68°F is 20°C
|
|
10
|
-
expect(toCelsius(100, 1)).toBe(38); // 100°F rounds to 38°C
|
|
11
|
-
});
|
|
12
|
-
it('should round to the nearest 0.5 degree', () => {
|
|
13
|
-
expect(toCelsius(33, 1)).toBe(0.5); // 33°F is 0.5°C
|
|
14
|
-
expect(toCelsius(34, 1)).toBe(1); // 34°F is 1°C
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
describe('toCelsiusWithOverride', () => {
|
|
18
|
-
it('should keep default conversion when no override is set', () => {
|
|
19
|
-
expect(toCelsiusWithOverride(25, 0)).toBe(25);
|
|
20
|
-
expect(toCelsiusWithOverride(68, 1)).toBe(20);
|
|
21
|
-
});
|
|
22
|
-
it('should force Fahrenheit conversion when configured', () => {
|
|
23
|
-
expect(toCelsiusWithOverride(68, 0, 'fahrenheit')).toBe(20);
|
|
24
|
-
expect(toCelsiusWithOverride(75, 0, 'fahrenheit')).toBe(24);
|
|
25
|
-
});
|
|
26
|
-
it('should force Celsius passthrough when configured', () => {
|
|
27
|
-
expect(toCelsiusWithOverride(20, 1, 'celsius')).toBe(20);
|
|
28
|
-
expect(toCelsiusWithOverride(25, 0, 'celsius')).toBe(25);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
describe('createPlatformProxy', () => {
|
|
32
|
-
it('should instantiate HAPPlatform when Matter is not available', () => {
|
|
33
|
-
const HAPPlatform = vi.fn();
|
|
34
|
-
const MatterPlatform = vi.fn();
|
|
35
|
-
const api = {
|
|
36
|
-
isMatterAvailable: vi.fn().mockReturnValue(false),
|
|
37
|
-
isMatterEnabled: vi.fn().mockReturnValue(false),
|
|
38
|
-
};
|
|
39
|
-
const Proxy = createPlatformProxy(HAPPlatform, MatterPlatform);
|
|
40
|
-
// eslint-disable-next-line no-new
|
|
41
|
-
new Proxy({}, {}, api);
|
|
42
|
-
expect(HAPPlatform).toHaveBeenCalledTimes(1);
|
|
43
|
-
expect(MatterPlatform).not.toHaveBeenCalled();
|
|
44
|
-
});
|
|
45
|
-
it('should instantiate MatterPlatform when Matter is available and enabled', () => {
|
|
46
|
-
const HAPPlatform = vi.fn();
|
|
47
|
-
const MatterPlatform = vi.fn();
|
|
48
|
-
const api = {
|
|
49
|
-
isMatterAvailable: vi.fn().mockReturnValue(true),
|
|
50
|
-
isMatterEnabled: vi.fn().mockReturnValue(true),
|
|
51
|
-
};
|
|
52
|
-
const config = { options: { preferMatter: true, enableMatter: true } };
|
|
53
|
-
const Proxy = createPlatformProxy(HAPPlatform, MatterPlatform);
|
|
54
|
-
// eslint-disable-next-line no-new
|
|
55
|
-
new Proxy({}, config, api);
|
|
56
|
-
expect(MatterPlatform).toHaveBeenCalledTimes(1);
|
|
57
|
-
expect(HAPPlatform).not.toHaveBeenCalled();
|
|
58
|
-
});
|
|
59
|
-
it('should fall back to HAPPlatform when enableMatter is false', () => {
|
|
60
|
-
const HAPPlatform = vi.fn();
|
|
61
|
-
const MatterPlatform = vi.fn();
|
|
62
|
-
const api = {
|
|
63
|
-
isMatterAvailable: vi.fn().mockReturnValue(true),
|
|
64
|
-
isMatterEnabled: vi.fn().mockReturnValue(true),
|
|
65
|
-
};
|
|
66
|
-
const config = { options: { preferMatter: true, enableMatter: false } };
|
|
67
|
-
const Proxy = createPlatformProxy(HAPPlatform, MatterPlatform);
|
|
68
|
-
// eslint-disable-next-line no-new
|
|
69
|
-
new Proxy({}, config, api);
|
|
70
|
-
expect(HAPPlatform).toHaveBeenCalledTimes(1);
|
|
71
|
-
expect(MatterPlatform).not.toHaveBeenCalled();
|
|
72
|
-
});
|
|
73
|
-
it('should fall back to HAPPlatform when preferMatter is false', () => {
|
|
74
|
-
const HAPPlatform = vi.fn();
|
|
75
|
-
const MatterPlatform = vi.fn();
|
|
76
|
-
const api = {
|
|
77
|
-
isMatterAvailable: vi.fn().mockReturnValue(true),
|
|
78
|
-
isMatterEnabled: vi.fn().mockReturnValue(true),
|
|
79
|
-
};
|
|
80
|
-
const config = { options: { preferMatter: false, enableMatter: true } };
|
|
81
|
-
const Proxy = createPlatformProxy(HAPPlatform, MatterPlatform);
|
|
82
|
-
// eslint-disable-next-line no-new
|
|
83
|
-
new Proxy({}, config, api);
|
|
84
|
-
expect(HAPPlatform).toHaveBeenCalledTimes(1);
|
|
85
|
-
expect(MatterPlatform).not.toHaveBeenCalled();
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
//# sourceMappingURL=utils.test.js.map
|
package/dist/utils.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"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"}
|