import { describe, expect, it } from "vitest"; import { createAlertLimiter } from "../alert-limiter"; describe("createAlertLimiter", () => { const hour = 3_600_000; it("sends the first alert and holds the same one back for the cooldown", () => { const limiter = createAlertLimiter({ cooldownMs: hour, maxPerDay: 20 }); expect(limiter.shouldSend("boom", 0)).toBe(true); expect(limiter.shouldSend("boom", 30 * 60_000)).toBe(false); expect(limiter.shouldSend("boom", hour)).toBe(true); }); it("treats different errors independently", () => { const limiter = createAlertLimiter({ cooldownMs: hour, maxPerDay: 20 }); expect(limiter.shouldSend("a", 0)).toBe(true); expect(limiter.shouldSend("b", 1)).toBe(true); }); it("caps how many alerts one day can produce, then starts over the next day", () => { const limiter = createAlertLimiter({ cooldownMs: 0, maxPerDay: 3 }); expect([1, 2, 3, 4, 5].map((n) => limiter.shouldSend(`e${n}`, n))).toEqual([ true, true, true, false, false, ]); expect(limiter.shouldSend("e6", 25 * hour)).toBe(true); }); });