test(procurement): verify fee source recovery without duplicate debit
This commit is contained in:
+18
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user