test(customs): verify page navigation and refresh recovery
This commit is contained in:
@@ -41,7 +41,7 @@ function harness(t, orders, getDetail = async id => detail(id)) {
|
||||
})
|
||||
const source = readFileSync(new URL('./CustomsDocumentsView.vue', import.meta.url), 'utf8').match(/<script setup lang="ts">([\s\S]*?)<\/script>/)[1]
|
||||
const scope = vue.effectScope()
|
||||
const view = scope.run(() => evaluate(source + '\nexport { load, records, loading, errorMessage, openDetail, selectedOrderId, selectedDetail, dialogOpen, search, queryModel, filteredRecords, queryFields, statusLabel, statusType, updateDetail }', {
|
||||
const view = scope.run(() => evaluate(source + '\nexport { load, records, loading, errorMessage, openDetail, selectedOrderId, selectedDetail, dialogOpen, search, queryModel, filteredRecords, pagedRecords, page, pageSize, queryFields, statusLabel, statusType, updateDetail }', {
|
||||
vue: { ...vue, onMounted() {} },
|
||||
'../utils/customsDocumentsReader': reader,
|
||||
'../api/customs': customsApi,
|
||||
@@ -80,6 +80,64 @@ test('second page failure is explicit and retry does not retain an incomplete re
|
||||
assert.equal(pageCalls.length, 4)
|
||||
})
|
||||
|
||||
test('display pagination reaches the final refund order without refetching or opening the wrong detail', async t => {
|
||||
const { view, calls, pageCalls } = harness(t, Array.from({ length: 21 }, (_, i) => order(`refund-${i}`, 'COMPLETED')))
|
||||
await view.load()
|
||||
assert.equal(view.pagedRecords.value.length, 20)
|
||||
view.page.value = 2
|
||||
assert.deepEqual(view.pagedRecords.value.map(row => row.order.id), ['refund-20'])
|
||||
view.openDetail(view.pagedRecords.value[0])
|
||||
assert.equal(view.selectedOrderId.value, 'refund-20')
|
||||
assert.deepEqual(view.selectedDetail.value.inbounds, [{ orderId: 'refund-20', taxMode: 'TAX_REFUND' }])
|
||||
view.pageSize.value = 10
|
||||
await vue.nextTick()
|
||||
assert.equal(view.page.value, 1)
|
||||
assert.equal(view.pagedRecords.value.length, 10)
|
||||
view.page.value = 3
|
||||
assert.deepEqual(view.pagedRecords.value.map(row => row.order.id), ['refund-20'])
|
||||
assert.equal(pageCalls.length, 1)
|
||||
assert.equal(calls.length, 21)
|
||||
})
|
||||
|
||||
test('searching from a later display page resets pagination and clearing filters restores all documents', async t => {
|
||||
const { view, calls } = harness(t, Array.from({ length: 21 }, (_, i) => order(`refund-${i}`)))
|
||||
await view.load()
|
||||
view.page.value = 2
|
||||
view.queryModel.value.inboundCode = 'IN-refund-20'
|
||||
view.search()
|
||||
await vue.nextTick()
|
||||
assert.equal(view.page.value, 1)
|
||||
assert.deepEqual(view.pagedRecords.value.map(row => row.order.id), ['refund-20'])
|
||||
view.queryModel.value.inboundCode = 'does-not-exist'
|
||||
view.search()
|
||||
await vue.nextTick()
|
||||
assert.equal(view.page.value, 1)
|
||||
assert.equal(view.pagedRecords.value.length, 0)
|
||||
view.queryModel.value.inboundCode = ''
|
||||
view.search()
|
||||
assert.equal(view.filteredRecords.value.length, 21)
|
||||
assert.equal(view.pagedRecords.value.length, 20)
|
||||
assert.equal(calls.length, 21)
|
||||
})
|
||||
|
||||
test('refresh failure on a later page clears stale rows and retry returns to a valid page', async t => {
|
||||
const { view, store } = harness(t, Array.from({ length: 21 }, (_, i) => order(`refund-${i}`)))
|
||||
await view.load()
|
||||
view.page.value = 2
|
||||
store.loadError = '资料列表请求失败'
|
||||
await view.load()
|
||||
await vue.nextTick()
|
||||
assert.equal(view.page.value, 1)
|
||||
assert.equal(view.pagedRecords.value.length, 0)
|
||||
assert.equal(view.errorMessage.value, '资料列表请求失败')
|
||||
store.loadError = ''
|
||||
await view.load()
|
||||
assert.equal(view.page.value, 1)
|
||||
assert.equal(view.pagedRecords.value.length, 20)
|
||||
assert.equal(view.filteredRecords.value.length, 21)
|
||||
assert.equal(view.errorMessage.value, '')
|
||||
})
|
||||
|
||||
test('empty pages, duplicate records and changing totals cannot silently truncate history', async t => {
|
||||
for (const change of [
|
||||
response => response.page === 2 ? { ...response, records: [] } : response,
|
||||
|
||||
Reference in New Issue
Block a user