From daa5d30d16aa00e318c0db93b9074da46929f970 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Thu, 22 Oct 2026 23:21:31 +0800 Subject: [PATCH] test: align review evidence fixtures and verify stale request rejection --- .../DispatchReviewAttachmentsPersistenceTest.java | 3 +++ .../phase4-overseas-return-receipt.mjs | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/dispatch/service/DispatchReviewAttachmentsPersistenceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/dispatch/service/DispatchReviewAttachmentsPersistenceTest.java index 44a1b5cd2..b281f8284 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/dispatch/service/DispatchReviewAttachmentsPersistenceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/dispatch/service/DispatchReviewAttachmentsPersistenceTest.java @@ -19,6 +19,7 @@ class DispatchReviewAttachmentsPersistenceTest { @Test void attachmentsSurviveRejectionAndEditsUntilResubmission() throws Exception { var f=new DispatchAggregatePersistenceTest.Fixture(); var created=f.tx.execute(s->f.service.create(f.actor,f.configured("review-evidence",List.of(f.source(1,"101",501,"ONT8",3))))); + f.prepareAppointmentNumbers(created.dispatchNo()); var submitted=f.tx.execute(s->f.service.submitReview(f.actor,created.dispatchNo(),new DispatchCommands.SubmitReview(created.recordVersion(),"submit",null))); var before=f.repository.find(created.dispatchNo()).getResourcesJson(); var first=new DispatchContracts.ReviewAttachments(List.of(91L),List.of(92L),List.of(93L)); @@ -50,6 +51,7 @@ class DispatchReviewAttachmentsPersistenceTest { @Test void rejectsForeignKindOrMasterLicenseAndKeepsOriginalVersion() throws Exception { var f=new DispatchAggregatePersistenceTest.Fixture(); var created=f.tx.execute(s->f.service.create(f.actor,f.configured("verify-evidence",List.of(f.source(1,"101",501,"ONT8",3))))); + f.prepareAppointmentNumbers(created.dispatchNo()); var submitted=f.tx.execute(s->f.service.submitReview(f.actor,created.dispatchNo(),new DispatchCommands.SubmitReview(created.recordVersion(),"submit",null))); var gateway=(DispatchEvidenceGateway)ReflectionTestUtils.getField(f.service,"evidence"); long id=f.repository.find(created.dispatchNo()).getId(); @@ -69,6 +71,7 @@ class DispatchReviewAttachmentsPersistenceTest { try { var f=new DispatchAggregatePersistenceTest.Fixture(); var created=f.tx.execute(s->f.service.create(f.actor,f.configured("upload-evidence",List.of(f.source(1,"101",501,"ONT8",3))))); + f.prepareAppointmentNumbers(created.dispatchNo()); var file=new MockMultipartFile("file","driver.png","image/png",new byte[]{1}); var kind=DispatchEvidenceGateway.Kind.DRIVER_PHOTO; security.setAuthentication(new TestingAuthenticationToken("operator","","platform:fleet:trip:dispatch-review")); diff --git a/scripts/admin-test-env-modules/phase4-overseas-return-receipt.mjs b/scripts/admin-test-env-modules/phase4-overseas-return-receipt.mjs index 28f1caba1..8194cabf3 100644 --- a/scripts/admin-test-env-modules/phase4-overseas-return-receipt.mjs +++ b/scripts/admin-test-env-modules/phase4-overseas-return-receipt.mjs @@ -288,6 +288,11 @@ async function runWithSession(context, merchantToken) { await reject('签收同键异载荷返回冲突', conflict, () => context.request('POST', `${PDA_RECEIPTS}/confirm`, { ...firstBody, trackingNo: `TRACK-${suffix}-CHANGED`, }, picker.token, {})) + await reject('签收成功后旧实收快照换新键仍拒绝且不重复入账', + response => conflict(response) && response.body?.message?.includes('退货单实收数量已变化'), + () => context.request('POST', `${PDA_RECEIPTS}/confirm`, { + ...firstBody, idempotencyKey: key(context, 'STALE-RECEIPT-NEW-KEY'), + }, picker.token, {})) await reject('超收被拒绝且不得生成费用批次', conflict, async () => { const body = { @@ -461,6 +466,11 @@ async function runWithSession(context, merchantToken) { success(mergeReplay.response) && nonBlank(merged.data?.cartonMark) && id(mergeReplay.data?.cartonMark) === id(merged.data?.cartonMark), trace(mergeReplay.response), OPTIONS) await reject('合箱同键异载荷返回冲突', conflict, () => context.request('POST', '/api/pda/v1/last-leg/return-inventory/cartons/merge-boxes', { ...mergeBody, weight: 3 }, picker.token, {})) + await reject('部分合箱成功后旧库存快照换新键仍拒绝且不重复扣减', + response => conflict(response) && response.body?.message?.includes('来源箱库存已变化'), + () => context.request('POST', '/api/pda/v1/last-leg/return-inventory/cartons/merge-boxes', { + ...mergeBody, idempotencyKey: key(context, 'STALE-MERGE-NEW-KEY'), + }, picker.token, {})) const beforeInvalid = await overseas(context, merchantToken, 'GET', '冻结合箱异常检查前库存快照', query(`${RETURN_INVENTORY}/cartons`, { page: 1, size: 200, returnNo }))