access-request-from-row.test.js
1.33 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'),
}
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'])
})
})