import test from 'node:test' import assert from 'node:assert/strict' import { createPrintAgentClient } from '../src/services/apiClient.js' test('createPrintAgentClient 会用配对码请求长期令牌', async () => { const calls = [] const client = createPrintAgentClient({ serverUrl: 'https://asset.example.com/', fetchImpl: async (url, options) => { calls.push({ url, options }) return { ok: true, async json() { return { code: 200, message: '打印终端配对成功', data: { terminal_id: 12, device_token: 'token-123' } } } } } }) const result = await client.pair({ pairCode: 'ABCD-EFGH', terminalName: '前台标签机', machineName: 'DESKTOP-001', platform: 'win32' }) assert.equal(calls[0].url, 'https://asset.example.com/api/print-agent/pair') assert.equal(calls[0].options.method, 'POST') assert.match(calls[0].options.body, /"code":"ABCD-EFGH"/) assert.match(calls[0].options.body, /"terminal_name":"前台标签机"/) assert.match(calls[0].options.body, /"machine_name":"DESKTOP-001"/) assert.equal(result.terminal_id, 12) assert.equal(result.device_token, 'token-123') }) test('已配对请求会自动带上终端令牌', async () => { const calls = [] const client = createPrintAgentClient({ serverUrl: 'https://asset.example.com', getDeviceToken: () => 'token-xyz', fetchImpl: async (url, options) => { calls.push({ url, options }) return { ok: true, async json() { return { code: 200, message: '领取成功', data: { job: { id: 18, status: 'claimed' } } } } } } }) await client.claimNextJob({ terminalId: 7 }) assert.equal(calls[0].url, 'https://asset.example.com/api/print-agent/jobs/claim') assert.equal(calls[0].options.headers.Authorization, 'Bearer token-xyz') assert.match(calls[0].options.body, /"terminal_id":7/) }) test('心跳会把字段转成后端要求的 snake_case', async () => { const calls = [] const client = createPrintAgentClient({ serverUrl: 'https://asset.example.com', getDeviceToken: () => 'token-xyz', fetchImpl: async (url, options) => { calls.push({ url, options }) return { ok: true, async json() { return { code: 200, message: '心跳已接收', data: { id: 9 } } } } } }) await client.sendHeartbeat({ terminalName: '行政标签机', machineName: 'DESKTOP-001', selectedPrinterName: 'Xprinter XP-420B', printerSnapshot: [{ name: 'Xprinter XP-420B' }], labelProfile: { paper_size: '60x40mm' } }) assert.equal(calls[0].url, 'https://asset.example.com/api/print-agent/heartbeat') assert.match(calls[0].options.body, /"terminal_name":"行政标签机"/) assert.match(calls[0].options.body, /"machine_name":"DESKTOP-001"/) assert.match(calls[0].options.body, /"selected_printer_name":"Xprinter XP-420B"/) assert.match(calls[0].options.body, /"printer_snapshot":\[\{"name":"Xprinter XP-420B"\}\]/) })