145 lines
3.7 KiB
JavaScript
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')
|
|
})
|