61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { describe, expect, test } from 'bun:test';
|
|
|
|
import { getEffectiveDeviceStatus } from '../utils/device-status';
|
|
|
|
describe('device status helper', () => {
|
|
test('reports online when status is online and heartbeat is fresh', () => {
|
|
const now = new Date('2026-02-25T12:00:00.000Z');
|
|
const lastSeenAt = new Date('2026-02-25T11:59:45.000Z');
|
|
|
|
const status = getEffectiveDeviceStatus({
|
|
status: 'online',
|
|
lastSeenAt,
|
|
now,
|
|
staleAfterSeconds: 30,
|
|
});
|
|
|
|
expect(status).toBe('online');
|
|
});
|
|
|
|
test('reports offline when heartbeat is stale', () => {
|
|
const now = new Date('2026-02-25T12:00:00.000Z');
|
|
const lastSeenAt = new Date('2026-02-25T11:59:00.000Z');
|
|
|
|
const status = getEffectiveDeviceStatus({
|
|
status: 'online',
|
|
lastSeenAt,
|
|
now,
|
|
staleAfterSeconds: 30,
|
|
});
|
|
|
|
expect(status).toBe('offline');
|
|
});
|
|
|
|
test('reports offline when stored status is not online', () => {
|
|
const now = new Date('2026-02-25T12:00:00.000Z');
|
|
const lastSeenAt = new Date('2026-02-25T11:59:55.000Z');
|
|
|
|
const status = getEffectiveDeviceStatus({
|
|
status: 'offline',
|
|
lastSeenAt,
|
|
now,
|
|
staleAfterSeconds: 30,
|
|
});
|
|
|
|
expect(status).toBe('offline');
|
|
});
|
|
|
|
test('reports offline when lastSeenAt is missing', () => {
|
|
const now = new Date('2026-02-25T12:00:00.000Z');
|
|
|
|
const status = getEffectiveDeviceStatus({
|
|
status: 'online',
|
|
lastSeenAt: null,
|
|
now,
|
|
staleAfterSeconds: 30,
|
|
});
|
|
|
|
expect(status).toBe('offline');
|
|
});
|
|
});
|