| 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) |
| }) |
| }) |
|
|