46 lines
1.8 KiB
TypeScript
46 lines
1.8 KiB
TypeScript
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
|
import { createBluetoothLeTrackerDiscoveryDescriptor } from '../../ts/integrations/bluetooth_le_tracker/index.js';
|
|
|
|
tap.test('matches Bluetooth LE advertisements and manual BLE entries', async () => {
|
|
const descriptor = createBluetoothLeTrackerDiscoveryDescriptor();
|
|
const bluetoothMatcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'bluetooth-le-tracker-bluetooth-match');
|
|
const manualMatcher = descriptor.getMatchers().find((matcherArg) => matcherArg.id === 'bluetooth-le-tracker-manual-match');
|
|
|
|
const bluetoothResult = await bluetoothMatcher!.matches({
|
|
address: 'AA-BB-CC-DD-EE-FF',
|
|
name: 'Backpack Tag\x00',
|
|
rssi: -61,
|
|
connectable: false,
|
|
serviceUuids: ['0000180f-0000-1000-8000-00805f9b34fb'],
|
|
manufacturerData: { '76': [1, 2, 3] },
|
|
}, {});
|
|
const manualResult = await manualMatcher!.matches({
|
|
mac: 'BLE_11:22:33:44:55:66',
|
|
name: 'Keys Beacon',
|
|
track: true,
|
|
trackBattery: true,
|
|
}, {});
|
|
|
|
expect(bluetoothResult.matched).toBeTrue();
|
|
expect(bluetoothResult.normalizedDeviceId).toEqual('aa:bb:cc:dd:ee:ff');
|
|
expect(bluetoothResult.candidate?.metadata?.haMac).toEqual('BLE_AA:BB:CC:DD:EE:FF');
|
|
expect(manualResult.matched).toBeTrue();
|
|
expect(manualResult.candidate?.macAddress).toEqual('11:22:33:44:55:66');
|
|
});
|
|
|
|
tap.test('validates Bluetooth LE tracker candidates', async () => {
|
|
const validator = createBluetoothLeTrackerDiscoveryDescriptor().getValidators()[0];
|
|
const result = await validator.validate({
|
|
source: 'bluetooth',
|
|
id: 'aabbccddeeff',
|
|
name: 'BLE tracker tag',
|
|
metadata: { sourceType: 'bluetooth_le' },
|
|
}, {});
|
|
|
|
expect(result.matched).toBeTrue();
|
|
expect(result.confidence).toEqual('high');
|
|
expect(result.candidate?.integrationDomain).toEqual('bluetooth_le_tracker');
|
|
});
|
|
|
|
export default tap.start();
|