DeathGun44 commented on code in PR #6084:
URL: https://github.com/apache/fineract/pull/6084#discussion_r3535483993


##########
integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargebackOnPaymentTypeRepaymentTransactionsTest.java:
##########
@@ -22,315 +22,198 @@
 import static 
org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import io.restassured.builder.RequestSpecBuilder;
-import io.restassured.builder.ResponseSpecBuilder;
-import io.restassured.http.ContentType;
-import io.restassured.specification.RequestSpecification;
-import io.restassured.specification.ResponseSpecification;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
 import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Stream;
-import org.apache.fineract.client.models.AdvancedPaymentData;
-import org.apache.fineract.client.models.DelinquencyBucketResponse;
-import org.apache.fineract.client.models.GetLoanProductsProductIdResponse;
+import org.apache.fineract.client.feign.util.CallFailedRuntimeException;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
-import 
org.apache.fineract.client.models.GetLoansLoanIdTransactionsTransactionIdResponse;
-import org.apache.fineract.client.models.PaymentAllocationOrder;
+import org.apache.fineract.client.models.PostLoanProductsRequest;
 import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
 import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse;
 import 
org.apache.fineract.client.models.PostLoansLoanIdTransactionsTransactionIdRequest;
+import org.apache.fineract.client.models.PostLoansRequest;
+import org.apache.fineract.integrationtests.client.feign.FeignLoanTestBase;
+import 
org.apache.fineract.integrationtests.client.feign.modules.LoanRequestBuilders;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanTestData;
 import org.apache.fineract.integrationtests.common.ClientHelper;
 import org.apache.fineract.integrationtests.common.Utils;
-import 
org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder;
-import 
org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
-import 
org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
-import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
 import 
