fix: align audit and dispatch workflows and release failed requests
This commit is contained in:
@@ -51,16 +51,16 @@ it('invalidates preview when replacement or trip version changes', async () => {
|
||||
await w.setProps({ detail: { ...detail, trip: { ...detail.trip, recordVersion: 8 } } }); await flushPromises()
|
||||
expect(w.text()).not.toContain('确认实际交接')
|
||||
})
|
||||
it('retries exactly the original request after an unknown confirmation response', async () => {
|
||||
it('releases failed confirmation and submits a fresh request', async () => {
|
||||
vi.mocked(api.confirmTripHandover).mockRejectedValueOnce(new Error('network unknown')).mockResolvedValueOnce(record)
|
||||
const w = mount(); await flushPromises()
|
||||
w.findAllComponents({ name: 'ElInput' })[0]!.vm.$emit('update:modelValue', '实际交接点')
|
||||
await button(w, '核对交接货物').trigger('click'); await flushPromises()
|
||||
await button(w, '确认实际交接').trigger('click'); await flushPromises()
|
||||
const first = vi.mocked(api.confirmTripHandover).mock.calls[0]
|
||||
expect(w.text()).toContain('上次交接结果尚待确认')
|
||||
await button(w, '重试原交接请求').trigger('click'); await flushPromises()
|
||||
expect(vi.mocked(api.confirmTripHandover).mock.calls[1]).toEqual(first)
|
||||
expect(w.text()).not.toContain('上次交接结果尚待确认')
|
||||
await button(w, '确认实际交接').trigger('click'); await flushPromises()
|
||||
expect(vi.mocked(api.confirmTripHandover).mock.calls[1]).toEqual([first![0], { ...first![1], idempotencyKey: expect.any(String) }]); expect(vi.mocked(api.confirmTripHandover).mock.calls[1]![1].idempotencyKey).not.toBe(first![1].idempotencyKey)
|
||||
expect(w.emitted('saved')).toHaveLength(1)
|
||||
})
|
||||
it('ignores old trip response after switching scope', async () => {
|
||||
@@ -70,7 +70,7 @@ it('ignores old trip response after switching scope', async () => {
|
||||
complete({ records: [{ ...record, handoverNo: 'OLD-RESULT' }], page: 1, size: 10, total: 1, pages: 1 }); await flushPromises()
|
||||
expect(w.findComponent({ name: 'DataTable' }).props('data')[0].handoverNo).toBe('HO-ONE')
|
||||
})
|
||||
it('retains the original old-driver release request when its response is unknown', async () => {
|
||||
it('releases failed old-driver command and submits a fresh request', async () => {
|
||||
vi.mocked(api.releaseHandoverResource).mockRejectedValueOnce(new Error('unknown response')).mockResolvedValueOnce({ ...record, recordVersion: 1, driverRelease: { actualEndAt: date, location: '结束地点', vehicleStatus: null } })
|
||||
const w = mount(); await w.setProps({ detail: { ...detail, trip: { ...detail.trip, vehicleId: '12', driverId: '22', recordVersion: 8 } } }); await flushPromises()
|
||||
await button(w, '结束原司机任务').trigger('click'); await flushPromises()
|
||||
@@ -78,11 +78,11 @@ it('retains the original old-driver release request when its response is unknown
|
||||
await button(w, '确认原资源任务结束').trigger('click'); await flushPromises()
|
||||
const first = vi.mocked(api.releaseHandoverResource).mock.calls[0]
|
||||
expect(first?.[2].resourceKind).toBe('DRIVER'); expect(first?.[2].vehicleStatus).toBeUndefined()
|
||||
expect(w.text()).toContain('上次任务结束结果尚待确认')
|
||||
await button(w, '重试原任务结束请求').trigger('click'); await flushPromises()
|
||||
expect(vi.mocked(api.releaseHandoverResource).mock.calls[1]).toEqual(first)
|
||||
expect(w.text()).not.toContain('上次任务结束结果尚待确认')
|
||||
await button(w, '确认原资源任务结束').trigger('click'); await flushPromises()
|
||||
expect(vi.mocked(api.releaseHandoverResource).mock.calls[1]).toEqual([first![0], first![1], { ...first![2], idempotencyKey: expect.any(String) }]); expect(vi.mocked(api.releaseHandoverResource).mock.calls[1]![2].idempotencyKey).not.toBe(first![2].idempotencyKey)
|
||||
})
|
||||
it('reloads the handover version after a definite release conflict', async () => {
|
||||
it('preserves inputs and releases the form without automatic reload after a conflict', async () => {
|
||||
vi.mocked(api.releaseHandoverResource).mockRejectedValueOnce(new ApiResponseError('交接记录已变化', 'A0409')).mockResolvedValueOnce({ ...record, recordVersion: 2 })
|
||||
const w = mount(); await w.setProps({ detail: { ...detail, trip: { ...detail.trip, vehicleId: '12', driverId: '22', recordVersion: 8 } } }); await flushPromises()
|
||||
await button(w, '结束原司机任务').trigger('click'); await flushPromises()
|
||||
@@ -90,6 +90,6 @@ it('reloads the handover version after a definite release conflict', async () =>
|
||||
vi.mocked(api.listTripHandovers).mockResolvedValue({ records: [{ ...record, recordVersion: 1 }], page: 1, size: 10, total: 1, pages: 1 })
|
||||
await button(w, '确认原资源任务结束').trigger('click'); await flushPromises()
|
||||
await button(w, '确认原资源任务结束').trigger('click'); await flushPromises()
|
||||
expect(vi.mocked(api.releaseHandoverResource).mock.calls[1]?.[2].recordVersion).toBe(1)
|
||||
expect(vi.mocked(api.releaseHandoverResource).mock.calls[1]?.[2].recordVersion).toBe(record.recordVersion)
|
||||
expect(vi.mocked(api.releaseHandoverResource).mock.calls[1]?.[2].idempotencyKey).not.toBe(vi.mocked(api.releaseHandoverResource).mock.calls[0]?.[2].idempotencyKey)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user