115 lines
3.4 KiB
TypeScript
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,
|
|
}),
|
|
],
|
|
})
|
|
})
|
|
})
|