import { describe, expect, it } from "vitest"; import { createRateLimiter } from "../../server/rate-limit"; describe("createRateLimiter", () => { it("allows the first 10 hits from an IP", () => { let now = 1_000; const limiter = createRateLimiter(10, 60 * 60 * 1000, () => now); for (let i = 0; i < 10; i++) { expect(limiter.check("1.1.1.1")).toBe(true); } }); it("rejects the 11th hit within the window", () => { let now = 1_000; const limiter = createRateLimiter(10, 60 * 60 * 1000, () => now); for (let i = 0; i < 10; i++) { limiter.check("1.1.1.1"); } expect(limiter.check("1.1.1.1")).toBe(false); }); it("allows another hit after the window elapses", () => { let now = 1_000; const windowMs = 60 * 60 * 1000; const limiter = createRateLimiter(10, windowMs, () => now); for (let i = 0; i < 10; i++) { limiter.check("1.1.1.1"); } now += windowMs + 1; expect(limiter.check("1.1.1.1")).toBe(true); }); it("tracks IPs independently", () => { const limiter = createRateLimiter(1, 60_000, () => 1_000); expect(limiter.check("a")).toBe(true); expect(limiter.check("a")).toBe(false); expect(limiter.check("b")).toBe(true); }); });