Skip to content

Conversation

@Shivd131
Copy link
Contributor

@Shivd131 Shivd131 commented Jan 20, 2026

Description

Currently, the reporting module lacks end-to-end integration tests that verify data integrity in the generated output. Existing tests primarily check for HTTP 200 OK statuses but do not validate that created client/loan data actually appears in the report body.

Changes:

  • Added ReportExecutionIntegrationTest.java.
  • The verifyAllReportsExecution:
    1. Creates real Client/Loan entities and injects a "Super Map" of standard parameters (R_clientId, R_loanId, R_officeId, etc.) into every report call. This allows standard reports (like Loan Schedule or Client Listings) to resolve data and return 200s.
    2. Iterates through ALL installed reports and asserts that no report returns a 500 Server Error:
      • 200 OK: Validated as success.
      • 400 Bad Request: Logged as expected validation error (for reports requiring specialized parameters).
      • 500 Server Error: Fails the build.
    3. Retained specific data integrity checks for "Client Listing" and "Active Loans" to verify format negotiation (CSV/JSON) and entity filtering.

This ensures that the observability instrumentation and reporting engine are stable across all report types, paving the way for future refactoring of the reporting logic.

Checklist

Please make sure these boxes are checked before submitting your pull request - thanks!

  • Write the commit message as per our guidelines
  • Acknowledge that we will not review PRs that are not passing the build ("green") - it is your responsibility to get a proposed PR to pass the build, not primarily the project's maintainers.
  • Create/update unit or integration tests for verifying the changes made.
  • Follow our coding conventions.
  • Add required Swagger annotation and update API documentation at fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with details of any API changes
  • This PR must not be a "code dump". Large changes can be made in a branch, with assistance. Ask for help on the developer mailing list.

Your assigned reviewer(s) will follow our guidelines for code reviews.

@Shivd131
Copy link
Contributor Author

Shivd131 commented Jan 20, 2026

I have removed the unused import, which was causing the build error. The code should work fine now.
Thanks

@adamsaghy
Copy link
Contributor

@Shivd131 Seems half done. Covering 1 report is not enough.

PR title and commit messages are incorrect and does not follow the required format:
FINERACT-2443: Add test cases for reports

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch 2 times, most recently from 53134d6 to 43a44b4 Compare January 20, 2026 10:54
@IOhacker
Copy link
Contributor

@Shivd131 change from "[FINERACT-2443] Test: Add ReportExecutionIntegrationTest for end-to-end" to "FINERACT-2443: Add test cases for reports" and squash and commit your changes, only 1 commit must be included in the PR, the title of that commit must be "FINERACT-2443: Add test cases for reports".

@Shivd131 Shivd131 changed the title [FINERACT-2443] Test: Add ReportExecutionIntegrationTest for end-to-end verification FINERACT-2443: Add test cases for reports Jan 20, 2026
@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch from 9a11055 to b1dc17c Compare January 20, 2026 16:04
@Shivd131
Copy link
Contributor Author

Shivd131 commented Jan 20, 2026

@IOhacker thank you so much for the help and directions:). I have updated my commits and PR to follow the conventions. Apologies for the remiss.

@adamsaghy Thanks for the feedback. I thought over it and have expanded the test to cover a more encompassing scenario.

Here is the updated flow I have implemented:

1. Client Listing

  • Tests simple entity retrieval (m_client).
  • Verifies format negotiation (CSV, JSON outputs).

