/** @jest-environment node */ import { ensureDefaultPermissionPacks, packItemsToMap, savePermissionPackItems } from '@/lib/user-permission-inherit' import { prisma } from '@/lib/prisma' jest.mock('@/lib/prisma', () => ({ prisma: { materialPermissionPack: { findUnique: jest.fn(), upsert: jest.fn(), }, materialPermissionPackItem: { deleteMany: jest.fn(), createMany: jest.fn(), }, $transaction: jest.fn(async (operations: unknown[]) => operations), }, })) describe('user permission inherit helpers', () => { beforeEach(() => { jest.clearAllMocks() ;(prisma.materialPermissionPack.findUnique as jest.Mock).mockResolvedValue({ id: 'visual-pack' }) ;(prisma.materialPermissionPackItem.deleteMany as jest.Mock).mockReturnValue({ kind: 'deleteMany' }) ;(prisma.materialPermissionPackItem.createMany as jest.Mock).mockReturnValue({ kind: 'createMany' }) }) test('packItemsToMap 只让任务详情保留私密权限和编辑图片权限', () => { expect( packItemsToMap([ { materialType: '任务-详情', canView: true, canDownload: true, canDownloadSource: true, canShare: true, canEditAssets: true, canAccessPrivate: true, }, { materialType: '3D场景', canView: true, canDownload: true, canDownloadSource: false, canShare: true, canEditAssets: true, canAccessPrivate: true, }, ]), ).toEqual({ '任务-详情': { canView: true, canDownload: true, canDownloadSource: true, canShare: true, canEditAssets: true, canAccessPrivate: true, }, '3D场景': { canView: true, canDownload: true, canDownloadSource: false, canShare: true, canEditAssets: false, canAccessPrivate: false, }, }) }) test('读取默认组不会覆盖管理员的组名,也不会按部门名称自动加组', async () => { ;(prisma.materialPermissionPack.upsert as jest.Mock).mockResolvedValue({ id: 'pack', _count: { items: 1 } }) await ensureDefaultPermissionPacks() expect(prisma.materialPermissionPack.upsert).toHaveBeenCalledWith(expect.objectContaining({ update: {} })) expect(prisma.materialPermissionPackItem.createMany).not.toHaveBeenCalled() }) test('savePermissionPackItems 会把非任务详情的私密权限强制保存为 false', async () => { await savePermissionPackItems('visual', [ { materialType: '任务-详情', canView: true, canDownload: true, canDownloadSource: true, canShare: true, canEditAssets: true, canAccessPrivate: true, }, { materialType: '3D场景', canView: true, canDownload: true, canDownloadSource: false, canShare: true, canEditAssets: true, canAccessPrivate: true, }, ]) expect(prisma.materialPermissionPackItem.createMany).toHaveBeenCalledWith({ data: [ expect.objectContaining({ materialType: '任务-详情', canEditAssets: true, canAccessPrivate: true, }), expect.objectContaining({ materialType: '3D场景', canEditAssets: false, canAccessPrivate: false, }), ], }) }) })