92 lines
4.1 KiB
TypeScript
92 lines
4.1 KiB
TypeScript
import { flushPromises, mount } from '@vue/test-utils'
|
|
import ElementPlus from 'element-plus'
|
|
import AppDialog from '@/shared/components/AppDialog.vue'
|
|
import { nextTick } from 'vue'
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import PalletLabelPrintDialog from './PalletLabelPrintDialog.vue'
|
|
|
|
const preparePalletLabels = vi.fn()
|
|
const printPalletLabels = vi.fn()
|
|
|
|
vi.mock('../api/platformLoadingLists', () => ({
|
|
preparePalletLabels: (...args: unknown[]) => preparePalletLabels(...args),
|
|
printPalletLabels: (...args: unknown[]) => printPalletLabels(...args),
|
|
}))
|
|
|
|
describe('PalletLabelPrintDialog', () => {
|
|
beforeEach(() => {
|
|
vi.stubGlobal('ResizeObserver', class { observe() {} unobserve() {} disconnect() {} })
|
|
preparePalletLabels.mockReset().mockResolvedValue({
|
|
planId: '10', planNo: 'LP-1', containerNo: 'HLCU1723867', totalCount: 2,
|
|
groups: [{
|
|
destinationWarehouseCode: 'ACY2', destinationWarehouseInternalCode: '101',
|
|
destinationWarehouseName: 'ACY2', totalCount: 2,
|
|
labels: [
|
|
{ palletCode: 'HLCU1723867-101-001' },
|
|
{ palletCode: 'HLCU1723867-101-002' },
|
|
],
|
|
}],
|
|
})
|
|
})
|
|
|
|
it.each([false, true])('保留按仓补打的PDF范围和文件名,dense=%s', async (dense) => {
|
|
URL.createObjectURL = vi.fn(() => 'blob:pallet-labels')
|
|
URL.revokeObjectURL = vi.fn()
|
|
const downloads: string[] = []
|
|
const click = vi.spyOn(HTMLAnchorElement.prototype, 'click').mockImplementation(function (this: HTMLAnchorElement) { downloads.push(this.download) })
|
|
printPalletLabels.mockReset().mockResolvedValue(new Blob(['pdf'], { type: 'application/pdf' }))
|
|
const wrapper = mount(PalletLabelPrintDialog, { props: { planId: '10', warehouseId: '20', dense }, global: { plugins: [ElementPlus] } })
|
|
await wrapper.get('button').trigger('click')
|
|
await flushPromises()
|
|
const dialog = wrapper.getComponent(AppDialog)
|
|
expect(dialog.props('title')).toBe(dense ? '散货托盘码 · HLCU1723867' : '散货托盘码')
|
|
wrapper.getComponent({ name: 'ElRadioGroup' }).vm.$emit('update:modelValue', 'WAREHOUSE')
|
|
await flushPromises()
|
|
wrapper.getComponent({ name: 'ElInputNumber' }).vm.$emit('update:modelValue', 1)
|
|
if (dense) {
|
|
await dialog.get('[aria-label="展开全屏"]').trigger('click')
|
|
expect(dialog.find('.el-dialog.is-fullscreen').exists()).toBe(true)
|
|
expect(wrapper.getComponent({ name: 'ElInputNumber' }).props('modelValue')).toBe(1)
|
|
}
|
|
expect(dialog.props('confirmDisabled')).toBe(false)
|
|
dialog.vm.$emit('confirm')
|
|
await flushPromises()
|
|
expect(printPalletLabels).toHaveBeenCalledWith('10', '20', 'ACY2', 1)
|
|
expect(downloads).toEqual(['HLCU1723867-托盘码.pdf'])
|
|
expect(URL.revokeObjectURL).toHaveBeenCalledWith('blob:pallet-labels')
|
|
wrapper.unmount()
|
|
click.mockRestore()
|
|
})
|
|
|
|
it('shows the server-generated internal code rule and both warehouse codes', async () => {
|
|
const wrapper = mount(PalletLabelPrintDialog, {
|
|
props: { planId: '10', warehouseId: '20' },
|
|
global: {
|
|
stubs: {
|
|
AppDialog: { template: '<section><slot /></section>' },
|
|
LoadErrorState: true,
|
|
Printer: true,
|
|
'el-button': { template: '<button @click="$emit(\'click\')"><slot /></button>' },
|
|
'el-alert': { props: ['title'], template: '<p>{{ title }}</p>' },
|
|
'el-radio-group': { template: '<div><slot /></div>' },
|
|
'el-radio': { template: '<span><slot /></span>' },
|
|
'el-select': { template: '<div><slot /></div>' },
|
|
'el-option': true,
|
|
'el-input-number': true,
|
|
'el-table': { props: ['data'], template: '<div>{{ data }}</div>' },
|
|
'el-table-column': true,
|
|
},
|
|
},
|
|
})
|
|
await wrapper.get('button').trigger('click')
|
|
await nextTick()
|
|
await nextTick()
|
|
|
|
expect(preparePalletLabels).toHaveBeenCalledWith('10', '20')
|
|
expect(wrapper.text()).toContain('HLCU1723867-FBA地址内部编号-三位序号')
|
|
expect(wrapper.text()).toContain('ACY2')
|
|
expect(wrapper.text()).toContain('101')
|
|
expect(wrapper.text()).toContain('HLCU1723867-101-001')
|
|
})
|
|
})
|