2. Logic Verification (Active Loans - Details)

  • Data Setup: Creates Client → Loan Product → Loan Application.
  • Lifecycle Testing: Explicitly moves the loan from Approved (Status 200) → Disbursed (Status 300).
  • Validation: Runs the "Active Loans" report. This proves the engine correctly handles:
    • SQL Joins: (m_loan + m_client + m_product_loan)
    • State Filtering: Verifying the engine respects the WHERE loan_status_id = 300 predicate (ensuring undisbursed loans don't appear).
    • Parameter Mapping: Validating dynamic parameters like R_officeId and R_loanProductId.

Also I would like to know if I have misunderstood your previous feedback. I would appreciate knowing exactly which additional scenarios or logic you expect to be tested so I can make this test robust.

Copy link
Contributor

@adamsaghy adamsaghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to cover ALL reports!

@IOhacker
Copy link
Contributor

@Shivd131 could you please work on the changes requested?

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch from ee111be to 0a5d7a8 Compare January 25, 2026 18:54
@Shivd131
Copy link
Contributor Author

Hi @adamsaghy and @IOhacker , I’ve updated the test to cover all reports. Please review it, and let me know if there’s anything else I should address.

Thank you

@adamsaghy
Copy link
Contributor

@Shivd131 Kindly asking you to make sure all reports are covered if you want to call this PR: "Add test cases for reports".

If you dont want to cover all reports, kindly asking you to rename the commit and PR title to reflect the correct situation.

I would love if ALL available reports would be covered!

@Shivd131
Copy link
Contributor Author

@adamsaghy I think I may be oversimplifying things on my end, so I’d like to clarify my understanding.. I’m still getting familiar with the overall system, and I want to be careful not to misinterpret what is meant by “cover all the reports.”

At the moment, the test dynamically fetches the full list of installed reports and iterates through them to trigger the execution pipeline. The goal there was to verify that the observability instrumentation works in a global sense, even when specific report parameters are missing (hence the intentional try catch to ignore parameter/validation errors).

When you say “cover all reports,” do you mean adding explicit data setup and assertions for each individual report (for example, General Ledger, Balance Sheet, etc.) to fully validate their execution? That would certainly be more comprehensive, but it would also increase the test runtime and overall complexity quite a bit.

I would be glad if you could guide me by telling me the specifics about the requirement. Once I have that clarity, I’d be happy to refine or extend the tests accordingly, to what's actually needed, I want to avoid this PR ending up as a check for only a subset of cases, which is what you are currently pointing towards, so your elaboration would be very helpful :)

Thanks for the help!

@adamsaghy
Copy link
Contributor

@Shivd131 Hi

I missed the code which doing this however ignoring the errors are not too useful:

for (GetReportsResponse report : allReports) {
            try {
                fineractClient().reportsRun.runReportGetData(report.getReportName(), Map.of("R_officeId", "1"), false).execute();
            } catch (Exception ignored) {
                // Ignore network/parsing errors, the attempted execution being recorded by metrics is focused.
            }
        }
        
Would it be possible to ensure each report is called and there are no errors?

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch from 0a5d7a8 to 1113ed7 Compare January 27, 2026 18:12
@Shivd131
Copy link
Contributor Author

Hi @adamsaghy ,

I considered a few approaches. I initially thought about writing individual test cases for every single report, but I felt that approach would be brittle, time-consuming to maintain, and quite resource-intensive. But I feel this would be a better way to test it, keeping things quite simple:

Spin up a real Client/Loan/Office context and inject those IDs into every report call. This allows standard reports (like Loan Schedule or Client Listings) to actually resolve data and return 200s.

Crucially, I removed the blind try-catch. The test now strictly asserts that no report throws a 500:

  • 200 OK: Success.

  • 400 Bad Request: Logged as expected (since we can't guess custom params for every obscure report, but this confirms the validation engine is working).

  • 500 Server Error: Fails the build.

// Iterate and Execute
        for (GetReportsResponse report : allReports) {
            String reportName = report.getReportName();

            Response<RunReportsResponse> response = fineractClient().reportsRun.runReportGetData(reportName, commonParams, false).execute();

            // Strict Validation
            // Allow 200 (Success) OR 400 (Bad Request - Validation Error).
            // FAIL on 500 (Server Error) or any other code.
            if (response.code() == 200) {
                successCount++;
            } else if (response.code() == 400) {
                // If it fails, ensure it's a controlled validation error, not a crash.
                validationErrorCount++;
                log.info("Report '{}' returned 400 (Expected for missing specialized params).", reportName);
            } else {
                // Fail the test if we get a 500 or 404
                assertThat(response.code()).as("Report '%s' failed with unexpected status code", reportName).isNotEqualTo(500);
            }
        }

I believe this is a sweet spot, it dynamically verifies the execution pipeline for the entire report registry and proves stability, without flaking out on validation errors or creating an overly complex test suite.

Let me know your take on this, will be open to adjust and work on them.

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch from 1113ed7 to 38e2329 Compare January 27, 2026 18:31
allReports.size());

// Ensure we completed the process successfully
assertThat(successCount).as("Should have successfully executed at least some reports").isGreaterThan(0);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This assertion is not useful at all.. If at least one report was executed successfully, it will not fail the test case.

We should make sure there are no any failed reports!

Comment on lines 146 to 154
if (response.code() == 200) {
successCount++;
} else if (response.code() == 400) {
// If it fails, ensure it's a controlled validation error, not a crash.
validationErrorCount++;
log.info("Report '{}' returned 400 (Expected for missing specialized params).", reportName);
} else {
// Fail the test if we get a 500 or 404
assertThat(response.code()).as("Report '%s' failed with unexpected status code", reportName).isNotEqualTo(500);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should fail even for 500!

Copy link
Contributor

@adamsaghy adamsaghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kindly review my concerns!

@Shivd131
Copy link
Contributor Author

Shivd131 commented Jan 30, 2026

@adamsaghy thanks a lot for pointing it out, apologies for the confusion

I modified the method, covering your points

        . . .
        // Execution Loop
        int successCount = 0;
        int validationErrorCount = 0;
        Map<String, String> failedReports = new HashMap<>(); // Track failures: Map<reportName, status>

        log.info("Starting dynamic execution of {} reports...", allReports.size());

        for (GetReportsResponse report : allReports) {
            String reportName = report.getReportName();

            // Execute
            Response<RunReportsResponse> response = fineractClient().reportsRun.runReportGetData(reportName, commonParams, false).execute();

            int statusCode = response.code();

            if (statusCode == 200) {
                successCount++;
            } else if (statusCode == 400) {
                // If it fails, ensure it's a controlled validation error, not a crash.
                validationErrorCount++;
                log.info("Report '{}' returned 400 (Expected validation error).", reportName);
            } else {
                // Everything else is a FAILURE
                log.error("Report '{}' FAILED with status: {}", reportName, statusCode);
                failedReports.put(reportName, "Status: " + statusCode);
            }
        }

        log.info("Execution Summary: {} Success, {} Validation Errors, {} Failures.", successCount, validationErrorCount, failedReports.size());

 
        // This ensures the test fails if ANY report caused a crash.
        assertThat(failedReports).as("The following reports failed to execute: " + failedReports.toString()).isEqualTo(0);

        . . .
    }

However, the test fails for these reports:

  1. The Pentaho reports were failing with a 503. Curling the endpoint and reading the file revealed that the method is currently returns null for Pentaho. We can deal with it by checking if its a Pentaho report, returning 503:
if ("Pentaho".equalsIgnoreCase(reportType) && statusCode == 503)
  1. Regarding the 403 errors, I verified the test user has ALL_FUNCTIONS_READ, confirming these are data-scoping mismatches in the legacy SQL reports rather than missing role permissions, my assumption. So can you guide me into deciding how exactly should i handle them at this point?

Once we figure out the 403s, the test logic would be ready to be finalized I believe

LOGS (I have logged the names of reports and codes)



org.apache.fineract.integrationtests.ReportExecutionIntegrationTest

  Test verifyClientListingReportAndMetrics() PASSED (5s)
  Test verifyAllReportsExecution() FAILED (18.9s)

  org.opentest4j.AssertionFailedError: [The following reports failed to execute: {Loan fully repaid=Status: 403, Loan payments due (Overdue Loans)=Status: 403, FieldAgentStats=Status: 403, Portfolio at Risk by Branch=Status: 403, Funds Disbursed Between Dates Summary by Office(Pentaho)=Status: 503, Loan Repayment=Status: 403, Portfolio at Risk=Status: 403, GroupSummaryAmounts=Status: 403, Client Loan Account Schedule=Status: 503, TxnRunningBalances(Pentaho)=Status: 503, Income Statement=Status: 503, Disbursal Report=Status: 503, Funds Disbursed Between Dates Summary(Pentaho)=Status: 503, Loan Transaction Receipt=Status: 503, Loan in arrears=Status: 403, Active Loans by Disbursal Period=Status: 403, Collection Report=Status: 503, ProgramStats=Status: 403, Savings Transaction Receipt=Status: 503, Portfolio at Risk(Pentaho)=Status: 503, ChildrenStaffList=Status: 403, Savings Rejected=Status: 403, Loans Pending Approval=Status: 403, Active Loans in last installment=Status: 403, Obligation Met Loans Summary(Pentaho)=Status: 503, Active Loans by Disbursal Period(Pentaho)=Status: 503, Active Loans - Details(Pentaho)=Status: 503, Active Loans - Summary=Status: 403, Aging Detail(Pentaho)=Status: 503, Loans Awaiting Disbursal=Status: 403, Active Loans - Summary(Pentaho)=Status: 503, Obligation Met Loans Details(Pentaho)=Status: 503, Savings Activated=Status: 403, Trial Balance Summary Report with Asset Owner=Status: 403, Loan Repayment - Email=Status: 503, Savings Transactions=Status: 503, Client Loans Listing=Status: 403, Aging Summary (Arrears in Weeks)(Pentaho)=Status: 503, ReportCategoryList=Status: 403, Obligation Met Loans Details=Status: 403, Active Loans Passed Final Maturity=Status: 403, Active Loans in last installment Summary=Status: 403, Active Loans in last installment Summary(Pentaho)=Status: 503, Loans Awaiting Disbursal Summary=Status: 403, Savings Withdrawal=Status: 403, CoordinatorStats=Status: 403, Client Saving Transactions=Status: 503, GroupSummaryCounts=Status: 403, Active Loans in last installment(Pentaho)=Status: 503, Loan payments due=Status: 403, Written-Off Loans(Pentaho)=Status: 503, Active Loans Passed Final Maturity Summary(Pentaho)=Status: 503, Loan Approved - Email=Status: 503, Portfolio at Risk by Branch(Pentaho)=Status: 503, BranchManagerStats=Status: 403, Loans Awaiting Disbursal(Pentaho)=Status: 503, Rescheduled Loans(Pentaho)=Status: 503, Balance Sheet=Status: 503, Loans Awaiting Disbursal Summary by Month=Status: 403, Trial Balance=Status: 503, FieldAgentPrograms=Status: 403, GroupSavingSummary=Status: 403, Obligation Met Loans Summary=Status: 403, GroupNamesByStaff=Status: 403, Loan Approved=Status: 403, Client Listing(Pentaho)=Status: 503, Active Loan Clients=Status: 403, Aging Summary (Arrears in Months)(Pentaho)=Status: 503, Active Loans Passed Final Maturity(Pentaho)=Status: 503, Expected Payments By Date - Formatted=Status: 503, ProgramDirectorStats=Status: 403, Active Loan Summary per Branch=Status: 503, Loan outstanding after final instalment date=Status: 403, FullReportList=Status: 403, Loans Awaiting Disbursal Summary by Month(Pentaho)=Status: 503, Active Loans Passed Final Maturity Summary=Status: 403, Client Loans Listing(Pentaho)=Status: 503, Savings Accounts Dormancy Report=Status: 403, Loan Account Schedule=Status: 503, Expected Payments By Date - Basic(Pentaho)=Status: 503, Loan Rejected=Status: 403, Client Savings Summary=Status: 503, Balance Outstanding=Status: 503, Loan payments received (Active Loans)=Status: 403, Savings Deposit=Status: 403, Staff Assignment History=Status: 503, Loan Rejected - Email=Status: 503, GeneralLedgerReport Table=Status: 403, Loans Pending Approval(Pentaho)=Status: 503, ProgramDetails=Status: 403, GeneralLedgerReport=Status: 503, Loan payments received (Overdue Loans)=Status: 403, Active Loans - Details=Status: 403, Loans Awaiting Disbursal Summary(Pentaho)=Status: 503, Branch Expected Cash Flow=Status: 503}] 
  expected: 0
   but was: {"Active Loan Clients"="Status: 403", "Active Loan Summary per Branch"="Status: 503", "Active Loans - Details"="Status: 403", "Active Loans - Details(Pentaho)"="Status: 503", "Active Loans - Summary"="Status: 403", "Active Loans - Summary(Pentaho)"="Status: 503", "Active Loans Passed Final Maturity"="Status: 403", "Active Loans Passed Final Maturity Summary"="Status: 403", "Active Loans Passed Final Maturity Summary(Pentaho)"="Status: 503", "Active Loans Passed Final Maturity(Pentaho)"="Status: 503", "Active Loans by Disbursal Period"="Status: 403", "Active Loans by Disbursal Period(Pentaho)"="Status: 503", "Active Loans in last installment"="Status: 403", "Active Loans in last installment Summary"="Status: 403", "Active Loans in last installment Summary(Pentaho)"="Status: 503", "Active Loans in last installment(Pentaho)"="Status: 503", "Aging Detail(Pentaho)"="Status: 503", "Aging Summary (Arrears in Months)(Pentaho)"="Status: 503", "Aging Summary (Arrears in Weeks)(Pentaho)"="Status: 503", "Balance Outstanding"="Status: 503", "Balance Sheet"="Status: 503", "Branch Expected Cash Flow"="Status: 503", "BranchManagerStats"="Status: 403", "ChildrenStaffList"="Status: 403", "Client Listing(Pentaho)"="Status: 503", "Client Loan Account Schedule"="Status: 503", "Client Loans Listing"="Status: 403", "Client Loans Listing(Pentaho)"="Status: 503", "Client Saving Transactions"="Status: 503", "Client Savings Summary"="Status: 503", "Collection Report"="Status: 503", "CoordinatorStats"="Status: 403", "Disbursal Report"="Status: 503", "Expected Payments By Date - Basic(Pentaho)"="Status: 503", "Expected Payments By Date - Formatted"="Status: 503", "FieldAgentPrograms"="Status: 403", "FieldAgentStats"="Status: 403", "FullReportList"="Status: 403", "Funds Disbursed Between Dates Summary by Office(Pentaho)"="Status: 503", "Funds Disbursed Between Dates Summary(Pentaho)"="Status: 503", "GeneralLedgerReport"="Status: 503", "GeneralLedgerReport Table"="Status: 403", "GroupNamesByStaff"="Status: 403", "GroupSavingSummary"="Status: 403", "GroupSummaryAmounts"="Status: 403", "GroupSummaryCounts"="Status: 403", "Income Statement"="Status: 503", "Loan Account Schedule"="Status: 503", "Loan Approved"="Status: 403", "Loan Approved - Email"="Status: 503", "Loan Rejected"="Status: 403", "Loan Rejected - Email"="Status: 503", "Loan Repayment"="Status: 403", "Loan Repayment - Email"="Status: 503", "Loan Transaction Receipt"="Status: 503", "Loan fully repaid"="Status: 403", "Loan in arrears"="Status: 403", "Loan outstanding after final instalment date"="Status: 403", "Loan payments due"="Status: 403", "Loan payments due (Overdue Loans)"="Status: 403", "Loan payments received (Active Loans)"="Status: 403", "Loan payments received (Overdue Loans)"="Status: 403", "Loans Awaiting Disbursal"="Status: 403", "Loans Awaiting Disbursal Summary"="Status: 403", "Loans Awaiting Disbursal Summary by Month"="Status: 403", "Loans Awaiting Disbursal Summary by Month(Pentaho)"="Status: 503", "Loans Awaiting Disbursal Summary(Pentaho)"="Status: 503", "Loans Awaiting Disbursal(Pentaho)"="Status: 503", "Loans Pending Approval"="Status: 403", "Loans Pending Approval(Pentaho)"="Status: 503", "Obligation Met Loans Details"="Status: 403", "Obligation Met Loans Details(Pentaho)"="Status: 503", "Obligation Met Loans Summary"="Status: 403", "Obligation Met Loans Summary(Pentaho)"="Status: 503", "Portfolio at Risk"="Status: 403", "Portfolio at Risk by Branch"="Status: 403", "Portfolio at Risk by Branch(Pentaho)"="Status: 503", "Portfolio at Risk(Pentaho)"="Status: 503", "ProgramDetails"="Status: 403", "ProgramDirectorStats"="Status: 403", "ProgramStats"="Status: 403", "ReportCategoryList"="Status: 403", "Rescheduled Loans(Pentaho)"="Status: 503", "Savings Accounts Dormancy Report"="Status: 403", "Savings Activated"="Status: 403", "Savings Deposit"="Status: 403", "Savings Rejected"="Status: 403", "Savings Transaction Receipt"="Status: 503", "Savings Transactions"="Status: 503", "Savings Withdrawal"="Status: 403", "Staff Assignment History"="Status: 503", "Trial Balance"="Status: 503", "Trial Balance Summary Report with Asset Owner"="Status: 403", "TxnRunningBalances(Pentaho)"="Status: 503", "Written-Off Loans(Pentaho)"="Status: 503"}
      at app//org.apache.fineract.integrationtests.ReportExecutionIntegrationTest.verifyAllReportsExecution(ReportExecutionIntegrationTest.java:167)

  Test verifyLoanListingReport() PASSED (1.1s)

FAILURE: Executed 3 tests in 29.9s (1 failed)


3 tests completed, 1 failed

> Task :integration-tests:test FAILED

[Incubating] Problems report is available at: file:///C:/Users/shivd/Documents/mifos/fineract/build/reports/problems/problems-report.html

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':integration-tests:test'.
> There were failing tests. See the report at: file:///C:/Users/shivd/Documents/mifos/fineract/integration-tests/build/reports/tests/test/index.html

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.14.3/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD FAILED in 3m 30s
98 actionable tasks: 6 executed, 92 up-to-date

@adamsaghy
Copy link
Contributor

@Shivd131 You should skip the PENTAHO reports.

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch 3 times, most recently from 11297f4 to 8a3cf5d Compare January 30, 2026 18:28
@Shivd131
Copy link
Contributor Author

Hey @adamsaghy , made the change, skipped 403 as TODO for now, will get on it after I get inputs from you.
Thanks for the help

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch 2 times, most recently from dda6175 to 2f0ac3a Compare January 31, 2026 06:25
@Shivd131
Copy link
Contributor Author

@adamsaghy this failed the check:

> Task :integration-tests:compileTestJava
/home/runner/work/fineract/fineract/integration-tests/src/test/java/org/apache/fineract/integrationtests/ReportExecutionIntegrationTest.java:30: error: [WildcardImport] Wildcard imports, static or otherwise, should not be used
import org.apache.fineract.client.models.*;
^
    (see https://google.github.io/styleguide/javaguide.html?cl=head#s3.3.1-wildcard-imports)

1 error

I have fixed it, thank you.

Comment on lines 150 to 157
} else if (statusCode == 400) {
// Missing parameters (Validation Error)
log.info("Report '{}' returned 400 (Expected Validation Error).", reportName);
} else if (statusCode == 403) {
// TODO: Fix data scoping issues for legacy reports.
// Currently returning 403 Forbidden because generic test data doesn't match specific report SQL
// filters.
log.warn("Report '{}' returned 403 (Skipped - TODO: Fix Data Scope).", reportName);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should find a way to avoid these exceptions too as they can easily hide "not working reports"!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of running reports with missing parameters, the code in the latest code generates a complete data lifecycle: a Group, a Savings Account, and actual Transactions (Loan Repayment & Savings Deposit) (lmk if I am missing something here). Hence only those those cases will enter here which are expected to.

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch from 2f0ac3a to ce13926 Compare February 3, 2026 11:19
@Shivd131
Copy link
Contributor Author

Shivd131 commented Feb 3, 2026

Hey @adamsaghy , digged in more, tried to make tests more comprehensive. Please have a look

About skipping Email along with Pentaho:
Realised Email type was also disabled, so skipped it

shivd@Shiv_Laptop MINGW64 ~/Documents/mifos/fineract (feature/report-integration-test)
$ curl -k -v -X GET "https://localhost:8443/fineract-provider/api/v1/runreports/Loan%20Repayment%20-%20Email?R_officeId=1&R_loanId=1&R_transactionId=1" \
>      -H "Fineract-Platform-TenantId: default" \
>      -H "Authorization: Basic bWlmb3M6cGFzc3dvcmQ="
Note: Unnecessary use of -X or --request, GET is already inferred.
* Host localhost:8443 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:8443...
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* ALPN: server did not agree on a protocol. Uses default.
* Connected to localhost (::1) port 8443
* using HTTP/1.x
> GET /fineract-provider/api/v1/runreports/Loan%20Repayment%20-%20Email?R_officeId=1&R_loanId=1&R_transactionId=1 HTTP/1.1
> Host: localhost:8443
> User-Agent: curl/8.14.1
> Accept: */*
> Fineract-Platform-TenantId: default
> Authorization: Basic bWlmb3M6cGFzc3dvcmQ=
> 
* schannel: remote party requests renegotiation
* schannel: renegotiating SSL/TLS connection
* schannel: SSL/TLS connection renegotiated
* Request completely sent off
< HTTP/1.1 503 
< X-Notification-Refresh: false
< Vary: Origin
< Vary: Access-Control-Request-Method
< Vary: Access-Control-Request-Headers
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 0
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< Strict-Transport-Security: max-age=31536000 ; includeSubDomains
< X-Frame-Options: DENY
< Content-Type: application/json
< Content-Length: 718
< Date: Tue, 03 Feb 2026 11:01:14 GMT
< Connection: close
< 
{"developerMessage":"The server is currently unable to handle the request , please try after some time.","httpStatusCode":"503","defaultUserMessage":"The server is currently unable to handle the request , please try after some time.","userMessageGlobalisationCode":"error.msg.platform.service.unavailable","errors":[{"defaultUserMessage":"There is no ReportingProcessService registered in the ReportingProcessServiceProvider for this report type: Email","parameterName":"id","developerMessage":"There is no ReportingProcessService registered in the ReportingProcessServiceProvider for this report type: Email","userMessageGlobalisationCode":"err.msg.report.service.implementation.missing","args":[{"value":"Email"}]}]}* shutting down connection #0


Hope it covers your concerns! Please let me know if there's something I have missed

@adamsaghy
Copy link
Contributor

@Shivd131 Please kindly check the failed checks!

@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch 4 times, most recently from cdc4949 to 51be823 Compare February 12, 2026 13:30
@Shivd131 Shivd131 force-pushed the feature/report-integration-test branch from 51be823 to f84f82e Compare February 12, 2026 13:37
@Shivd131
Copy link
Contributor Author

@adamsaghy apologies for the delay. I have fixed the issue, you can retrigger now.

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants