"use strict"; const test = require("node:test"); const assert = require("node:assert/strict"); const { FixedWindowRateLimiter } = require("../src/lib/rate-limit"); test("allows requests within window limit", () => { const limiter = new FixedWindowRateLimiter({ limit: 2, windowMs: 1000 }); const first = limiter.hit("u1", 0); const second = limiter.hit("u1", 1); assert.equal(first.allowed, true); assert.equal(second.allowed, true); assert.equal(second.remaining, 0); }); test("blocks request over the limit and reports retry delay", () => { const limiter = new FixedWindowRateLimiter({ limit: 1, windowMs: 1000 }); limiter.hit("u1", 0); const blocked = limiter.hit("u1", 100); assert.equal(blocked.allowed, false); assert.equal(blocked.retryAfterSec > 0, true); }); test("resets after window passes", () => { const limiter = new FixedWindowRateLimiter({ limit: 1, windowMs: 1000 }); limiter.hit("u1", 0); const blocked = limiter.hit("u1", 500); const afterWindow = limiter.hit("u1", 1001); assert.equal(blocked.allowed, false); assert.equal(afterWindow.allowed, true); });