test: tighten fixed window limiter coverage

This commit is contained in:
Peter Steinberger 2026-03-13 18:49:41 +00:00
parent 8f86cb92ac
commit 5dd9389c25
1 changed files with 29 additions and 0 deletions

View File

@ -18,6 +18,35 @@ describe("fixed-window rate limiter", () => {
expect(limiter.consume()).toMatchObject({ allowed: true, remaining: 1 });
});
it("clamps maxRequests and windowMs to at least one", () => {
let nowMs = 100;
const limiter = createFixedWindowRateLimiter({
maxRequests: 0.2,
windowMs: 0.4,
now: () => nowMs,
});
expect(limiter.consume()).toMatchObject({ allowed: true, remaining: 0, retryAfterMs: 0 });
expect(limiter.consume()).toMatchObject({ allowed: false, remaining: 0, retryAfterMs: 1 });
nowMs += 1;
expect(limiter.consume()).toMatchObject({ allowed: true, remaining: 0 });
});
it("reports the remaining retry window after later blocked attempts", () => {
let nowMs = 1_000;
const limiter = createFixedWindowRateLimiter({
maxRequests: 1,
windowMs: 1_000,
now: () => nowMs,
});
expect(limiter.consume()).toMatchObject({ allowed: true, remaining: 0 });
nowMs += 250;
expect(limiter.consume()).toMatchObject({ allowed: false, retryAfterMs: 750 });
});
it("supports explicit reset", () => {
const limiter = createFixedWindowRateLimiter({
maxRequests: 1,