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') })