/** @jest-environment node */ import { getServerSession } from 'next-auth' import { prisma } from '@/lib/prisma' import { isSuperAdmin } from '@/lib/department-permission' import { savePermissionPackItems } from '@/lib/user-permission-inherit' jest.mock('next-auth', () => ({ getServerSession: jest.fn(), })) jest.mock('@/lib/auth', () => ({ authOptions: {}, })) jest.mock('@/lib/prisma', () => ({ prisma: { materialPermissionPack: { findUnique: jest.fn(), }, }, })) jest.mock('@/lib/department-permission', () => ({ getAllMaterialTypes: jest.fn(), isSuperAdmin: jest.fn(), })) jest.mock('@/lib/user-permission-inherit', () => ({ ensureDefaultPermissionPacks: jest.fn(), packItemsToMap: jest.fn(), savePermissionPackItems: jest.fn(), })) jest.mock('@/lib/permission-groups', () => ({ findConflictingDepartmentGroup: jest.fn(), makePermissionGroupSlug: jest.fn(), seedDefaultGroupDepartments: jest.fn(), })) const { PUT } = require('@/app/api/organization/permission-groups/route') as typeof import('@/app/api/organization/permission-groups/route') describe('/api/organization/permission-groups 保存权限', () => { beforeEach(() => { jest.clearAllMocks() ;(getServerSession as jest.Mock).mockResolvedValue({ user: { id: 'super-admin' } }) ;(isSuperAdmin as jest.Mock).mockResolvedValue(true) ;(prisma.materialPermissionPack.findUnique as jest.Mock).mockResolvedValue({ id: 'visual-pack', slug: 'visual', name: '视觉', }) }) test('任务详情编辑图片勾选值应原样保存,不能回退为 false', async () => { const response = await PUT({ json: async () => ({ action: 'save-pack', slug: 'visual', permissions: [ { materialType: '任务-详情', canView: true, canDownload: true, canDownloadSource: true, canEditAssets: true, }, ], }), } as never) expect(response.status).toBe(200) expect(savePermissionPackItems).toHaveBeenCalledWith('visual', [ expect.objectContaining({ materialType: '任务-详情', canEditAssets: true, }), ]) }) })