import { describe, it, expect, vi, beforeEach } from 'vitest' beforeEach(() => { vi.resetModules() }) describe('POST /api/codes/setup', () => { it('creates room and marks code used for existing code without PIN', async () => { vi.doMock('lib/logger', () => ({ logEvent: vi.fn() })) const updateCodeMock = vi.fn().mockResolvedValue({ id: 'code-1' }) const getCodeByCodeMock = vi.fn().mockResolvedValue({ id: 'code-1', code: 'EXIST', linked_to: 'code-2', used: null }) const getCodeByIdMock = vi.fn().mockResolvedValue({ id: 'code-2', code: 'LINK', linked_to: 'code-1', used: null }) const insertCodeMock = vi.fn() vi.doMock('lib/persistence', () => ({ updateCode: updateCodeMock, getCodeByCode: getCodeByCodeMock, getCodeById: getCodeByIdMock, insertCode: insertCodeMock, updateRoom: vi.fn() })) const createRoomMock = vi.fn().mockResolvedValue('room-123') vi.doMock('lib/roomService', () => ({ createRoom: createRoomMock })) const setAnonMock = vi.fn().mockResolvedValue(null) vi.doMock('lib/session', () => ({ setAnonymousSession: setAnonMock })) const route = await import('./route') const req = { json: async () => ({ code: 'EXIST', userAgent: 'UA' }) } as any const res = await route.POST(req) expect(res.status).toBe(200) expect(createRoomMock).toHaveBeenCalledWith('code-1', 'code-2') expect(updateCodeMock).toHaveBeenCalled() expect(insertCodeMock).not.toHaveBeenCalled() expect(setAnonMock).toHaveBeenCalled() }) })