File size: 1,752 Bytes
9853b20 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import { describe, it, expect, vi, beforeEach } from 'vitest'
beforeEach(() => {
vi.resetModules()
})
describe('POST /api/codes/validate', () => {
it('redirects to setup for unused code', async () => {
vi.doMock('lib/logger', () => ({ logEvent: vi.fn() }))
vi.doMock('lib/persistence', () => ({ getCodeByCode: async () => ({ id: 'c1', code: 'AAAAA', used: null }) }))
const route = await import('./route')
const req = { json: async () => ({ code: 'AAAAA' }) } as any
const res: any = await route.POST(req)
expect(res.status).toBe(200)
})
it('requires PIN when code has pin_hash and session missing', async () => {
vi.doMock('lib/logger', () => ({ logEvent: vi.fn() }))
vi.doMock('lib/session', () => ({ getAnonymousSession: async () => null }))
vi.doMock('lib/persistence', () => ({
getCodeByCode: async () => ({ id: 'c1', code: 'BBBBB', used: 1, pin_hash: 'x', room_id: 'r1' })
}))
const route = await import('./route')
const req = { json: async () => ({ code: 'BBBBB' }) } as any
const res: any = await route.POST(req)
expect(res.status).toBe(200)
})
it('redirects to room when session matches for pin-protected code', async () => {
vi.doMock('lib/logger', () => ({ logEvent: vi.fn() }))
vi.doMock('lib/session', () => ({ getAnonymousSession: async () => ({ codeId: 'c1', sessionHash: 's1' }) }))
vi.doMock('lib/persistence', () => ({
getCodeByCode: async () => ({ id: 'c1', code: 'CCCCC', used: 1, pin_hash: 'x', room_id: 'r1', session_hash: 's1' })
}))
const route = await import('./route')
const req = { json: async () => ({ code: 'CCCCC' }) } as any
const res: any = await route.POST(req)
expect(res.status).toBe(200)
})
})
|