64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { GET } from '../route'
|
|
|
|
jest.mock('@/lib/auth', () => ({
|
|
authOptions: {},
|
|
}))
|
|
|
|
jest.mock('next-auth', () => ({
|
|
getServerSession: jest.fn(),
|
|
}))
|
|
|
|
jest.mock('@/lib/prisma', () => ({
|
|
prisma: {
|
|
$queryRaw: jest.fn(),
|
|
uploadTemplate: {
|
|
findMany: jest.fn(),
|
|
},
|
|
material: {
|
|
count: jest.fn(),
|
|
},
|
|
},
|
|
}))
|
|
|
|
const { getServerSession } = require('next-auth')
|
|
const { prisma } = require('@/lib/prisma')
|
|
|
|
describe('GET /api/upload-templates 权限边界', () => {
|
|
beforeEach(() => {
|
|
jest.resetAllMocks()
|
|
})
|
|
|
|
it('未登录时拒绝读取上传模板', async () => {
|
|
getServerSession.mockResolvedValue(null)
|
|
|
|
const response = await GET()
|
|
const data = await response.json()
|
|
|
|
expect(response.status).toBe(401)
|
|
expect(data.error).toBe('请先登录')
|
|
expect(prisma.$queryRaw).not.toHaveBeenCalled()
|
|
expect(prisma.uploadTemplate.findMany).not.toHaveBeenCalled()
|
|
expect(prisma.material.count).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('已登录时正常读取上传模板', async () => {
|
|
getServerSession.mockResolvedValue({
|
|
user: { id: 'user-1', role: 'USER' },
|
|
})
|
|
prisma.$queryRaw.mockResolvedValue([{ enabledBuiltinTemplates: '["other-material"]' }])
|
|
prisma.uploadTemplate.findMany.mockResolvedValue([])
|
|
prisma.material.count.mockResolvedValue(0)
|
|
|
|
const response = await GET()
|
|
const data = await response.json()
|
|
|
|
expect(response.status).toBe(200)
|
|
expect(data).toHaveLength(1)
|
|
expect(data[0]).toMatchObject({
|
|
id: 'builtin-other-material',
|
|
isBuiltin: true,
|
|
materialCount: 0,
|
|
})
|
|
})
|
|
})
|