Add native local device integrations

This commit is contained in:
2026-05-05 18:26:11 +00:00
parent accfa82f36
commit 282283d344
69 changed files with 9713 additions and 182 deletions
@@ -0,0 +1,56 @@
import { expect, tap } from '@git.zone/tstest/tapbundle';
import { BroadlinkConfigFlow, createBroadlinkDiscoveryDescriptor } from '../../ts/integrations/broadlink/index.js';
tap.test('matches Broadlink DHCP candidates by Home Assistant MAC prefix', async () => {
const descriptor = createBroadlinkDiscoveryDescriptor();
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'broadlink-dhcp-match');
const result = await matcher?.matches({
ipAddress: '192.168.1.50',
macAddress: '34:EA:34:B4:5D:2C',
hostname: 'rm4-bedroom',
}, {});
expect(result?.matched).toBeTrue();
expect(result?.candidate?.integrationDomain).toEqual('broadlink');
expect(result?.candidate?.host).toEqual('192.168.1.50');
expect(result?.candidate?.metadata?.discoveryProtocol).toEqual('dhcp');
});
tap.test('matches manual Broadlink snapshot and learned-code entries', async () => {
const descriptor = createBroadlinkDiscoveryDescriptor();
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'broadlink-manual-match');
const result = await matcher?.matches({
host: '192.168.1.51',
type: 'RM4PRO',
macAddress: '34ea34b45d2d',
codes: { television: { power: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' } },
switches: [{ name: 'Television', commandOn: 'JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=' }],
}, {});
expect(result?.matched).toBeTrue();
expect(result?.candidate?.metadata?.deviceType).toEqual('RM4PRO');
expect(result?.candidate?.metadata?.codesConfigured).toBeTrue();
expect(result?.candidate?.metadata?.customSwitchesConfigured).toBeTrue();
});
tap.test('builds Broadlink config from candidate and rejects invalid snapshots', async () => {
const flow = new BroadlinkConfigFlow();
const step = await flow.start({
source: 'manual',
integrationDomain: 'broadlink',
id: '34:ea:34:b4:5d:2c',
host: '192.168.1.52',
macAddress: '34:ea:34:b4:5d:2c',
model: 'RM4PRO',
metadata: { deviceType: 'RM4PRO', devtype: 0x520b },
}, {});
const done = await step.submit?.({ host: '192.168.1.52', timeout: 7, name: 'Bedroom RM4', type: 'RM4PRO' });
expect(done?.kind).toEqual('done');
expect(done?.config?.host).toEqual('192.168.1.52');
expect(done?.config?.timeout).toEqual(7);
expect(done?.config?.type).toEqual('RM4PRO');
const invalid = await step.submit?.({ host: '192.168.1.52', snapshotJson: '{"connected":true}' });
expect(invalid?.kind).toEqual('error');
});
export default tap.start();