This commit is contained in:
2026-10-09 17:36:34 +08:00
parent 07ba9fcb7c
commit 9891ac3e29
8 changed files with 99 additions and 21 deletions
@@ -11,7 +11,8 @@ const row = (id, mainStatus = 'LOADED') => ({ orderId: String(id), orderNo: `FL-
function result(page = 1, size = 10, total = 215) {
return {
page: { page, size, total, pages: Math.ceil(total / size), records: Array.from({ length: Math.min(size, Math.max(0, total - (page - 1) * size)) }, (_, i) => row((page - 1) * size + i + 1)) },
queues: { all: total, fee: 2, customs: 1, draft: 3 }, channelNames: ['AIR', 'SEA'],
queues: { all: total, fee: 2, customs: 1, draft: 3, loaded: 0, declared: 0, cleared: 0, scheduled: 0, delivering: 0, delivered: 0 }, channelNames: ['AIR', 'SEA'],
progress: Array.from({ length: Math.min(size, Math.max(0, total - (page - 1) * size)) }, (_, i) => ({ orderId: String((page - 1) * size + i + 1), stage: 'loaded', partial: false })),
}
}
function deferred() { let resolve, reject; const promise = new Promise((a, b) => { resolve = a; reject = b }); return { promise, resolve, reject } }
@@ -44,7 +45,7 @@ test('loads beyond 200 with server totals and forwards every filter using one re
assert.equal(h.store.orders[0].id, '201')
assert.equal(h.store.total, 215)
assert.deepEqual(h.calls, [query])
assert.deepEqual(h.store.queueCounts, { all: 215, fee: 2, customs: 1, draft: 3 })
assert.deepEqual(h.store.queueCounts, { all: 215, fee: 2, customs: 1, draft: 3, loaded: 0, declared: 0, cleared: 0, scheduled: 0, delivering: 0, delivered: 0 })
assert.deepEqual(h.store.queryChannelNames, ['AIR', 'SEA'])
await h.store.load({ page: 22, size: 10 })
assert.deepEqual(h.store.orders.map(item => item.id), ['211', '212', '213', '214', '215'])
@@ -109,9 +110,24 @@ test('draft and cancelled rows retain authoritative versions; off-page detail ca
test('queue total is checked against the selected queue rather than all orders', async t => {
const response = result(1, 10, 2)
response.queues = { all: 215, fee: 2, customs: 1, draft: 3 }
response.queues = { all: 215, fee: 2, customs: 1, draft: 3, loaded: 0, declared: 0, cleared: 0, scheduled: 0, delivering: 0, delivered: 0 }
const h = harness(t, () => response)
await h.store.load({ queue: 'fee' })
assert.equal(h.store.total, 2); assert.equal(h.store.queueCounts.all, 215)
assert.equal(h.store.loadError, '')
})
test('retains server progress and rejects missing or foreign progress without inferring milestones', async t => {
let response = result()
response.progress[0] = { orderId: '1', stage: 'scheduled', partial: true }
const h = harness(t, () => response)
await h.store.load()
assert.deepEqual(h.store.orderProgress['1'], response.progress[0])
response = result(); response.progress[0].orderId = 'foreign'
await h.store.load()
assert.match(h.store.loadError, /分页数据不完整/)
assert.deepEqual(h.store.orderProgress, {})
response = result(); delete response.queues.cleared
await h.store.load(); assert.match(h.store.loadError, /分页数据不完整/)
})