21 lines
771 B
TypeScript
21 lines
771 B
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { RateLimiter } from '../application/rate-limiter.js';
|
|
|
|
describe('RateLimiter', () => {
|
|
it('rejects requests above the limit with retry-after', () => {
|
|
const limiter = new RateLimiter(1000, 2);
|
|
expect(limiter.hit('k', 0).allowed).toBe(true);
|
|
expect(limiter.hit('k', 100).allowed).toBe(true);
|
|
const blocked = limiter.hit('k', 200);
|
|
expect(blocked.allowed).toBe(false);
|
|
expect(blocked.retryAfterSeconds).toBeGreaterThan(0);
|
|
});
|
|
|
|
it('resets after window expires', () => {
|
|
const limiter = new RateLimiter(1000, 1);
|
|
expect(limiter.hit('k', 0).allowed).toBe(true);
|
|
expect(limiter.hit('k', 100).allowed).toBe(false);
|
|
expect(limiter.hit('k', 1500).allowed).toBe(true);
|
|
});
|
|
});
|