import { describe, expect, it, vi } from 'vitest' import { checkUploadRateLimit } from './rate-limit' import { getUploadRateLimitSettings } from './upload-policy' vi.mock('./logger', () => ({ clientIp: (event: { __ip?: string }) => event.__ip ?? '127.0.0.1' })) function mockEvent(ip = '127.0.0.1', authToken = '') { return { __ip: ip, node: { req: { headers: { ...(authToken ? { 'auth-token': authToken } : {}) } } } } as unknown as Parameters[0] } describe('checkUploadRateLimit', () => { it('allows requests under the IP limit', () => { const event = mockEvent('10.0.0.1') expect(() => checkUploadRateLimit(event)).not.toThrow() }) it('limits repeated uploads by IP', () => { const event = mockEvent('10.0.0.3') const { ipMax } = getUploadRateLimitSettings() for (let i = 0; i < ipMax; i++) { checkUploadRateLimit(event) } expect(() => checkUploadRateLimit(event)).toThrow() }) it('limits repeated API token uploads', () => { const token = 'token-a' const { tokenMax } = getUploadRateLimitSettings() for (let i = 0; i < tokenMax; i++) { checkUploadRateLimit(mockEvent(`10.0.${i % 200}`), token) } expect(() => checkUploadRateLimit(mockEvent('10.0.250'), token)).toThrow() }) })