From 68b0f8bdf94c340cc3d0521c9d244bdf0eef7b96 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 25 Aug 2026 20:34:52 +0800 Subject: [PATCH] test(admin): align booking link regression facts --- .../pages/ContainersView.test.ts | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/modules/container-loading/pages/ContainersView.test.ts b/src/modules/container-loading/pages/ContainersView.test.ts index 8871e7d4..1c066838 100644 --- a/src/modules/container-loading/pages/ContainersView.test.ts +++ b/src/modules/container-loading/pages/ContainersView.test.ts @@ -266,12 +266,38 @@ describe('ContainersView', () => { expect(source).not.toContain('v-model="form.maxWeightKg"') }) - it('keeps OB-260825-0183 selectable for CAB-260825-0215 when only capacity snapshots differ and blocks duplicate waves', async () => { - let resolveCandidates!: (value: Awaited>) => void + it('filters OB-260825-0183 for CAB-260825-0215 because the real warehouses differ', async () => { vi.mocked(listContainers).mockResolvedValue({ records: [{ id: '215', planId: null, bookingNo: 'CB-260825-0215', cabinetNo: 'CAB-260825-0215', containerNo: null, - sourceType: 'SIMULATION', oceanBookingId: null, warehouseId: '8', warehouseName: '义乌仓', - channelCode: 'ZBYHK', channelName: '美森正班海卡包税', containerType: '45HC', planStatus: 'WAIT_LOADING', + sourceType: 'SIMULATION', oceanBookingId: null, warehouseId: '193000000000200002', warehouseName: '东莞仓', + channelCode: 'EXX_RAIL_NY', channelName: '纽约铁路', containerType: '45HC', planStatus: 'EDITING', + capacityCbm: 86, maxWeightKg: 29000, version: 7, + }], page: 1, size: 20, total: 1, pages: 1 } as never) + vi.mocked(listOceanBookingLinkCandidates).mockResolvedValueOnce({ records: [], page: 1, size: 200, total: 0, pages: 0 }) + const router = createTestRouter() + await router.push('/'); await router.isReady() + const wrapper = mount(ContainersView, { attachTo: document.body, global: { plugins: [ElementPlus, router] } }) + await flushPromises() + await wrapper.find('button[aria-label="更多货柜操作"]').trigger('click') + await flushPromises() + Array.from(document.body.querySelectorAll('.el-dropdown-menu__item')) + .filter((item) => item.textContent?.includes('关联已放舱订舱')).at(-1)!.click() + await flushPromises() + + expect(listOceanBookingLinkCandidates).toHaveBeenCalledWith({ warehouseId: '193000000000200002', channelCode: 'EXX_RAIL_NY', containerType: '45HC', page: 1, size: 200 }) + expect((wrapper.vm as unknown as { linkCandidates: unknown[] }).linkCandidates).toEqual([]) + expect(readFileSync(resolve(process.cwd(), 'src/modules/container-loading/pages/ContainersView.vue'), 'utf8')) + .toContain('暂无符合当前装柜仓库、物流渠道和柜型的已放舱需求') + expect(getOceanBooking).not.toHaveBeenCalled() + wrapper.unmount() + }) + + it('keeps a three-field match selectable when only capacity snapshots differ and blocks duplicate waves', async () => { + let resolveCandidates!: (value: Awaited>) => void + vi.mocked(listContainers).mockResolvedValue({ records: [{ + id: '315', planId: null, bookingNo: 'CB-CAPACITY-SNAPSHOT', cabinetNo: 'CAB-CAPACITY-SNAPSHOT', containerNo: null, + sourceType: 'SIMULATION', oceanBookingId: null, warehouseId: '193000000000200002', warehouseName: '东莞仓', + channelCode: 'EXX_RAIL_NY', channelName: '纽约铁路', containerType: '45HC', planStatus: 'WAIT_LOADING', capacityCbm: 86, maxWeightKg: 29000, version: 7, }], page: 1, size: 20, total: 1, pages: 1 } as never) vi.mocked(listOceanBookingLinkCandidates).mockReturnValueOnce(new Promise((resolve) => { resolveCandidates = resolve })) @@ -288,13 +314,11 @@ describe('ContainersView', () => { linkAction.click() expect(listOceanBookingLinkCandidates).toHaveBeenCalledTimes(1) - expect(listOceanBookingLinkCandidates).toHaveBeenCalledWith({ warehouseId: '8', channelCode: 'ZBYHK', containerType: '45HC', page: 1, size: 200 }) + expect(listOceanBookingLinkCandidates).toHaveBeenCalledWith({ warehouseId: '193000000000200002', channelCode: 'EXX_RAIL_NY', containerType: '45HC', page: 1, size: 200 }) expect(getOceanBooking).not.toHaveBeenCalled() - expect(readFileSync(resolve(process.cwd(), 'src/modules/container-loading/pages/ContainersView.vue'), 'utf8')) - .toContain('暂无符合当前装柜仓库、物流渠道和柜型的已放舱需求') - resolveCandidates({ records: [{ oceanBookingId: '183', bookingNo: 'OB-260825-0183', requirementId: '45183', containerType: '45HC', capacityCbm: 85, maxWeightKg: 28500, requiredQuantity: 2, allocatedQuantity: 1, remainingQuantity: 1, customerName: '客户', warehouseName: '义乌仓', channelName: '美森正班海卡包税' }], page: 1, size: 200, total: 1, pages: 1 }) + resolveCandidates({ records: [{ oceanBookingId: '315', bookingNo: 'OB-CAPACITY-SNAPSHOT', requirementId: '45315', containerType: '45HC', capacityCbm: 85, maxWeightKg: 28500, requiredQuantity: 1, allocatedQuantity: 0, remainingQuantity: 1, customerName: '客户', warehouseName: '东莞仓', channelName: '纽约铁路' }], page: 1, size: 200, total: 1, pages: 1 }) await flushPromises() - expect(document.body.textContent).toContain('OB-260825-0183 · 45HC × 1') + expect(document.body.textContent).toContain('OB-CAPACITY-SNAPSHOT · 45HC × 1') expect((wrapper.vm as unknown as { linkCandidates: Array<{ disabled: boolean }> }).linkCandidates[0]?.disabled).toBe(false) wrapper.unmount() })