diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/ProcurementFinancePersistenceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/ProcurementFinancePersistenceTest.java index b0f89a4de..f2e69b355 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/ProcurementFinancePersistenceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/ProcurementFinancePersistenceTest.java @@ -129,6 +129,24 @@ class ProcurementFinancePersistenceTest { assertThat(fees.selectById(fee.getId()).getWalletStatus()).isEqualTo("SETTLE_PENDING"); assertThat(jdbc.queryForObject("SELECT status FROM ll_procurement_wallet_attempt WHERE command_event_id=?",String.class,result.commandEventId())).isEqualTo("PENDING"); verify(commands,times(2)).publish(anyString(),anyLong(),anyString(),anyString(),any(),anyString(),anyLong()); + + var recoveredSource=new OverseasFeeSource();recoveredSource.setSourceFeeId(901L); + doReturn(recoveredSource).when(sources).publishSettled(anyString(),anyString(),any(),any(),any()); + handle(result);handle(result); + var recovered=fees.selectById(fee.getId()); + assertThat(recovered.getWalletStatus()).isEqualTo("SETTLED"); + assertThat(recovered.getSourceFeeId()).isEqualTo(901L); + assertThat(recovered.getSettledCommandEventId()).isEqualTo(result.commandEventId()); + assertThat(recovered.getWalletLedgerId()).isEqualTo(result.walletLedgerId()); + assertThat(jdbc.queryForObject("SELECT status FROM ll_procurement_wallet_attempt WHERE command_event_id=?",String.class,result.commandEventId())).isEqualTo("SUCCEEDED"); + assertThat(jdbc.queryForObject("SELECT COUNT(*) FROM ll_procurement_wallet_attempt WHERE fee_id=?",Integer.class,fee.getId())).isEqualTo(2); + verify(sources,times(2)).publishSettled(anyString(),anyString(),any(),any(),argThat(ref->ref.commandEventId().equals(result.commandEventId()))); + verify(commands,times(2)).publish(anyString(),anyLong(),anyString(),anyString(),any(),anyString(),anyLong()); + assertThat(service.sourceLinked(recovered)).isFalse(); + assertThatThrownBy(()->service.requireShipmentReady(11)).hasMessageContaining("来源关联"); + jdbc.update("INSERT INTO ll_event_outbox VALUES('OVERSEAS_PROCUREMENT_FEE','901','PUBLISHED')"); + assertThat(service.sourceLinked(recovered)).isTrue(); + service.requireShipmentReady(11); } @Test void freeSampleDoesNotPublishZeroMoneyAndCannotBeChangedByReplay() {