You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@fineract.apache.org by "Krishna Mewara (Jira)" <ji...@apache.org> on 2026/08/24 11:33:00 UTC
[jira] [Created] (FINERACT-2779) Remove REST-assured and hand-built JSON from FeignLoanHelper
Krishna Mewara created FINERACT-2779:
----------------------------------------
Summary: Remove REST-assured and hand-built JSON from FeignLoanHelper
Key: FINERACT-2779
URL: https://issues.apache.org/jira/browse/FINERACT-2779
Project: Apache Fineract
Issue Type: Improvement
Components: Test
Affects Versions: 1.15.0
Reporter: Krishna Mewara
Assignee: Krishna Mewara
This refactor addresses issues in {{{}FeignLoanHelper{}}}, which previously relied on REST-assured for some operations and hand-built JSON strings for others. This defeated the purpose of the Feign migration, as JSON was parsed straight back into a request model before being sent-costing unnecessary round trips and losing compile-time safety.
h3. Key Test Modifications
* *REST-assured completely removed:* The loan apply, approve, disburse, disburse-to-savings, and reschedule paths no longer build their own request specs or use hard-coded URLs. They now use the generated Feign client with typed request models. There are zero REST-assured references left anywhere under the Feign test folder.
* *JSON loan product paths removed:* Methods that relied on deserializing JSON strings (e.g., {{{}createLoanProductFromJson{}}}, {{{}getLoanProductError{}}}, and {{{}getLoanProductId{}}}) have been eliminated.
* *Typed request builders introduced:* {{LoanProductTestBuilder}} now offers {{{}buildRequest(){}}}, a typed counterpart to {{{}build(){}}}, allowing callers to pass the request model directly. The legacy {{build()}} method remains strictly for the older REST-assured-era tests.
* *Dead builder keys dropped:* Six keys emitted by the builder have been removed because they have no corresponding field on {{PostLoanProductsRequest}} ({{{}syncExpectedWithDisbursementDate{}}}, {{{}mandatoryGuarantee{}}}, {{{}minimumGuaranteeFromGuarantor{}}}, {{{}minimumGuaranteeFromOwnFunds{}}}, {{{}minimumGap{}}}, {{{}maximumGap{}}}). The old JSON path dropped them as unknown properties anyway, so leaving them unset sends the exact same body without requiring a schema change.
h3. Production Code & Swagger DTO Changes
Because the typed client cannot send a field the spec does not declare, two Swagger DTOs have been updated. Every field listed below is actively used by a test in this change.
*{{LoansApiResourceSwagger.PostLoansRequest}}* Gains the following fields:
* {{isFloatingInterestRate}}
* {{interestRateDifferential}}
* {{calendarId}}
* {{syncDisbursementWithMeeting}}
* {{interestChargedFromDate}}
* {{createStandingInstructionAtDisbursement}}
*{{RescheduleLoansApiResourceSwagger}}*
* *Added field:* {{recalculateInterest}}
* *Data type corrections:* Corrected {{repaymentsStartingFromDate}} and {{expectedDisbursementDate}} from {{LocalDate}} to {{{}String{}}}.
{quote}*Note on backward compatibility:* The server reads both fields using {{{}fromApiJsonHelper.extractLocalDateNamed{}}}, which parses using the {{dateFormat}} sent in the request. {{LocalDate}} was previously incorrect, as a generated client would serialize ISO into a body that declared "dd MMMM yyyy". While the API backward-compatibility check will report a type change, the wire format remains exactly the same; the spec is simply being corrected to match what the server actually parses.
{quote}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)