/* Unit tests for pusher covering createMetricsPusher. It also guards the documented public contract and regression-sensitive edge cases. Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only. RFC-1311: Compass header sweep — declares the pusher suite's contract for test-file scaffold coverage. */ // @vitest-environment node import { describe, it, expect } from "vitest"; import { createMetricsPusher } from "../pusher.ts"; describe("createMetricsPusher", () => { it("returns null when endpoint is missing", () => { const pusher = createMetricsPusher( { serviceName: "test", layer: "factory", environment: "ci" }, { token: "abc" }, ); expect(pusher).toBeNull(); }); it("returns null when token is missing", () => { const pusher = createMetricsPusher( { serviceName: "test", layer: "factory", environment: "ci" }, { endpoint: "https://ingest.example.com" }, ); expect(pusher).toBeNull(); }); it("returns null when both are missing", () => { const pusher = createMetricsPusher( { serviceName: "test", layer: "factory", environment: "ci" }, {}, ); expect(pusher).toBeNull(); }); it("returns a pusher when both env vars are present", () => { const pusher = createMetricsPusher( { serviceName: "test", layer: "factory", environment: "ci" }, { endpoint: "https://ingest.example.com", token: "abc" }, ); expect(pusher).not.toBeNull(); }); it("flush() resolves with delivered:true when no points accumulated", async () => { const pusher = createMetricsPusher( { serviceName: "test", layer: "factory", environment: "ci" }, { endpoint: "https://ingest.example.com", token: "abc" }, ); const result = await pusher!.flush(); expect(result.delivered).toBe(true); }); it("flush() never throws even on network failure", async () => { const pusher = createMetricsPusher( { serviceName: "test", layer: "factory", environment: "ci" }, { endpoint: "https://nonexistent.invalid.example", token: "abc" }, { timeoutMs: 100 }, ); pusher!.counterAdd("warpgogol_factory_smoke_total", 1); const result = await pusher!.flush(); expect(result.delivered).toBe(false); expect(result.reason).toBeDefined(); }); it("flush() honors timeout via AbortController", async () => { // Use a hanging endpoint — we can't easily mock fetch, but we can test // with a very short timeout against a real (slow) endpoint. const pusher = createMetricsPusher( { serviceName: "test", layer: "factory", environment: "ci" }, { endpoint: "https://10.255.255.1", token: "abc" }, { timeoutMs: 50 }, ); pusher!.counterAdd("warpgogol_factory_smoke_total", 1); const start = Date.now(); const result = await pusher!.flush(); const elapsed = Date.now() - start; expect(result.delivered).toBe(false); // Should abort within a reasonable window of the timeout expect(elapsed).toBeLessThan(5000); }); });