Files
integrations/test/matter/test.matter.discovery.node.ts
T

49 lines
1.7 KiB
TypeScript

import { expect, tap } from '@git.zone/tstest/tapbundle';
import { MatterConfigFlow, createMatterDiscoveryDescriptor } from '../../ts/integrations/matter/index.js';
tap.test('matches Matter zeroconf records', async () => {
const descriptor = createMatterDiscoveryDescriptor();
const matcher = descriptor.getMatchers()[0];
const operational = await matcher.matches({
type: '_matter._tcp.local.',
name: 'Kitchen Bulb._matter._tcp.local.',
host: 'kitchen-bulb.local',
port: 5540,
txt: { dn: 'Kitchen Bulb' },
}, {});
const commissionable = await matcher.matches({
type: '_matterc._udp.local.',
name: 'Commissionable._matterc._udp.local.',
host: 'commissionable.local',
port: 5540,
}, {});
expect(operational.matched).toBeTrue();
expect(operational.candidate?.name).toEqual('Kitchen Bulb');
expect(commissionable.matched).toBeTrue();
expect(commissionable.candidate?.model).toEqual('Commissionable Matter device');
});
tap.test('manual Matter setup defaults to local server URL', async () => {
const descriptor = createMatterDiscoveryDescriptor();
const matcher = descriptor.getMatchers()[1];
const result = await matcher.matches({}, {});
expect(result.matched).toBeTrue();
expect(result.candidate?.metadata?.url).toEqual('ws://localhost:5580/ws');
});
tap.test('Matter config flow uses candidate URL default', async () => {
const flow = new MatterConfigFlow();
const step = await flow.start({
source: 'manual',
metadata: { url: 'ws://matter.local:5580/ws' },
}, {});
const done = await step.submit?.({});
expect(done?.config?.url).toEqual('ws://matter.local:5580/ws');
});
export default tap.start();