35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
|
import { BluetoothLeTrackerIntegration } from '../../ts/integrations/bluetooth_le_tracker/index.js';
|
|
|
|
tap.test('returns a clear unsupported response for live scans without injected data', async () => {
|
|
const runtime = await new BluetoothLeTrackerIntegration().setup({}, {});
|
|
const result = await runtime.callService!({
|
|
domain: 'bluetooth_le_tracker',
|
|
service: 'scan',
|
|
target: {},
|
|
});
|
|
|
|
expect(result.success).toBeFalse();
|
|
expect(String(result.error).includes('Live scanning is not implemented') || String(result.error).includes('live scanning is not implemented')).toBeTrue();
|
|
});
|
|
|
|
tap.test('accepts injected scan data and refreshes runtime devices', async () => {
|
|
const runtime = await new BluetoothLeTrackerIntegration().setup({ minSeenNew: 1 }, {});
|
|
const result = await runtime.callService!({
|
|
domain: 'bluetooth_le_tracker',
|
|
service: 'scan',
|
|
target: {},
|
|
data: {
|
|
advertisements: [{ address: 'AA:BB:CC:DD:EE:FF', name: 'Backpack Tag', rssi: -59, time: Date.now() }],
|
|
},
|
|
});
|
|
const devices = await runtime.devices();
|
|
const entities = await runtime.entities();
|
|
|
|
expect(result.success).toBeTrue();
|
|
expect(devices.some((deviceArg) => deviceArg.id === 'bluetooth_le_tracker.device.aa_bb_cc_dd_ee_ff')).toBeTrue();
|
|
expect(entities.some((entityArg) => entityArg.uniqueId === 'bluetooth_le_tracker_presence_aa_bb_cc_dd_ee_ff' && entityArg.state === 'on')).toBeTrue();
|
|
});
|
|
|
|
export default tap.start();
|