File size: 1,362 Bytes
9853b20
 
 
 
 
 
 
 
 
b00f0f1
 
9853b20
 
 
 
 
b00f0f1
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
import { describe, it, expect, vi, beforeEach } from 'vitest'

beforeEach(() => {
  vi.resetModules()
})

describe('POST /api/users/transfer-code', () => {
  it('transfers code to authenticated user when PIN valid or not required', async () => {
    vi.doMock('lib/logger', () => ({ logEvent: vi.fn() }))
    vi.doMock('lib/appSession', () => ({ getAppSession: async () => ({ userId: 'user-1' }) }))
    vi.doMock('lib/supabase/server', () => ({ isSupabaseConfigured: () => true }))

    // Mock persistence
    const codeRow = { id: 'code-1', code: 'ABCDE', used: 1, user_id: null, pin_hash: null, room_id: 'room-1' }
    const getCodeByCodeMock = vi.fn().mockResolvedValue(codeRow)
    const getCodeForUserInRoomMock = vi.fn().mockResolvedValue(null)
    const updateCodeMock = vi.fn().mockResolvedValue({ ...codeRow, user_id: 'user-1' })
    vi.doMock('lib/persistence', () => ({
      getCodeByCode: getCodeByCodeMock,
      getCodeForUserInRoom: getCodeForUserInRoomMock,
      updateCode: updateCodeMock
    }))

    const route = await import('./route')
    const req = { json: async () => ({ code: 'ABCDE' }) } as any

    const res: any = await route.POST(req)

    expect(res.status).toBe(200)
    expect(getCodeByCodeMock).toHaveBeenCalled()
    expect(updateCodeMock).toHaveBeenCalledWith('code-1', { user_id: 'user-1', session_hash: null })
  })
})