From a09e8804fb92fd18ff8634ed3b950670c40fa099 Mon Sep 17 00:00:00 2001 From: stdevman91 Date: Thu, 13 Aug 2026 18:07:38 +0300 Subject: [PATCH] Add payout change amount --- pom.xml | 1 + .../handler/oct/OctServerHandler.java | 20 ++++++++++--- .../utils/payout/CardPayoutAction.java | 7 ++++- src/main/resources/fixture/payout.csv | 1 + .../handler/oct/OctServerHandlerTest.java | 29 +++++++++++++++++-- 5 files changed, 51 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 72bd2c7d..13ac17bc 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,7 @@ dev.vality damsel + 1.699-7280b62 dev.vality diff --git a/src/main/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandler.java b/src/main/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandler.java index a52bb34f..6b65ed19 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandler.java +++ b/src/main/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandler.java @@ -31,6 +31,8 @@ @RequiredArgsConstructor public class OctServerHandler implements AdapterSrv.Iface { + private static final int AMOUNT_CHANGE_DIVISOR = 2; + private final CdsService cdsService; private final ErrorMapping errorMapping; private final List cardPayoutList; @@ -48,6 +50,12 @@ public ProcessResult processWithdrawal( Optional cardPayout = PayoutUtils.extractCardPayoutByPan(cardPayoutList, cardData.getPan()); if (cardPayout.isPresent()) { log.info("Found card payout with action {}", cardPayout.get().getAction()); + if (CardPayoutAction.isAmountChanged(cardPayout.get())) { + return createSuccessResult(withdrawal).setNewBody( + new Cash(withdrawal.getBody()) + .setAmount(withdrawal.getBody().getAmount() / AMOUNT_CHANGE_DIVISOR) + ); + } if (CardPayoutAction.isCardFailed(cardPayout.get())) { CardPayoutAction action = CardPayoutAction.findByValue(cardPayout.get().getAction()); log.info("Failed card payout with action {}", action); @@ -56,10 +64,7 @@ public ProcessResult processWithdrawal( } } - TransactionInfo transactionInfo = - DomainPackageCreators.createTransactionInfo(withdrawal.getId(), Collections.emptyMap()); - Intent intent = WithdrawalsProviderAdapterPackageCreators.createFinishIntentSuccess(transactionInfo); - return WithdrawalsProviderAdapterPackageCreators.createProcessResult(intent); + return createSuccessResult(withdrawal); } @Override @@ -102,4 +107,11 @@ private static String getCurrentDateTimeByPattern(Long timestamp) { return Instant.ofEpochMilli(timestamp).toString(); } + private static ProcessResult createSuccessResult(Withdrawal withdrawal) { + TransactionInfo transactionInfo = + DomainPackageCreators.createTransactionInfo(withdrawal.getId(), Collections.emptyMap()); + Intent intent = WithdrawalsProviderAdapterPackageCreators.createFinishIntentSuccess(transactionInfo); + return WithdrawalsProviderAdapterPackageCreators.createProcessResult(intent); + } + } diff --git a/src/main/java/dev/vality/proxy/mocketbank/utils/payout/CardPayoutAction.java b/src/main/java/dev/vality/proxy/mocketbank/utils/payout/CardPayoutAction.java index dca42237..3b311ddd 100644 --- a/src/main/java/dev/vality/proxy/mocketbank/utils/payout/CardPayoutAction.java +++ b/src/main/java/dev/vality/proxy/mocketbank/utils/payout/CardPayoutAction.java @@ -13,7 +13,8 @@ public enum CardPayoutAction { INSUFFICIENT_FUNDS("Insufficient Funds"), INVALID_CARD("Invalid Card"), EXPIRED_CARD("Expired Card"), - UNKNOWN_FAILURE("Unknown Failure"); + UNKNOWN_FAILURE("Unknown Failure"), + CHANGE_AMOUNT("Change Amount"); private static final CardPayoutAction[] FAILED_CARDS = { INSUFFICIENT_FUNDS, @@ -39,4 +40,8 @@ public static boolean isCardFailed(CardPayoutAction action) { return Arrays.asList(FAILED_CARDS).contains(action); } + public static boolean isAmountChanged(CardPayout card) { + return CHANGE_AMOUNT == findByValue(card.getAction()); + } + } diff --git a/src/main/resources/fixture/payout.csv b/src/main/resources/fixture/payout.csv index 4e6c9362..aa68b39c 100644 --- a/src/main/resources/fixture/payout.csv +++ b/src/main/resources/fixture/payout.csv @@ -7,3 +7,4 @@ cardPan, action, paymentSystem 5105105105105100, Expired Card, MasterCard 4111110000000112, Unknown Failure, Visa 5124990000000002, Unknown Failure, MasterCard +4000000000000077, Change Amount, Visa diff --git a/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandlerTest.java b/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandlerTest.java index 67ee6a58..7e485918 100644 --- a/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandlerTest.java +++ b/src/test/java/dev/vality/proxy/mocketbank/handler/oct/OctServerHandlerTest.java @@ -12,9 +12,10 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; import static dev.vality.adapter.common.damsel.WithdrawalsProviderVerification.isSuccess; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; -import static org.springframework.test.util.AssertionErrors.assertTrue; @Slf4j @SpringBootTest @@ -41,7 +42,31 @@ void testProcessWithdrawal() throws Exception { createProxyOptions() ); log.info("Response processWithdrawal {}", result); - assertTrue("Result processWithdrawal isn`t success", isSuccess(result)); + assertTrue(isSuccess(result), "Result processWithdrawal isn`t success"); + } + + @Test + void testProcessWithdrawalWithChangedAmount() throws Exception { + CardData cardData = new CardData() + .setPan("4000000000000077") + .setCardholderName(randomString()); + BankCard bankCard = new BankCard() + .setToken(randomString()) + .setCardholderName(randomString()) + .setBin(randomString()); + when(cdsStorageClient.getCardData(anyString())).thenReturn(cardData); + + var withdrawal = createWithdrawal(bankCard); + ProcessResult result = handler.processWithdrawal( + withdrawal, + Value.str(""), + createProxyOptions() + ); + + assertTrue(isSuccess(result), "Result processWithdrawal isn`t success"); + assertTrue(result.isSetNewBody(), "Result processWithdrawal doesn`t contain new body"); + assertEquals(withdrawal.getBody().getAmount() / 2, result.getNewBody().getAmount()); + assertEquals(withdrawal.getBody().getCurrency(), result.getNewBody().getCurrency()); } }