57 lines
2.5 KiB
TypeScript
57 lines
2.5 KiB
TypeScript
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();
|