This commit is contained in:
2026-10-09 17:36:24 +08:00
parent 74bf0e73c5
commit 261cdc87cb
27 changed files with 636 additions and 45 deletions
+7 -2
View File
@@ -25,8 +25,10 @@ function fixture() {
mainStatus: i < 3 ? 'DRAFT' : 'LOADED', customerFeeConfirmationRequired: i >= 10 && i < 12,
channelName: i % 2 ? 'SEA' : 'AIR' }))
const calls = []
const stages = ['loaded','declared','cleared','scheduled','delivering','delivered']
const stage = row => row.mainStatus === 'DRAFT' ? 'none' : stages[Number(row.orderId) % stages.length]
const queues = list => ({ all: list.length, fee: list.filter(r => r.customerFeeConfirmationRequired).length,
customs: list.filter(r => r.orderId === '1012').length, draft: list.filter(r => r.mainStatus === 'DRAFT').length })
customs: list.filter(r => r.orderId === '1012').length, draft: list.filter(r => r.mainStatus === 'DRAFT').length, ...Object.fromEntries(stages.map(key => [key, list.filter(r => stage(r) === key).length])) })
function read(path) {
calls.push(path)
const url = new URL(path, 'https://test.invalid'), q = url.searchParams
@@ -36,9 +38,10 @@ function fixture() {
if (q.get('queue') === 'fee') selected = selected.filter(r => r.customerFeeConfirmationRequired)
if (q.get('queue') === 'customs') selected = selected.filter(r => r.orderId === '1012')
if (q.get('queue') === 'draft') selected = selected.filter(r => r.mainStatus === 'DRAFT')
if (stages.includes(q.get('queue'))) selected = selected.filter(r => stage(r) === q.get('queue'))
const number = Number(q.get('page')), size = Number(q.get('size'))
const page = { page: number, size, total: selected.length, pages: Math.ceil(selected.length / size), records: selected.slice((number - 1) * size, number * size).map(r => ({ ...r })) }
return url.pathname.endsWith('/workbench') ? { page, queues: counts, channelNames: ['AIR', 'SEA'] } : page
return url.pathname.endsWith('/workbench') ? { page, queues: counts, channelNames: ['AIR', 'SEA'], progress: page.records.map(row => ({ orderId: row.orderId, stage: stage(row), partial: false })) } : page
}
return { read, calls, rows }
}
@@ -55,6 +58,8 @@ for (const [name, mutate, expected] of [
['customer leakage', r => { (r.page ?? r).records[0].tenantId = '22' }, /Customer scope/],
['duplicate identity', r => { const p = r.page ?? r; if (p.records.length > 1) p.records[1] = p.records[0] }, /duplicate/],
['partial response', r => { (r.page ?? r).records.pop() }, /Truncated/],
['missing progress', r => { if (r.queues) delete r.progress }, /progress coverage/],
['wrong clearing count', r => { if (r.queues) r.queues.cleared = 99 }, /cleared complete page count/],
['wrong fee count', r => { if (r.queues) r.queues.fee = 99 }, /fee count/],
['wrong draft count', r => { if (r.queues) r.queues.draft = 0 }, /draft count/],
['missing channel option', r => { if (r.queues) r.channelNames = ['SEA'] }, /channel options/],