Files
admin-web/src/modules/overseas-warehouse/pages/RelabelOrderDetailView.test.ts
T
2026-10-26 13:43:08 +08:00

67 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { readFileSync } from 'node:fs'
import { resolve } from 'node:path'
import ElementPlus from 'element-plus'
import { flushPromises, mount } from '@vue/test-utils'
import { describe, expect, it, vi } from 'vitest'
import { getRelabelOrder, getRelabelQuantities } from '../api/relabelOrders'
import RelabelOrderDetailView from './RelabelOrderDetailView.vue'
vi.mock('vue-router', () => ({ useRoute: () => ({ params: { orderId: 'RELABEL-1' } }), useRouter: () => ({ push: vi.fn() }) }))
vi.mock('@/core/access/accessPreview', () => ({ useAccessPreviewStore: () => ({ can: () => false }) }))
vi.mock('../api/relabelOrders', async importOriginal => ({
...await importOriginal<typeof import('../api/relabelOrders')>(), getRelabelOrder: vi.fn(), getRelabelQuantities: vi.fn(),
}))
vi.mock('@/modules/overseas-business', () => ({ BusinessDocumentFees: {
name: 'BusinessDocumentFees', props: ['businessType', 'businessNo', 'customerId', 'businessId'], template: '<section>本单费用</section>',
} }))
const source = readFileSync(resolve(process.cwd(), 'src/modules/overseas-warehouse/pages/RelabelOrderDetailView.vue'), 'utf8')
describe('RelabelOrderDetailView', () => {
it('resolves fees by the relabel identity without reusing the original customer order', async () => {
vi.mocked(getRelabelOrder).mockResolvedValue({
application: { id: '9007199254741004', relabelNo: 'RELABEL-1', lastlegOrderId: '9007199254741005', customerOrderNo: 'RETURN-1', chargeAmount: 25, chargeCurrency: 'CNY', walletStatus: 'NOT_REQUIRED' },
items: [], history: [],
})
vi.mocked(getRelabelQuantities).mockRejectedValue(new Error('数量暂不可用'))
const wrapper = mount(RelabelOrderDetailView, { global: { plugins: [ElementPlus], stubs: { AppDialog: true, RelabelDocumentsPanel: true } } })
await flushPromises()
expect(wrapper.findComponent({ name: 'BusinessDocumentFees' }).props()).toEqual({
businessType: 'RELABEL_ORDER', businessNo: 'RELABEL-1', customerId: undefined, businessId: '9007199254741004',
})
expect(wrapper.text()).toContain('原换标费')
expect(wrapper.text()).toContain('25.00 CNY')
expect(wrapper.text()).toContain('无需冻结或扣款')
expect(wrapper.text()).not.toContain('NOT_REQUIRED')
wrapper.unmount()
})
it('renders carton relabel mappings as a row list instead of summary form fields', () => {
expect(source).toContain('<template #content-after>')
expect(source).toContain('<h2>箱唛换标信息</h2>')
expect(source).toContain('v-for="item in detail?.items || []"')
expect(source).toContain('text(item.cartonMark)')
expect(source).toContain('text(item.fbaCartonMark)')
expect(source).not.toContain("{ title: '箱唛换标信息', fields:")
})
it('shows the review state and customer-facing return order and FBA warehouse codes', () => {
expect(source).toContain("PENDING_REVIEW: '待审核'")
expect(source).toContain('value?.application.customerOrderNo || value?.application.lastlegOrderNo')
expect(source).toContain('text(item.destinationFbaWarehouseCode)')
expect(source).not.toContain('item.destinationFbaWarehouseCode || item.destinationWarehouseId')
expect(source).toContain('items.flatMap(relabelSkuCodes)')
expect(source).toContain('v-for="(sku, index) in item.skuItems"')
expect(source).toContain('{{ sku.skuCode }} → {{ sku.newSkuCode }} × {{ sku.quantity }} 件')
})
it('lets platform operators confirm completion or return PDA work for rework', () => {
expect(source).toContain('@click="confirmCompletion"')
expect(source).toContain('确认换标完成')
expect(source).toContain('@click="returnForRework"')
expect(source).toContain('退回重新贴标')
expect(source).toContain('await confirmRelabelCompletion(orderId.value)')
expect(source).toContain('await returnRelabelForRework(orderId.value')
})
})