Cosmic Module
O
Qubits of DPK
March 20, 2026
Core Open Source
Group E — Build, Test & Utilities
These modules aren't financial products — they're the scaffolding that holds the entire project together: build packaging, documentation, testing infrastructure, and test runners.
1. fineract-war
What it is
The deployment packaging module — combines all other modules into a single deployable application file.
Layman Analogy
All the other modules are like individual LEGO bricks. fineract-war is the finished LEGO set — it assembles all pieces into one complete thing that can be deployed to a server.
What is a WAR/JAR?
- WAR (Web Application Archive): Old Java web app packaging for Tomcat/JBoss
- Fat JAR (also called uber-JAR): Single executable file with all dependencies included
- Fineract builds a fat JAR via Spring Boot: fineract.jar
Build Output
bash
QUBITS OF DPK
What fineract-war Does
- #Depends on all other modules in build.gradle
- #Spring Boot Plugin collects all .jar files
- #Embeds Tomcat so no separate web server needed
- #Bundles Liquibase changelogs so DB migrations run on startup
Docker Image
The official Fineract Docker image is built from this:
docker
QUBITS OF DPK
Key Configuration
fineract-war/src/main/resources/application.properties:
- Server port: 8443 (HTTPS)
- Database connection details
- Spring Batch settings
- Feature flags (events, external access, etc.)
2. fineract-doc
What it is
The documentation generation module — produces the OpenAPI (Swagger) specification and API documentation.
Layman Analogy
When developers want to know "how do I call the Create Client API?", they need documentation showing the URL, required fields, example request/response. fineract-doc automatically generates this documentation from the code annotations.
What It Generates
- #OpenAPI Spec (openapi.json / openapi.yaml)
- #Swagger UI (accessible at /swagger-ui/index.html when running)
How OpenAPI Annotations Work
java
QUBITS OF DPK
This annotation tells the OpenAPI Generator:
- Endpoint: POST /clients
- Request body class: PostClientsRequest
- Success response class: PostClientsResponse
The generator reads this and adds it to the spec.
The Generate-Regenerate Cycle
javascript
QUBITS OF DPK
3. fineract-progressive-loan-embeddable-schedule-generator
What it is
A standalone, embeddable library that exposes the progressive loan amortization calculator so external systems can use it without running a full Fineract server.
Layman Analogy
Imagine a loan officer using a mobile app in the field with no internet connection. The app needs to calculate the repayment schedule on-the-spot. This module is a mini calculator library that can be embedded in such apps — no server required.
Why It Exists
- The fineract-progressive-loan module requires Spring, JPA, the full Fineract environment
- Sometimes you just need the math without the full stack
- This module strips out all the infrastructure, leaving only the pure calculation logic
What's Stripped Out
- No @Service, @Repository, @Entity annotations
- No database calls
- No Spring context at all
- Pure Java: input → calculation → output
Typical Use Case
java
QUBITS OF DPK
4. fineract-e2e-tests-core
What it is
The shared test infrastructure library for end-to-end (E2E) tests — provides reusable utilities, base classes, and helpers used by E2E tests.
Layman Analogy
When building many different tests, you don't want to repeat the same setup code everywhere. fineract-e2e-tests-core is like a shared toolkit — common tools that all your tests can import and use.
What's Inside
Test Base Classes
- BaseIntegrationTest — sets up auth, HTTP client, common config
- BaseLoanTest — creates test loan products, disburses, runs COB
Step Definitions
- Business scenario steps written in a behavior-driven style
- E.g., LoanSteps.createLoan(), ClientSteps.createClient(), COBSteps.runCOB()
Assertions
- Domain-specific assertion helpers
- LoanAssertions.assertInstallment(installment, principal, interest, totalOutstanding)
- Cleaner than raw JUnit assertions — gives better error messages
Data Builders
- Test data factories: LoanProductTestDataBuilder, ClientTestDataBuilder
- Provide sensible defaults so tests only specify what they care about
Why Separate from integration-tests?
- fineract-e2e-tests-core — shared library (imported as dependency)
- fineract-e2e-tests-runner — actual test scenarios (runs the tests)
- integration-tests — original integration test suite (being migrated to feign client)
5. fineract-e2e-tests-runner
What it is
The E2E test execution module — contains the actual end-to-end test scenarios written using the shared infrastructure from fineract-e2e-tests-core.
Layman Analogy
If e2e-tests-core is the testing toolkit, e2e-tests-runner is the actual test scripts — the numbered steps in a QA checklist that say "do this, then verify that".
Test Scenarios Inside
Loan Scenarios
- Full loan lifecycle: create product, apply, approve, disburse, repay schedule, close
- Edge cases: late payment, partial payment, prepayment, charge waiver
- COB processing: overdue classification, interest accrual, delinquency buckets
Savings Scenarios
- Open account, deposit, withdraw, apply annual fee, close account
- Fixed deposit: create, mature, premature close
Investor Scenarios (newer)
- Create external asset owner, transfer loan, buyback
Working Capital Scenarios
- FINERACT-2455: WC delinquency bucket management (newest addition)
How Tests Are Structured
java
QUBITS OF DPK
Running E2E Tests
bash
QUBITS OF DPK
6. integration-tests
What it is
The original integration test suite — the largest collection of tests in Fineract, covering every API endpoint and business scenario. This is where your GSoC work (FINERACT-2441) lives.
Layman Analogy
integration-tests is like a massive QA test book with hundreds of test cases. Each test case calls the real Fineract API and verifies the result. It was originally written using RestAssured (raw HTTP calls) and is being migrated to fineract-client-feign (typed Java client).
Directory Structure
javascript
QUBITS OF DPK
RestAssured vs Feign: The Migration You're Doing
Old way (RestAssured) — being removed:
java
QUBITS OF DPK
New way (Feign) — being added:
java
QUBITS OF DPK
Test Execution
bash
QUBITS OF DPK
What Makes a Good Integration Test
- #Arrange: Create test data (client, loan product, loan)
- #Act: Perform the action being tested (disburse, repay, reject)
- #Assert: Verify the outcome (status changed, balance correct, accounting entries created)
- #Cleanup: (Optional) Reset configuration changes (globalConfigurationHelper.manageConfigurations(..., false))
Summary Table — Group E
The Big Picture: How All Modules Fit Together
javascript
QUBITS OF DPK
Request flow:
javascript
QUBITS OF DPK