import { beforeEach, describe, expect, it, vi } from 'vitest';
|
import { getDataInterfaceDataSelect } from '#/api/systemData/dataInterface';
|
import { buildDmsPrintBarcode, createDmsPrintBarcodeBuilder } from '../dmsPrintBarcode';
|
|
vi.mock('#/api/systemData/dataInterface', () => ({ getDataInterfaceDataSelect: vi.fn() }));
|
const request = vi.mocked(getDataInterfaceDataSelect);
|
const number = { serialNumber: "SERIAL'1", countSerialNumber: '20260001' };
|
beforeEach(() => vi.resetAllMocks());
|
describe('shared online print barcode interface', () => {
|
it('passes native parameters and fetches updated text again on the next operation', async () => {
|
const builder = createDmsPrintBarcodeBuilder('format-interface');
|
for (const barText of ['打印流水号: SERIAL', '流水: SERIAL']) {
|
request.mockResolvedValueOnce({ code: 200, data: { list: [{ barValue: number.serialNumber, barText }] } });
|
expect(await buildDmsPrintBarcode(number, builder)).toEqual([{ barValue: number.serialNumber, barText }]);
|
}
|
expect(request).toHaveBeenCalledTimes(2);
|
expect(request).toHaveBeenLastCalledWith({ interfaceId: 'format-interface', currentPage: 1, pageSize: 2, paramList: [
|
{ field: 'dayin_liushuihao', defaultValue: "SERIAL'1" },
|
{ field: 'jishu_liushuihao', defaultValue: '20260001' },
|
] });
|
});
|
it('preserves historical serials with an empty count parameter', async () => {
|
request.mockResolvedValue({ code: 200, data: { list: [{ barValue: 'old', barText: '打印流水号: old' }] } });
|
expect(await buildDmsPrintBarcode({ serialNumber: 'old' }, createDmsPrintBarcodeBuilder('format-interface'))).toEqual([{ barValue: 'old', barText: '打印流水号: old' }]);
|
expect(request.mock.calls[0]![0].paramList[1].defaultValue).toBe('');
|
});
|
it.each([
|
{ code: 500, data: { list: [] } },
|
{ code: 200, data: { list: [] } },
|
{ code: 200, data: { list: [{}, {}] } },
|
{ code: 200, data: { list: [{ barValue: 'changed', barText: 'text' }] } },
|
{ code: 200, data: { list: [{ barValue: number.serialNumber, barText: '' }] } },
|
{ code: 200, data: { list: [{ barValue: number.serialNumber, barText: 'text', page: 1 }] } },
|
])('rejects malformed interface result without default-format fallback (%j)', async (response) => {
|
request.mockResolvedValue(response);
|
await expect(buildDmsPrintBarcode(number, createDmsPrintBarcodeBuilder('format-interface'))).rejects.toThrow();
|
});
|
it('retries after a failed request instead of caching the rejection', async () => {
|
const builder = createDmsPrintBarcodeBuilder('format-interface');
|
request.mockRejectedValueOnce(new Error('网络错误'));
|
await expect(builder(number)).rejects.toThrow('网络错误');
|
request.mockResolvedValueOnce({ code: 200, data: { list: [{ barValue: number.serialNumber, barText: '恢复' }] } });
|
expect(await builder(number)).toEqual([{ barValue: number.serialNumber, barText: '恢复' }]);
|
});
|
});
|