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

55 lines
1.9 KiB
TypeScript
Raw Normal View History

2026-05-05 14:57:06 +00:00
import { expect, tap } from '@git.zone/tstest/tapbundle';
import { createNanoleafDiscoveryDescriptor } from '../../ts/integrations/nanoleaf/index.js';
tap.test('matches Nanoleaf mDNS zeroconf records', async () => {
const descriptor = createNanoleafDiscoveryDescriptor();
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'nanoleaf-mdns-match');
const result = await matcher!.matches({
name: 'Nanoleaf Shapes ABCD',
type: '_nanoleafapi._tcp.local.',
host: 'nanoleaf-shapes.local',
port: 16021,
txt: {
id: 'NL123ABC',
md: 'NL42',
},
}, {});
expect(result.matched).toBeTrue();
expect(result.normalizedDeviceId).toEqual('NL123ABC');
expect(result.candidate?.port).toEqual(16021);
});
tap.test('matches Nanoleaf SSDP records', async () => {
const descriptor = createNanoleafDiscoveryDescriptor();
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'nanoleaf-ssdp-match');
const result = await matcher!.matches({
st: 'nanoleaf:nl42',
usn: 'uuid:nanoleaf-nl42',
headers: {
'_host': '192.168.1.55:16021',
'nl-devicename': 'Nanoleaf Shapes ABCD',
'nl-deviceid': 'NL123ABC',
},
}, {});
expect(result.matched).toBeTrue();
expect(result.candidate?.host).toEqual('192.168.1.55');
expect(result.candidate?.model).toEqual('NL42');
});
tap.test('validates manual Nanoleaf candidates', async () => {
const descriptor = createNanoleafDiscoveryDescriptor();
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'nanoleaf-manual-match');
const manualResult = await matcher!.matches({
host: '192.168.1.56',
port: 16021,
metadata: { nanoleaf: true },
}, {});
expect(manualResult.matched).toBeTrue();
const validator = descriptor.getValidators()[0];
const validation = await validator.validate(manualResult.candidate!, {});
expect(validation.matched).toBeTrue();
});
export default tap.start();