File size: 1,543 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
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()
  })
})