Letschat / src /lib /rateLimiter.test.ts
HonzaH's picture
Upload 171 files
9853b20 verified
Raw History Blame Contribute Delete
782 Bytes
import { describe, it, expect, beforeEach } from 'vitest'
import { assertNotBlocked, noteFailure, resetFailures } from './rateLimiter'
const cfg = { limit: 3, windowMs: 5 * 60 * 1000, blockMs: 5 * 60 * 1000, escalateAfterBlocks: 3, escalateBlockMs: 24 * 60 * 60 * 1000 }
describe('rateLimiter', () => {
beforeEach(() => {
resetFailures('key')
})
it('blocks after threshold', () => {
assertNotBlocked('key')
noteFailure('key', cfg)
noteFailure('key', cfg)
noteFailure('key', cfg)
expect(() => assertNotBlocked('key')).toThrow()
})
it('resets after resetFailures', () => {
noteFailure('key', cfg)
noteFailure('key', cfg)
noteFailure('key', cfg)
resetFailures('key')
expect(() => assertNotBlocked('key')).not.toThrow()
})
})