import { afterEach, describe, expect, it, vi } from "vitest"; import { getTaskDrainStatus, resolveHeartbeatSchedulingSuppression, startTaskDrain, stopTaskDrain, } from "../services/heartbeat.ts"; describe("heartbeat task drain", () => { afterEach(() => { stopTaskDrain(); vi.useRealTimers(); }); it("start_task_drain_suppresses_admission", () => { startTaskDrain({}); expect(resolveHeartbeatSchedulingSuppression({})).toEqual({ suppressed: true, reason: "task_drain", }); }); it("stop_task_drain_restores_admission", () => { startTaskDrain({}); expect(stopTaskDrain()).toEqual({ wasActive: true }); expect(resolveHeartbeatSchedulingSuppression({})).toEqual({ suppressed: false, reason: null, }); expect(stopTaskDrain()).toEqual({ wasActive: false }); }); it("null_ttl_produces_no_expiry", () => { const { expiresAt } = startTaskDrain({ ttlMs: null }); expect(expiresAt).toBeNull(); expect(getTaskDrainStatus().expiresAt).toBeNull(); }); it("an_expired_ttl_ends_the_drain_and_restores_admission", () => { vi.useFakeTimers(); vi.setSystemTime(new Date("2026-01-01T00:00:00.000Z")); startTaskDrain({ ttlMs: 1000 }); expect(resolveHeartbeatSchedulingSuppression({})).toEqual({ suppressed: true, reason: "task_drain", }); vi.setSystemTime(new Date("2026-01-01T00:00:01.001Z")); expect(resolveHeartbeatSchedulingSuppression({})).toEqual({ suppressed: false, reason: null, }); expect(getTaskDrainStatus().draining).toBe(false); }); it("status_reports_quiescent_when_both_promise_sets_are_empty", () => { startTaskDrain({}); const status = getTaskDrainStatus(); expect(status.draining).toBe(true); expect(status.activeRuns).toBe(0); expect(status.pendingWakes).toBe(0); expect(status.quiescent).toBe(true); }); });