59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
import prisma from '../../utils/prisma'
|
|
import { cancelQueuedPrintJob, PrintServiceError } from '../printService'
|
|
|
|
test('非管理员只能取消本人仍在排队的打印任务', async () => {
|
|
const originalFindUnique = prisma.printJob.findUnique
|
|
const originalUpdateMany = prisma.printJob.updateMany
|
|
let capturedWhere: any = null
|
|
;(prisma.printJob.findUnique as any) = async () => ({
|
|
id: 12,
|
|
status: 'queued',
|
|
requested_by: 7,
|
|
payload_json: '{}'
|
|
})
|
|
;(prisma.printJob.updateMany as any) = async ({ where }: any) => {
|
|
capturedWhere = where
|
|
return { count: 1 }
|
|
}
|
|
|
|
try {
|
|
await assert.rejects(
|
|
() => cancelQueuedPrintJob(12, 8, false),
|
|
(error: unknown) => error instanceof PrintServiceError && error.statusCode === 403
|
|
)
|
|
|
|
await cancelQueuedPrintJob(12, 7, false)
|
|
assert.equal(capturedWhere.requested_by, 7)
|
|
|
|
await cancelQueuedPrintJob(12, 99, true)
|
|
assert.equal('requested_by' in capturedWhere, false)
|
|
} finally {
|
|
;(prisma.printJob.findUnique as any) = originalFindUnique
|
|
;(prisma.printJob.updateMany as any) = originalUpdateMany
|
|
}
|
|
})
|
|
|
|
test('取消打印任务使用 queued 条件更新防止与打印终端领取竞争', async () => {
|
|
const originalFindUnique = prisma.printJob.findUnique
|
|
const originalUpdateMany = prisma.printJob.updateMany
|
|
;(prisma.printJob.findUnique as any) = async () => ({
|
|
id: 12,
|
|
status: 'queued',
|
|
requested_by: 7,
|
|
payload_json: '{}'
|
|
})
|
|
;(prisma.printJob.updateMany as any) = async () => ({ count: 0 })
|
|
|
|
try {
|
|
await assert.rejects(
|
|
() => cancelQueuedPrintJob(12, 7, false),
|
|
(error: unknown) => error instanceof PrintServiceError && error.statusCode === 409
|
|
)
|
|
} finally {
|
|
;(prisma.printJob.findUnique as any) = originalFindUnique
|
|
;(prisma.printJob.updateMany as any) = originalUpdateMany
|
|
}
|
|
})
|