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,
})
})
})