88 lines
2.3 KiB
TypeScript
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('恢复令牌无效')
|
|
})
|
|
})
|