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

55 lines
2.5 KiB
TypeScript

import { expect, tap } from '@git.zone/tstest/tapbundle';
import { BoschShcConfigFlow, createBoschShcDiscoveryDescriptor } from '../../ts/integrations/bosch_shc/index.js';
import type { IBoschShcSnapshot } from '../../ts/integrations/bosch_shc/index.js';
tap.test('matches Bosch SHC zeroconf records and validates manual candidates', async () => {
const descriptor = createBoschShcDiscoveryDescriptor();
const mdnsMatcher = descriptor.getMatchers()[0];
const mdnsResult = await mdnsMatcher.matches({
name: 'Bosch SHC [AA:BB:CC:DD:EE:FF]._http._tcp.local.',
type: '_http._tcp.local.',
host: 'bosch-shc.local',
port: 80,
}, {});
expect(mdnsResult.matched).toBeTrue();
expect(mdnsResult.normalizedDeviceId).toEqual('aa-bb-cc-dd-ee-ff');
expect(mdnsResult.candidate?.integrationDomain).toEqual('bosch_shc');
expect(mdnsResult.candidate?.manufacturer).toEqual('Bosch');
const manualMatcher = descriptor.getMatchers()[1];
const manualResult = await manualMatcher.matches({ host: '192.168.1.10' }, {});
expect(manualResult.matched).toBeTrue();
expect(manualResult.candidate?.host).toEqual('192.168.1.10');
const validator = descriptor.getValidators()[0];
const validResult = await validator.validate({
source: 'manual',
integrationDomain: 'bosch_shc',
host: '192.168.1.10',
id: 'AA:BB:CC:DD:EE:FF',
}, {});
expect(validResult.matched).toBeTrue();
});
tap.test('config flow preserves credentials and refuses native pairing without executor', async () => {
const flow = new BoschShcConfigFlow();
const step = await flow.start({ source: 'manual', integrationDomain: 'bosch_shc', host: '192.168.1.10' }, {});
const pairing = await step.submit?.({ host: '192.168.1.10', password: 'secret' });
expect(pairing?.kind).toEqual('error');
expect(pairing?.error).toContain('executor');
const done = await step.submit?.({ host: '192.168.1.10', sslCertificate: '/config/bosch/cert.pem', sslKey: '/config/bosch/key.pem', token: 'token:bosch-shc' });
expect(done?.kind).toEqual('done');
expect(done?.config?.host).toEqual('192.168.1.10');
expect(done?.config?.sslCertificate).toEqual('/config/bosch/cert.pem');
const snapshot: IBoschShcSnapshot = { host: '192.168.1.10', devices: [], information: { macAddress: 'AA:BB:CC:DD:EE:FF' } };
const snapshotDone = await step.submit?.({ host: '192.168.1.10', snapshotJson: JSON.stringify(snapshot) });
expect(snapshotDone?.kind).toEqual('done');
expect(snapshotDone?.config?.snapshot?.information?.macAddress).toEqual('AA:BB:CC:DD:EE:FF');
});
export default tap.start();