38 lines
2.9 KiB
TypeScript
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')
|
|
})
|
|
})
|