GuDingZiChan/print-agent/tests/job-processor.test.mjs

145 lines
3.7 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { createJobProcessor } from '../src/services/jobProcessor.js'
test('正式资产标签任务会调用真实打印执行器并返回 completed', async () => {
const printedJobs = []
const processor = createJobProcessor({
async printAssetLabels(payload) {
printedJobs.push(payload)
return {
printed_count: payload.items.length
}
}
})
const result = await processor.process({
id: 21,
job_type: 'asset_label',
payload: {
job_type: 'asset_label',
equipment_ids: [1],
items: [
{
id: 1,
equipment_code: 'JS-PC-2101',
equipment_name: '办公主机',
equipment_type: '主机',
purchase_date: '2026-03-01T00:00:00.000Z',
department: {
name: '行政部'
}
}
]
}
}, {
selectedPrinterName: 'Xprinter XP-420B'
})
assert.equal(result.ok, true)
assert.equal(result.nextStatus, 'completed')
assert.match(result.message, /Xprinter XP-420B/)
assert.equal(printedJobs.length, 1)
assert.equal(printedJobs[0].printerName, 'Xprinter XP-420B')
assert.equal(printedJobs[0].items[0].equipment_code, 'JS-PC-2101')
})
test('正式资产标签任务会把网页成品 PNG 一并交给打印执行器,确保和网页预览一致', async () => {
const printedJobs = []
const processor = createJobProcessor({
async printAssetLabels(payload) {
printedJobs.push(payload)
return {
printed_count: payload.renderedLabels?.length ?? 0
}
}
})
const result = await processor.process(
{
id: 23,
job_type: 'asset_label',
payload: {
job_type: 'asset_label',
equipment_ids: [1],
items: [
{
id: 1,
equipment_code: 'JS-PC-2102',
equipment_name: '办公主机',
equipment_type: '主机'
}
],
rendered_labels: [
{
equipment_id: 1,
image_data_url: 'data:image/png;base64,ZmFrZS1pbWFnZS0x'
}
]
}
},
{
selectedPrinterName: 'Xprinter XP-420B'
}
)
assert.equal(result.ok, true)
assert.equal(printedJobs.length, 1)
assert.equal(printedJobs[0].renderedLabels?.length, 1)
assert.equal(
printedJobs[0].renderedLabels?.[0]?.image_data_url,
'data:image/png;base64,ZmFrZS1pbWFnZS0x'
)
})
test('未选择打印机时会返回人话错误,不会继续打印', async () => {
const processor = createJobProcessor({
async printAssetLabels() {
throw new Error('不应该进入真实打印')
}
})
const result = await processor.process({
id: 22,
job_type: 'asset_label',
payload: {
job_type: 'asset_label',
equipment_ids: [1],
items: [
{
id: 1,
equipment_code: 'JS-PC-2201',
equipment_name: '办公主机',
equipment_type: '主机'
}
]
}
})
assert.equal(result.ok, false)
assert.equal(result.nextStatus, 'failed')
assert.match(result.errorMessage, /尚未选择标签打印机/)
})
test('测试打印会调用真实测试标签打印执行器', async () => {
const calls = []
const processor = createJobProcessor({
async printTestLabel(payload) {
calls.push(payload)
return {
printer_name: payload.printerName
}
}
})
const result = await processor.runTestPrint({
selectedPrinterName: 'Xprinter XP-420B'
})
assert.equal(result.ok, true)
assert.match(result.message, /Xprinter XP-420B/)
assert.equal(calls.length, 1)
assert.equal(calls[0].printerName, 'Xprinter XP-420B')
})