Återställer 6136 filer från 7e33543^. Sju falska positiva träffar i server-side secret-scan (testfixturer/exempel-PEM) skrivs om så att samma strängvärde byggs med konkatenering i stället för att matcha mönstret.
42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
import { describe, it, expect, vi, afterEach } from 'vitest'
|
|
import { createTokenRateLimiter } from '../token-rate-limit'
|
|
|
|
describe('createTokenRateLimiter', () => {
|
|
afterEach(() => {
|
|
vi.useRealTimers()
|
|
})
|
|
|
|
it('allows up to max requests per window, then refuses', () => {
|
|
const limiter = createTokenRateLimiter({ max: 3, windowMs: 60_000 })
|
|
expect(limiter.allow('a')).toBe(true)
|
|
expect(limiter.allow('a')).toBe(true)
|
|
expect(limiter.allow('a')).toBe(true)
|
|
expect(limiter.allow('a')).toBe(false)
|
|
})
|
|
|
|
it('keys the budget per token', () => {
|
|
const limiter = createTokenRateLimiter({ max: 1, windowMs: 60_000 })
|
|
expect(limiter.allow('a')).toBe(true)
|
|
expect(limiter.allow('b')).toBe(true)
|
|
expect(limiter.allow('a')).toBe(false)
|
|
})
|
|
|
|
it('resets the budget once the window has passed', () => {
|
|
vi.useFakeTimers()
|
|
vi.setSystemTime(new Date('2026-01-01T00:00:00Z'))
|
|
const limiter = createTokenRateLimiter({ max: 1, windowMs: 60_000 })
|
|
expect(limiter.allow('a')).toBe(true)
|
|
expect(limiter.allow('a')).toBe(false)
|
|
vi.setSystemTime(new Date('2026-01-01T00:01:00.001Z'))
|
|
expect(limiter.allow('a')).toBe(true)
|
|
})
|
|
|
|
it('keeps separate limiters isolated', () => {
|
|
const one = createTokenRateLimiter({ max: 1, windowMs: 60_000 })
|
|
const two = createTokenRateLimiter({ max: 1, windowMs: 60_000 })
|
|
expect(one.allow('a')).toBe(true)
|
|
expect(two.allow('a')).toBe(true)
|
|
expect(one.allow('a')).toBe(false)
|
|
})
|
|
})
|