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(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");
|
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());
|
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() {
|
@Test void freeSampleDoesNotPublishZeroMoneyAndCannotBeChangedByReplay() {
|
||||||
|
|||||||
Reference in New Issue
Block a user