access-request-from-row.test.js 1.36 KB
import { describe, expect, it } from 'vitest'
import { accessRequestFromRow, ACCESS_REQUEST_STATUSES } from '../src/access-requests.js'

const base = {
  id: 'ar_1',
  user_id: 'u_1',
  email: 'a@example.com',
  note: null,
  created_at: new Date('2026-10-10T00:00:00Z'),
  claimed_agent_count: 0,
}

describe('accessRequestFromRow 覆盖全部状态', () => {
  it('pending 不能带审核字段', () => {
    expect(accessRequestFromRow({ ...base, status: 'pending', reviewed_at: null, reviewed_by_user_id: null }).status).toBe('pending')
    expect(() => accessRequestFromRow({ ...base, status: 'pending', reviewed_at: new Date(), reviewed_by_user_id: 'u_admin' })).toThrow(/ar_1/)
  })

  it.each(['approved', 'rejected'])('%s 必须有审核人和审核时间', (status) => {
    expect(accessRequestFromRow({ ...base, status, reviewed_at: new Date(), reviewed_by_user_id: 'u_admin' }).status).toBe(status)
    expect(() => accessRequestFromRow({ ...base, status, reviewed_at: null, reviewed_by_user_id: 'u_admin' })).toThrow(/reviewed_at/)
  })

  it('未知状态直接 throw', () => {
    expect(() => accessRequestFromRow({ ...base, status: 'archived', reviewed_at: null, reviewed_by_user_id: null })).toThrow(/Unhandled status: archived/)
  })

  it('状态全集与 DB CHECK 一致', () => {
    expect(ACCESS_REQUEST_STATUSES).toEqual(['pending', 'approved', 'rejected'])
  })
})