Add native local infrastructure integrations
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import { IppConfigFlow, createIppDiscoveryDescriptor } from '../../ts/integrations/ipp/index.js';
|
||||
|
||||
tap.test('matches IPP and IPPS mDNS printer records', async () => {
|
||||
const descriptor = createIppDiscoveryDescriptor();
|
||||
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'ipp-mdns-match');
|
||||
const result = await matcher!.matches({
|
||||
type: '_ipps._tcp.local.',
|
||||
name: 'Office Printer._ipps._tcp.local.',
|
||||
host: 'office-printer.local',
|
||||
port: 631,
|
||||
txt: {
|
||||
rp: 'ipp/print',
|
||||
UUID: 'printer-uuid-1',
|
||||
ty: 'HP Color LaserJet Pro',
|
||||
usb_MFG: 'HP',
|
||||
usb_MDL: 'Color LaserJet Pro',
|
||||
},
|
||||
}, {});
|
||||
|
||||
expect(result.matched).toBeTrue();
|
||||
expect(result.normalizedDeviceId).toEqual('printer-uuid-1');
|
||||
expect(result.candidate?.integrationDomain).toEqual('ipp');
|
||||
expect(result.candidate?.metadata?.basePath).toEqual('/ipp/print');
|
||||
expect(result.candidate?.metadata?.tls).toBeTrue();
|
||||
|
||||
const validator = descriptor.getValidators()[0];
|
||||
const validation = await validator.validate(result.candidate!, {});
|
||||
expect(validation.matched).toBeTrue();
|
||||
expect(validation.confidence).toEqual('certain');
|
||||
});
|
||||
|
||||
tap.test('matches manual IPP URLs and carries defaults into config flow', async () => {
|
||||
const descriptor = createIppDiscoveryDescriptor();
|
||||
const matcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'ipp-manual-match');
|
||||
const match = await matcher!.matches({ host: 'ipps://printer.local:631/ipp/print', name: 'Manual Printer' }, {});
|
||||
expect(match.matched).toBeTrue();
|
||||
expect(match.candidate?.host).toEqual('printer.local');
|
||||
expect(match.candidate?.metadata?.basePath).toEqual('/ipp/print');
|
||||
expect(match.candidate?.metadata?.tls).toBeTrue();
|
||||
|
||||
const step = await new IppConfigFlow().start(match.candidate!, {});
|
||||
const done = await step.submit!({ host: 'printer.local' });
|
||||
expect(done.kind).toEqual('done');
|
||||
expect(done.config?.port).toEqual(631);
|
||||
expect(done.config?.basePath).toEqual('/ipp/print');
|
||||
expect(done.config?.tls).toBeTrue();
|
||||
});
|
||||
|
||||
tap.test('rejects IPP-looking candidates without a usable source', async () => {
|
||||
const descriptor = createIppDiscoveryDescriptor();
|
||||
const validator = descriptor.getValidators()[0];
|
||||
const validation = await validator.validate({ source: 'manual', integrationDomain: 'ipp', name: 'Printer without host' }, {});
|
||||
expect(validation.matched).toBeFalse();
|
||||
expect(validation.reason).toEqual('IPP candidate lacks host, snapshot, attributes, or client information.');
|
||||
});
|
||||
|
||||
export default tap.start();
|
||||
Reference in New Issue
Block a user