org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
 import 
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
-import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Named;
-import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
-@ExtendWith(LoanTestLifecycleExtension.class)
-public class LoanChargebackOnPaymentTypeRepaymentTransactionsTest {
-
-    private ResponseSpecification responseSpec;
-    private ResponseSpecification responseSpecErr503;
-    private RequestSpecification requestSpec;
-    private ClientHelper clientHelper;
-    private LoanTransactionHelper loanTransactionHelper;
-
-    @BeforeEach
-    public void setup() {
-        Utils.initializeRESTAssured();
-        this.requestSpec = new 
RequestSpecBuilder().setContentType(ContentType.JSON).build();
-        this.requestSpec.header("Authorization", "Basic " + 
Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
-        this.responseSpec = new 
ResponseSpecBuilder().expectStatusCode(200).build();
-        this.responseSpecErr503 = new 
ResponseSpecBuilder().expectStatusCode(503).build();
-        this.loanTransactionHelper = new 
LoanTransactionHelper(this.requestSpec, this.responseSpec);
-        this.clientHelper = new ClientHelper(this.requestSpec, 
this.responseSpec);
-    }
+public class LoanChargebackOnPaymentTypeRepaymentTransactionsTest extends 
FeignLoanTestBase {
 
     @ParameterizedTest
     @MethodSource("loanProductFactory")
-    public void 
loanTransactionChargebackForPaymentTypeRepaymentTransactionTest(LoanProductTestBuilder
 loanProductTestBuilder) {
-        // Loan ExternalId
+    public void 
loanTransactionChargebackForPaymentTypeRepaymentTransactionTest(String 
strategyCode, boolean advancedAllocation) {
         String loanExternalIdStr = UUID.randomUUID().toString();
 
-        // Delinquency Bucket
         final Long delinquencyBucketId = 
DelinquencyBucketsHelper.createDefaultBucket();
-        final DelinquencyBucketResponse delinquencyBucket = 
DelinquencyBucketsHelper.getBucket(delinquencyBucketId);
-
-        // Client and Loan account creation
 
-        final Integer clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
-        final GetLoanProductsProductIdResponse getLoanProductsProductResponse 
= createLoanProduct(loanTransactionHelper,
-                delinquencyBucketId, loanProductTestBuilder);
-        assertNotNull(getLoanProductsProductResponse);
+        final Long clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+        final Long loanProductId = createLoanProduct(strategyCode, 
advancedAllocation, delinquencyBucketId);
 
-        final Integer loanId = createLoanAccount(clientId, 
getLoanProductsProductResponse.getId(), loanExternalIdStr,
-                loanProductTestBuilder.getTransactionProcessingStrategyCode());
+        final Long loanId = createLoanAccount(clientId, loanProductId, 
loanExternalIdStr, strategyCode);
 
-        // make Repayment
-        final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = 
loanTransactionHelper.makeLoanRepayment(loanExternalIdStr,
-                new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM 
yyyy").transactionDate("5 September 2022").locale("en")
-                        .transactionAmount(500.0));
+        final PostLoansLoanIdTransactionsResponse repaymentTransaction_1 = 
makeLoanRepayment(loanExternalIdStr,
+                new 
PostLoansLoanIdTransactionsRequest().dateFormat(LoanTestData.DATETIME_PATTERN).transactionDate("5
 September 2022")
+                        .locale(LoanTestData.LOCALE).transactionAmount(500.0));
 
-        // verify transaction relation and outstanding balance
         reviewLoanTransactionRelations(loanId, 
repaymentTransaction_1.getResourceId(), 0, Double.valueOf("500.00"));
 
-        GetLoansLoanIdResponse loanDetails = 
loanTransactionHelper.getLoanDetails((long) loanId);
+        GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
         assertNotNull(loanDetails);
         assertTrue(loanDetails.getStatus().getActive());
         assertNotNull(loanDetails.getSummary());
         assertEquals(500.0, 
Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
 
-        // chargeback on Repayment
-        PostLoansLoanIdTransactionsResponse chargebackTransactionResponse = 
loanTransactionHelper.chargebackLoanTransaction(
-                loanExternalIdStr, repaymentTransaction_1.getResourceId(),
-                new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale("en").transactionAmount(500.0).paymentTypeId(1L));
+        PostLoansLoanIdTransactionsResponse chargebackTransactionResponse = 
chargebackLoanTransaction(loanExternalIdStr,
+                repaymentTransaction_1.getResourceId(), new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale(LoanTestData.LOCALE)
+                        .transactionAmount(500.0).paymentTypeId(1L));
 
-        // verify transaction relation and outstanding balance
         assertNotNull(chargebackTransactionResponse);
         reviewLoanTransactionRelations(loanId, 
repaymentTransaction_1.getResourceId(), 1, Double.valueOf("500.00"));
         reviewLoanTransactionRelations(loanId, 
chargebackTransactionResponse.getResourceId(), 0, Double.valueOf("1000.00"));
-        loanDetails = loanTransactionHelper.getLoanDetails((long) loanId);
+        loanDetails = getLoanDetails(loanId);
         assertNotNull(loanDetails);
         assertTrue(loanDetails.getStatus().getActive());
         assertNotNull(loanDetails.getSummary());
         assertEquals(1000.0, 
Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
 
-        // Goodwill Credit
-        final PostLoansLoanIdTransactionsResponse goodwillCredit_1 = 
loanTransactionHelper.makeGoodwillCredit((long) loanId,
-                new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM 
yyyy").transactionDate("6 September 2022").locale("en")
-                        .transactionAmount(200.0));
+        final PostLoansLoanIdTransactionsResponse goodwillCredit_1 = 
makeGoodwillCredit(loanId,
+                new 
PostLoansLoanIdTransactionsRequest().dateFormat(LoanTestData.DATETIME_PATTERN).transactionDate("6
 September 2022")
+                        .locale(LoanTestData.LOCALE).transactionAmount(200.0));
 
-        // verify transaction relation and outstanding balance
         reviewLoanTransactionRelations(loanId, 
goodwillCredit_1.getResourceId(), 0, Double.valueOf("300.00"));
 
-        loanDetails = loanTransactionHelper.getLoanDetails((long) loanId);
+        loanDetails = getLoanDetails(loanId);
         assertNotNull(loanDetails);
         assertTrue(loanDetails.getStatus().getActive());
         assertNotNull(loanDetails.getSummary());
         assertEquals(800.0, 
Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
 
-        // chargeback on Goodwill Credit Transaction
-        chargebackTransactionResponse = 
loanTransactionHelper.chargebackLoanTransaction(loanExternalIdStr, 
goodwillCredit_1.getResourceId(),
-                new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale("en").transactionAmount(200.0).paymentTypeId(1L));
+        chargebackTransactionResponse = 
chargebackLoanTransaction(loanExternalIdStr, goodwillCredit_1.getResourceId(),
+                new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale(LoanTestData.LOCALE).transactionAmount(200.0)
+                        .paymentTypeId(1L));
 
-        // verify transaction relation and outstanding balance
         assertNotNull(chargebackTransactionResponse);
         reviewLoanTransactionRelations(loanId, 
goodwillCredit_1.getResourceId(), 1, Double.valueOf("300.00"));
         reviewLoanTransactionRelations(loanId, 
chargebackTransactionResponse.getResourceId(), 0, Double.valueOf("1000.00"));
 
-        // Payout Refund
-
-        final PostLoansLoanIdTransactionsResponse payoutRefund_1 = 
loanTransactionHelper.makePayoutRefund((long) loanId,
-                new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM 
yyyy").transactionDate("7 September 2022").locale("en")
-                        .transactionAmount(300.0));
+        final PostLoansLoanIdTransactionsResponse payoutRefund_1 = 
makePayoutRefund(loanId,
+                new 
PostLoansLoanIdTransactionsRequest().dateFormat(LoanTestData.DATETIME_PATTERN).transactionDate("7
 September 2022")
+                        .locale(LoanTestData.LOCALE).transactionAmount(300.0));
 
-        // verify transaction relation and outstanding balance
         reviewLoanTransactionRelations(loanId, payoutRefund_1.getResourceId(), 
0, Double.valueOf("0.00"));
 
-        loanDetails = loanTransactionHelper.getLoanDetails((long) loanId);
+        loanDetails = getLoanDetails(loanId);
         assertNotNull(loanDetails);
         assertTrue(loanDetails.getStatus().getActive());
         assertNotNull(loanDetails.getSummary());
         assertEquals(700.0, 
Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
 
-        // chargeback on Payout Refund Transaction
-        chargebackTransactionResponse = 
loanTransactionHelper.chargebackLoanTransaction(loanExternalIdStr, 
payoutRefund_1.getResourceId(),
-                new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale("en").transactionAmount(300.0).paymentTypeId(1L));
+        chargebackTransactionResponse = 
chargebackLoanTransaction(loanExternalIdStr, payoutRefund_1.getResourceId(),
+                new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale(LoanTestData.LOCALE).transactionAmount(300.0)
+                        .paymentTypeId(1L));
 
-        // verify transaction relation and outstanding balance
         assertNotNull(chargebackTransactionResponse);
         reviewLoanTransactionRelations(loanId, payoutRefund_1.getResourceId(), 
1, Double.valueOf("0.00"));
         reviewLoanTransactionRelations(loanId, 
chargebackTransactionResponse.getResourceId(), 0, Double.valueOf("1000.00"));
 
-        loanDetails = loanTransactionHelper.getLoanDetails((long) loanId);
+        loanDetails = getLoanDetails(loanId);
         assertNotNull(loanDetails);
         assertTrue(loanDetails.getStatus().getActive());
         assertNotNull(loanDetails.getSummary());
         assertEquals(1000.0, 
Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
 
-        // Merchant Issued Refund
+        final PostLoansLoanIdTransactionsResponse merchantIssuedRefund_1 = 
makeMerchantIssuedRefund(loanId,
+                new 
PostLoansLoanIdTransactionsRequest().dateFormat(LoanTestData.DATETIME_PATTERN).transactionDate("8
 September 2022")
+                        .locale(LoanTestData.LOCALE).transactionAmount(100.0));
 
-        final PostLoansLoanIdTransactionsResponse merchantIssuedRefund_1 = 
loanTransactionHelper.makeMerchantIssuedRefund((long) loanId,
-                new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM 
yyyy").transactionDate("8 September 2022").locale("en")
-                        .transactionAmount(100.0));
-
-        // verify transaction relation and outstanding balance
         reviewLoanTransactionRelations(loanId, 
merchantIssuedRefund_1.getResourceId(), 0, Double.valueOf("0.00"));
 
-        loanDetails = loanTransactionHelper.getLoanDetails((long) loanId);
+        loanDetails = getLoanDetails(loanId);
         assertNotNull(loanDetails);
         assertTrue(loanDetails.getStatus().getActive());
         assertNotNull(loanDetails.getSummary());
         assertEquals(900.0, 
Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
 
-        // chargeback on Merchant Issued Refund Transaction
-        chargebackTransactionResponse = 
loanTransactionHelper.chargebackLoanTransaction(loanExternalIdStr,
-                merchantIssuedRefund_1.getResourceId(),
-                new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale("en").transactionAmount(100.0));
+        chargebackTransactionResponse = 
chargebackLoanTransaction(loanExternalIdStr, 
merchantIssuedRefund_1.getResourceId(),
+                new 
PostLoansLoanIdTransactionsTransactionIdRequest().locale(LoanTestData.LOCALE).transactionAmount(100.0));
 
-        // verify transaction relation and outstanding balance
         assertNotNull(chargebackTransactionResponse);
         reviewLoanTransactionRelations(loanId, 
merchantIssuedRefund_1.getResourceId(), 1, Double.valueOf("0.00"));
         reviewLoanTransactionRelations(loanId, 
chargebackTransactionResponse.getResourceId(), 0, Double.valueOf("1000.00"));
 
-        loanDetails = loanTransactionHelper.getLoanDetails((long) loanId);
+        loanDetails = getLoanDetails(loanId);
         assertNotNull(loanDetails);
         assertTrue(loanDetails.getStatus().getActive());
         assertNotNull(loanDetails.getSummary());
         assertEquals(1000.0, 
Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
-
     }
 
     @ParameterizedTest
     @MethodSource("loanProductFactory")
-    public void 
loanChargebackNotAllowedForReversedPaymentTypeRepaymentTest(LoanProductTestBuilder
 loanProductTestBuilder) {
-        // Loan ExternalId
+    public void 
loanChargebackNotAllowedForReversedPaymentTypeRepaymentTest(String 
strategyCode, boolean advancedAllocation) {
         String loanExternalIdStr = UUID.randomUUID().toString();
 
-        // Delinquency Bucket
         final Long delinquencyBucketId = 
DelinquencyBucketsHelper.createDefaultBucket();
-        final DelinquencyBucketResponse delinquencyBucket = 
DelinquencyBucketsHelper.getBucket(delinquencyBucketId);
-
-        // Client and Loan account creation
 
-        final Integer clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue();
-        final GetLoanProductsProductIdResponse getLoanProductsProductResponse 
= createLoanProduct(loanTransactionHelper,
-                delinquencyBucketId, loanProductTestBuilder);
-        assertNotNull(getLoanProductsProductResponse);
+        final Long clientId = 
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+        final Long loanProductId = createLoanProduct(strategyCode, 
advancedAllocation, delinquencyBucketId);
 
-        final Integer loanId = createLoanAccount(clientId, 
getLoanProductsProductResponse.getId(), loanExternalIdStr,
-                loanProductTestBuilder.getTransactionProcessingStrategyCode());
+        final Long loanId = createLoanAccount(clientId, loanProductId, 
loanExternalIdStr, strategyCode);
 
-        // Merchant Refund
-        final PostLoansLoanIdTransactionsResponse merchantIssuedRefund_2 = 
loanTransactionHelper.makeMerchantIssuedRefund((long) loanId,
-                new PostLoansLoanIdTransactionsRequest().dateFormat("dd MMMM 
yyyy").transactionDate("8 September 2022").locale("en")
-                        .transactionAmount(50.0));
+        final PostLoansLoanIdTransactionsResponse merchantIssuedRefund_2 = 
makeMerchantIssuedRefund(loanId,
+                new 
PostLoansLoanIdTransactionsRequest().dateFormat(LoanTestData.DATETIME_PATTERN).transactionDate("8
 September 2022")
+                        .locale(LoanTestData.LOCALE).transactionAmount(50.0));
 
-        // reverse Merchant Refund
-        loanTransactionHelper.reverseRepayment(loanId, 
merchantIssuedRefund_2.getResourceId().intValue(), "8 September 2022");
-
-        // apply Chargeback should give 503 error
-        final Long chargebackTransactionId = 
loanTransactionHelper.applyChargebackTransaction(loanId,
-                merchantIssuedRefund_2.getResourceId(), "50.00", 1, 
responseSpecErr503);
+        reverseRepayment(loanId, merchantIssuedRefund_2.getResourceId(), "8 
September 2022");
 
+        CallFailedRuntimeException exception = 
assertThrows(CallFailedRuntimeException.class,
+                () -> applyChargebackTransaction(loanId, 
merchantIssuedRefund_2.getResourceId(), 50.0, 1L));

Review Comment:
   Fixed! now getPaymentTypeId(1), matching the original scenario's second 
payment type.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to