This commit is contained in:
2026-10-20 11:33:39 +08:00
parent d2f2ecf57a
commit 41a498657c
33 changed files with 909 additions and 88 deletions
@@ -1,6 +1,6 @@
import { flushPromises, shallowMount } from '@vue/test-utils'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { listPlatformUnifiedOrders, updatePlatformUnifiedOrderPlanning } from '@/modules/unified-orders/api/unifiedOrders'
import { getPlatformUnifiedOrderStatusCounts, listPlatformUnifiedOrders, updatePlatformUnifiedOrderPlanning } from '@/modules/unified-orders/api/unifiedOrders'
import { createPlatformExportTask } from '@/modules/downloads'
import { showExportTaskCreatedDialog } from '@/shared/components/exportTaskCreatedDialog'
import { ApiResponseError } from '@/shared/api/http'
@@ -31,7 +31,7 @@ vi.mock('@/modules/unified-orders/api/unifiedOrders', () => ({
approvePlatformUnifiedOrder: vi.fn(),
getPlatformUnifiedOrder: vi.fn(),
listPlatformUnifiedOrderFeeDetails: vi.fn(),
listPlatformUnifiedOrders: vi.fn(),
getPlatformUnifiedOrderStatusCounts: vi.fn().mockResolvedValue({ counts: {} }), listPlatformUnifiedOrders: vi.fn(),
updatePlatformUnifiedOrderPlanning: vi.fn(),
unifiedOrderStatusOptions: [
{ value: 'PENDING_REVIEW', label: '待审核' },
@@ -39,8 +39,8 @@ vi.mock('@/modules/unified-orders/api/unifiedOrders', () => ({
{ value: 'WAIT_SPLIT', label: '待分柜' },
{ value: 'LOADING', label: '装柜中' },
{ value: 'LOADED', label: '装柜完成' },
{ value: 'DELIVERED', label: '派送完成' },
{ value: 'COMPLETED', label: '已完成' },
{ value: 'DELIVERING', label: '派送中' },
{ value: 'SIGNED', label: '签收完成' },
],
}))
@@ -69,12 +69,70 @@ function mountView() {
describe('UnifiedOrdersView list request coordination', () => {
beforeEach(() => {
vi.mocked(getPlatformUnifiedOrderStatusCounts).mockReset().mockResolvedValue({ counts: {} })
vi.mocked(listPlatformUnifiedOrders).mockReset().mockResolvedValue(emptyPage())
vi.mocked(updatePlatformUnifiedOrderPlanning).mockReset()
vi.mocked(createPlatformExportTask).mockReset().mockResolvedValue({ taskName: '国内仓订单', taskNo: 'EXP-1' } as never)
vi.mocked(showExportTaskCreatedDialog).mockReset().mockResolvedValue(false)
})
it('shows only supported counts, keeps all text-only and never scopes counts by status or pagination', async () => {
vi.mocked(getPlatformUnifiedOrderStatusCounts).mockResolvedValue({ counts: { PENDING_REVIEW: 12, WAIT_MEASURE: 0, SIGNED: 3 } })
const wrapper = mountView()
await flushPromises()
const tabs = wrapper.findAll('[role="tab"]')
expect(tabs[0]!.text()).toBe('全部')
expect(tabs[1]!.text()).toBe('待审核(12)')
expect(tabs[2]!.text()).toBe('待测量数据(0)')
expect(tabs[3]!.text()).toBe('测量数据审核')
expect(tabs.at(-1)!.text()).toBe('签收完成(3)')
expect(tabs.map((tab) => tab.text())).not.toContain('派送完成')
expect(tabs.map((tab) => tab.text())).not.toContain('已完成')
await tabs[1]!.trigger('click')
wrapper.getComponent({ name: 'DataTable' }).vm.$emit('update:page', 2)
await flushPromises()
expect(getPlatformUnifiedOrderStatusCounts).toHaveBeenCalledTimes(1)
const toolbar = wrapper.getComponent({ name: 'QueryToolbar' })
toolbar.vm.$emit('update:modelValue', { ...toolbar.props('modelValue'), inboundCode: ' IN-9 ', loaded: 'false' })
toolbar.vm.$emit('search')
await flushPromises()
expect(getPlatformUnifiedOrderStatusCounts).toHaveBeenCalledTimes(2)
const params = vi.mocked(getPlatformUnifiedOrderStatusCounts).mock.lastCall![0]
expect(params).toMatchObject({ inboundCode: 'IN-9', loaded: false })
expect(params).not.toHaveProperty('mainStatus')
expect(params).not.toHaveProperty('page')
expect(params).not.toHaveProperty('size')
toolbar.vm.$emit('reset')
await flushPromises()
expect(getPlatformUnifiedOrderStatusCounts).toHaveBeenCalledTimes(3)
})
it('ignores older count responses and hides stale counts during loading and failures with retry', async () => {
let resolveOld!: (value: { counts: { PENDING_REVIEW: number } }) => void
vi.mocked(getPlatformUnifiedOrderStatusCounts).mockImplementationOnce(() => new Promise((resolve) => { resolveOld = resolve }))
const wrapper = mountView()
await flushPromises()
expect(wrapper.get('[role="tablist"]').attributes('aria-busy')).toBe('true')
expect(wrapper.find('.order-status-count').exists()).toBe(false)
vi.mocked(getPlatformUnifiedOrderStatusCounts).mockResolvedValueOnce({ counts: { PENDING_REVIEW: 7 } })
wrapper.getComponent({ name: 'QueryToolbar' }).vm.$emit('search')
await flushPromises()
resolveOld({ counts: { PENDING_REVIEW: 99 } })
await flushPromises()
expect(wrapper.findAll('[role="tab"]')[1]!.text()).toBe('待审核(7)')
vi.mocked(getPlatformUnifiedOrderStatusCounts).mockRejectedValueOnce(new Error('统计不可用'))
wrapper.getComponent({ name: 'QueryToolbar' }).vm.$emit('search')
await flushPromises()
expect(wrapper.find('.order-status-count').exists()).toBe(false)
expect(wrapper.findComponent({ name: 'DataTable' }).exists()).toBe(true)
expect(wrapper.find('.order-status-feedback').text()).toContain('重试数量')
vi.mocked(getPlatformUnifiedOrderStatusCounts).mockResolvedValueOnce({ counts: { PENDING_REVIEW: 8, MEASUREMENT_REVIEW: 3 } })
await wrapper.findAll('button').find((button) => button.text() === '重试数量')!.trigger('click')
await flushPromises()
expect(wrapper.findAll('[role="tab"]')[1]!.text()).toBe('待审核(8)')
expect(wrapper.findAll('[role="tab"]')[3]!.text()).toBe('测量数据审核(3)')
})
it('loads once initially and once for query, reset, status tab and pagination', async () => {
const wrapper = mountView()
await flushPromises()