feat(companion): add heartbeat success observability state

This commit is contained in:
William Valentin
2026-02-16 19:37:43 -08:00
parent 6dccef94a6
commit 369250077a
4 changed files with 52 additions and 1 deletions
+20
View File
@@ -96,6 +96,24 @@ describe('CompanionHeartbeatLoop', () => {
loop.stop();
});
it('tracks successCount and lastSuccessAt in loop state', async () => {
const publishHeartbeat = vi.fn(async () => buildStatusResult());
const loop = new CompanionHeartbeatLoop({ publishHeartbeat }, { intervalMs: 300 });
expect(loop.successCount).toBe(0);
expect(loop.lastSuccessAt).toBeNull();
loop.start();
await Promise.resolve();
expect(loop.successCount).toBe(1);
expect(loop.lastSuccessAt).not.toBeNull();
expect(loop.getState().successCount).toBe(1);
expect(loop.getState().lastSuccessAt).toBe(loop.lastSuccessAt);
loop.stop();
});
it('passes buildHeartbeat payload into publishHeartbeat', async () => {
const publishHeartbeat = vi.fn(async () => buildStatusResult());
const buildHeartbeat = vi.fn(() => ({ statusText: 'loop', powerSource: 'ac' as const }));
@@ -193,6 +211,8 @@ describe('CompanionHeartbeatLoop', () => {
expect(loop.running).toBe(false);
expect(loop.getState()).toEqual({
running: false,
successCount: 1,
lastSuccessAt: expect.any(Number),
failureCount: 0,
lastFailure: null,
});