import test from 'node:test' import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' const read = (path) => readFile(new URL(path, import.meta.url), 'utf8') test('direct H5 refresh restores the page user before rendering picking content', async () => { const page = await read('../pages/picking/picking.vue') assert.match(page, //) assert.match(page, /onLoad\(options = \{\}\) \{[\s\S]*?if \(!requireSession\(\)\) return[\s\S]*?this\.currentUser = session\.currentUser/) assert.match(page, /async onShow\(\) \{[\s\S]*?if \(!requireSession\(\)\) return[\s\S]*?this\.currentUser = session\.currentUser/) }) test('picking route carries only stable task and warehouse identity', async () => { const [tasks, page] = await Promise.all([ read('../pages/tasks/tasks.vue'), read('../pages/picking/picking.vue') ]) const navigation = tasks.match(/uni\.navigateTo\(\{ url: `\/pages\/picking\/picking\?[^`]+` \}\)/)?.[0] || '' const onLoad = page.match(/onLoad\(options = \{\}\) \{[\s\S]*?\n\t\t\},\n\t\t\tasync onShow/)?.[0] || '' assert.match(navigation, /\?taskId=\$\{encodeURIComponent\(task\.taskId\)\}&warehouseId=\$\{encodeURIComponent\(task\.warehouseId\)\}/) assert.doesNotMatch(navigation, /cabinetNo|currentContainerNo|orderNo|inboundId|tenantId/) assert.match(onLoad, /taskId: String\(options\.taskId\)/) assert.match(onLoad, /warehouseId: options\.warehouseId \? String\(options\.warehouseId\) : null/) assert.doesNotMatch(onLoad, /options\.(cabinetNo|currentContainerNo|orderNo|inboundId|inboundVersion|tenantId)/) }) test('target task detail keeps 19 digit identifiers as strings from route through request', async () => { const [adapter, tasks, page] = await Promise.all([ read('../api/pda-loading.js'), read('../pages/tasks/tasks.vue'), read('../pages/picking/picking.vue') ]) const taskId = '2092889048731414530' const warehouseId = '193000000000200002' assert.equal(`/first-leg/pda-loading/tasks/${encodeURIComponent(taskId)}?warehouseId=${encodeURIComponent(warehouseId)}`, '/first-leg/pda-loading/tasks/2092889048731414530?warehouseId=193000000000200002') assert.match(adapter, /tasks\/\$\{encodeURIComponent\(taskId\)\}\?warehouseId=\$\{encodeURIComponent\(warehouseId\)\}/) assert.match(tasks, /taskId=\$\{encodeURIComponent\(task\.taskId\)\}&warehouseId=\$\{encodeURIComponent\(task\.warehouseId\)\}/) assert.match(page, /taskId: String\(options\.taskId\)/) assert.match(page, /warehouseId: options\.warehouseId \? String\(options\.warehouseId\) : null/) assert.doesNotMatch(page.match(/onLoad\(options = \{\}\) \{[\s\S]*?\n\t\t\},/)?.[0] || '', /Number\((?:options\.)?(?:taskId|warehouseId)/) }) test('task detail restores before and after claim and exposes S0500 metadata', async () => { const [http, page] = await Promise.all([read('../api/http.js'), read('../pages/picking/picking.vue')]) const sync = page.match(/async syncRemoteTask\(\) \{[\s\S]*?\n\t\t\t\},/)?.[0] || '' assert.match(sync, /remoteTask\.workflowStatus === 'UNASSIGNED'[\s\S]*?claimContainerPickingTask/) assert.match(sync, /remoteTask\.workflowStatus === 'IN_PROGRESS'[\s\S]*?assigneeId/) assert.match(sync, /normalizePickingTask\(\{ \.\.\.task, \.\.\.\(claimed \|\| \{\}\) \}\)/) assert.match(http, /error\.code = body\.code \|\| response\.statusCode/) assert.match(http, /error\.requestId = body\.requestId/) assert.match(http, /error\.traceId = body\.traceId/) assert.match(page, /const code = String\(error\?\.code \|\| ''\)\.trim\(\)/) assert.match(page, /错误码:\$\{code\}/) assert.match(sync, /this\.remoteFailureMessage\(error, '任务同步失败'\)/) })