gongxiangp2/lib/__tests__/user-permission-inherit.test.ts

115 lines
3.4 KiB
TypeScript

/** @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,
}),
],
})
})
})