Files
admin-web/src/modules/overseas-warehouse/components/RelabelDocumentsPanel.test.ts
T
2026-10-16 16:52:43 +08:00

38 lines
2.9 KiB
TypeScript

import { mount, flushPromises, enableAutoUnmount } from '@vue/test-utils'
import ElementPlus from 'element-plus'
import { afterEach, describe, expect, it, vi } from 'vitest'
import RelabelDocumentsPanel from './RelabelDocumentsPanel.vue'
import { getRelabelOrder, downloadRelabelDocument, type RelabelDetailDto } from '../api/relabelOrders'
vi.mock('../api/relabelOrders', () => ({ getRelabelOrder: vi.fn(), downloadRelabelDocument: vi.fn() }))
enableAutoUnmount(afterEach)
const detail = { application: { id: '1', relabelNo: 'RL-1', cartonTotalFileId: '11', cartonTotalFileName: '箱唛.pdf', skuTotalFileId: '12', skuTotalFileName: 'SKU.pdf', totalFileId: '12', totalFileName: 'SKU.pdf', shippingLabelFileId: '13', shippingLabelFileName: '面单.pdf' }, items: [{ id: '22', cartonMark: 'BX-1', skuCode: 'SKU-A', relabelFileId: '14', relabelFileName: '明细.pdf' }], history: [] } as RelabelDetailDto
const mountPanel = (value = detail) => mount(RelabelDocumentsPanel, { props: { relabelNo: 'RL-1', detail: value }, global: { plugins: [ElementPlus] } })
describe('贴标附件回显', () => {
it('分别显示两类总文件、面单与箱明细,兼容总文件不重复', async () => {
const wrapper = mountPanel(); await flushPromises()
const rows = wrapper.findAll('.el-table__body tbody tr')
expect(rows).toHaveLength(4)
expect(wrapper.text()).toContain('箱唛.pdf'); expect(wrapper.text()).toContain('SKU.pdf')
expect(wrapper.text()).toContain('面单.pdf'); expect(wrapper.text()).toContain('明细.pdf')
expect(wrapper.text()).toContain('BX-1 / SKU-A')
expect(getRelabelOrder).not.toHaveBeenCalled()
})
it('预览请求使用申请号、文件分类及明细编号,并可重试失败请求', async () => {
vi.mocked(downloadRelabelDocument).mockRejectedValue(new Error('文件暂不可用'))
const wrapper = mountPanel(); await flushPromises()
const rows = wrapper.findAll('.el-table__body tbody tr')
await rows[3]!.findAll('button')[0]!.trigger('click'); await flushPromises()
expect(downloadRelabelDocument).toHaveBeenLastCalledWith('RL-1', '14', 'ITEM', '22')
expect(rows[3]!.find('button').attributes('disabled')).toBeUndefined()
await rows[2]!.findAll('button')[0]!.trigger('click'); await flushPromises()
expect(downloadRelabelDocument).toHaveBeenLastCalledWith('RL-1', '13', 'SHIPPING', undefined)
})
it('资料加载失败可单独重试,不冒充空附件', async () => {
vi.mocked(getRelabelOrder).mockRejectedValueOnce(new Error('资料加载失败')).mockResolvedValueOnce(detail)
const wrapper = mount(RelabelDocumentsPanel, { props: { relabelNo: 'RL-1' }, global: { plugins: [ElementPlus] } }); await flushPromises()
expect(wrapper.get('[role="alert"]').text()).toContain('资料加载失败')
await wrapper.get('[role="alert"] button').trigger('click'); await flushPromises()
expect(wrapper.text()).toContain('箱唛.pdf')
})
})