Add native local network integrations
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import { BluetoothLeTrackerMapper } from '../../ts/integrations/bluetooth_le_tracker/index.js';
|
||||
|
||||
const lastSeen = Date.now();
|
||||
const repeatedAdvertisements = Array.from({ length: 5 }, (_, indexArg) => ({
|
||||
address: 'AA:BB:CC:DD:EE:FF',
|
||||
name: indexArg === 4 ? 'Backpack Tag' : undefined,
|
||||
rssi: -60 - indexArg,
|
||||
battery: 87,
|
||||
connectable: false,
|
||||
time: lastSeen + indexArg,
|
||||
}));
|
||||
|
||||
tap.test('maps tracked BLE advertisements into devices and device-tracker-like entities', async () => {
|
||||
const snapshot = BluetoothLeTrackerMapper.toSnapshot({
|
||||
trackNewDevices: true,
|
||||
trackBattery: true,
|
||||
advertisements: repeatedAdvertisements,
|
||||
knownDevices: [{ mac: 'BLE_11:22:33:44:55:66', name: 'Ignored Beacon', track: false }],
|
||||
});
|
||||
const devices = BluetoothLeTrackerMapper.toDevices(snapshot);
|
||||
const entities = BluetoothLeTrackerMapper.toEntities(snapshot);
|
||||
|
||||
expect(snapshot.devices.length).toEqual(1);
|
||||
expect(snapshot.devices[0].address).toEqual('aa:bb:cc:dd:ee:ff');
|
||||
expect(snapshot.devices[0].advertisementCount).toEqual(5);
|
||||
expect(devices[0].id).toEqual('bluetooth_le_tracker.device.aa_bb_cc_dd_ee_ff');
|
||||
expect(devices[0].metadata?.haMac).toEqual('BLE_AA:BB:CC:DD:EE:FF');
|
||||
expect(entities.find((entityArg) => entityArg.uniqueId === 'bluetooth_le_tracker_presence_aa_bb_cc_dd_ee_ff')?.state).toEqual('on');
|
||||
expect(entities.find((entityArg) => entityArg.uniqueId === 'bluetooth_le_tracker_state_aa_bb_cc_dd_ee_ff')?.state).toEqual('home');
|
||||
expect(entities.find((entityArg) => entityArg.uniqueId === 'bluetooth_le_tracker_battery_aa_bb_cc_dd_ee_ff')?.state).toEqual(87);
|
||||
});
|
||||
|
||||
tap.test('keeps new BLE devices untracked until the HA sighting threshold is reached', async () => {
|
||||
const snapshot = BluetoothLeTrackerMapper.toSnapshot({
|
||||
trackNewDevices: true,
|
||||
advertisements: repeatedAdvertisements.slice(0, 4),
|
||||
});
|
||||
|
||||
expect(snapshot.devices.length).toEqual(0);
|
||||
});
|
||||
|
||||
export default tap.start();
|
||||
Reference in New Issue
Block a user