2026-05-30 15:21:42 +08:00

88 lines
2.3 KiB
TypeScript

import { NextRequest } from 'next/server'
jest.mock('@/lib/prisma', () => ({
prisma: {
user: {
create: jest.fn(),
findUnique: jest.fn(),
},
category: {
create: jest.fn(),
},
scene: {
create: jest.fn(),
},
material: {
create: jest.fn(),
},
},
}))
function createRequest(token?: string) {
return new NextRequest('http://localhost/api/restore-data', {
method: 'POST',
headers: token ? { 'x-restore-data-token': token } : undefined,
})
}
async function loadPost() {
const route = await import('../route')
return route.POST
}
describe('POST /api/restore-data', () => {
const originalEnv = process.env
beforeEach(() => {
jest.resetModules()
process.env = { ...originalEnv }
delete process.env.RESTORE_DATA_ENABLED
delete process.env.RESTORE_DATA_TOKEN
delete process.env.RESTORE_ADMIN_PASSWORD
})
afterAll(() => {
process.env = originalEnv
})
it('默认未显式启用时拒绝执行', async () => {
process.env.RESTORE_DATA_TOKEN = 'restore-token'
process.env.RESTORE_ADMIN_PASSWORD = 'configured-password'
const POST = await loadPost()
const response = await POST(createRequest('restore-token'))
const data = await response.json()
expect(response.status).toBe(503)
expect(data.success).toBe(false)
expect(data.message).toContain('RESTORE_DATA_ENABLED=1')
})
it('启用后仍要求配置恢复令牌', async () => {
process.env.RESTORE_DATA_ENABLED = '1'
process.env.RESTORE_ADMIN_PASSWORD = 'configured-password'
const POST = await loadPost()
const response = await POST(createRequest())
const data = await response.json()
expect(response.status).toBe(503)
expect(data.success).toBe(false)
expect(data.message).toContain('RESTORE_DATA_TOKEN')
})
it('启用且配置令牌后会拒绝错误令牌', async () => {
process.env.RESTORE_DATA_ENABLED = '1'
process.env.RESTORE_DATA_TOKEN = 'restore-token'
process.env.RESTORE_ADMIN_PASSWORD = 'configured-password'
const POST = await loadPost()
const response = await POST(createRequest('wrong-token'))
const data = await response.json()
expect(response.status).toBe(401)
expect(data.success).toBe(false)
expect(data.message).toBe('恢复令牌无效')
})
})