Add native local device integrations
This commit is contained in:
@@ -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();
|
||||
Reference in New Issue
Block a user