Repository navigation
fix: use array date formatter for floating rates - #648
Conversation
Co-authored-by: insisong <emmanuelisaacnsisong@gmail.com>
E2E — mocked backend🎭 E2E Tests✅ All green — 390 passed · 0 failed · 1 skipped · 1 flaky, across 36 spec files in 5m 54s.
|
| Spec | ✅ | ❌ | ⏭️ | 🔒 | Time |
|---|---|---|---|---|---|
| accessibility.spec.ts | 5 | 0 | 0 | 0 | 27.5s |
| all-functions-read-shortcut.spec.ts | 5 | 0 | 0 | 0 | 7.8s |
| branded-deployment.spec.ts | 9 | 0 | 0 | 0 | 13.7s |
| breadcrumb.spec.ts | 2 | 0 | 0 | 0 | 4.1s |
| client-date-picker-revisit.spec.ts | 1 | 0 | 0 | 0 | 5.2s |
| client-servicing-gaps.spec.ts | 14 | 0 | 0 | 0 | 45.8s |
| client.spec.ts | 1 | 0 | 0 | 0 | 3.1s |
| collateral-currency-search.spec.ts | 5 | 0 | 0 | 0 | 13.8s |
| date-picker-revisit.spec.ts | 6 | 0 | 0 | 0 | 20.9s |
| deployment-customization.spec.ts | 19 | 0 | 0 | 0 | 27.8s |
| e2e-journey.spec.ts | 81 | 0 | 0 | 0 | 2m 38s |
| feature-coverage.spec.ts | 49 | 0 | 0 | 0 | 1m 40s |
| functional-coverage.spec.ts | 42 | 0 | 0 | 0 | 1m 52s |
| global-search-nav-shortcuts.spec.ts | 4 | 0 | 0 | 0 | 9.5s |
| global-search-navigation.spec.ts | 8 | 0 | 0 | 0 | 19.9s |
| group-detail.spec.ts | 8 | 0 | 0 | 0 | 34.0s |
| guidance-tour.spec.ts | 5 | 0 | 1 | 0 | 12.6s |
| keyboard-shortcuts.spec.ts | 5 | 0 | 0 | 0 | 9.4s |
| list-load-failure.spec.ts | 5 | 0 | 0 | 0 | 18.4s |
| list-pagination.spec.ts | 13 | 0 | 0 | 0 | 50.9s |
| loan-portfolio-summary.spec.ts | 4 | 0 | 0 | 0 | 15.0s |
| loan-product-down-payment.spec.ts | 13 | 0 | 0 | 0 | 57.0s |
| charge-refund.spec.ts | 1 | 0 | 0 | 0 | 5.2s |
| client-empty-account-cta.spec.ts | 1 | 0 | 0 | 0 | 4.3s |
| client-load-error.spec.ts | 2 | 0 | 0 | 0 | 5.9s |
| contract-termination.spec.ts | 1 | 0 | 0 | 0 | 6.9s |
| loan-schedule-type-gating.spec.ts | 6 | 0 | 0 | 0 | 16.9s |
| loan-servicing-gaps.spec.ts | 18 | 0 | 0 | 0 | 57.9s |
| logout-reason-notice.spec.ts | 4 | 0 | 0 | 0 | 3.3s |
| rbac-feature-flag.spec.ts | 11 | 0 | 0 | 0 | 15.5s |
| rbac-route-protection.spec.ts | 18 | 0 | 0 | 0 | 1m 26s |
| report-enhancements.spec.ts | 2 | 0 | 0 | 0 | 6.3s |
| reporting.spec.ts | 2 | 0 | 0 | 0 | 3.3s |
| scheduler-jobs.spec.ts | 3 | 0 | 0 | 0 | 9.7s |
| two-factor-authentication.spec.ts | 10 | 0 | 0 | 0 | 15.1s |
| working-capital-loan-actions.spec.ts | 7 | 0 | 0 | 0 | 26.6s |
All 391 tests — click to expand
accessibility.spec.ts
- ✅ Runtime accessibility › client list has no blocking violations —
3.5s - ✅ Runtime accessibility › client list links meet color contrast in dark mode —
3.0s - ✅ Runtime accessibility › client form has no blocking violations —
3.5s - ✅ Runtime accessibility › banner and dashboard content have no blocking violations —
13.8s - ✅ Runtime accessibility › create office dialog has no blocking violations —
3.7s
all-functions-read-shortcut.spec.ts
- ✅ ALL_FUNCTIONS_READ shortcut › grants read access to the Clients list without any explicit READ_CLIENT permission —
1.5s - ✅ ALL_FUNCTIONS_READ shortcut › does not grant the Create Client action —
1.7s - ✅ ALL_FUNCTIONS_READ shortcut › does not grant Create Client even combined with an explicit READ_CLIENT permission —
1.5s - ✅ ALL_FUNCTIONS_READ shortcut › a user with the real CREATE_CLIENT permission still sees the button —
1.4s - ✅ ALL_FUNCTIONS_READ shortcut › ALL_FUNCTIONS (full superuser) still sees the Create Client button —
1.6s
branded-deployment.spec.ts
- ✅ a fully branded deployment › wears the institution’s name and mark, not Fineract’s —
1.3s - ✅ a fully branded deployment › carries the institution’s palette into its own chrome and into Ionic —
1.4s - ✅ a fully branded deployment › drops the sections the institution does not run —
1.6s - ✅ a fully branded deployment › renames and reorders entries to the institution’s vocabulary —
1.3s - ✅ a fully branded deployment › offers the institution’s own systems beside Fineract’s screens —
1.4s - ✅ a fully branded deployment › restates the labels the institution words differently —
1.4s - ✅ a fully branded deployment › keeps a readable palette in dark mode, with a label colour to match —
1.4s - ✅ a fully branded deployment › does not leak a light colour into the dark palette —
1.4s - ✅ a fully branded deployment › reports no configuration defects for the published example —
2.7s
breadcrumb.spec.ts
- ✅ a single-crumb page shows no breadcrumb trail —
1.4s - ✅ a nested page shows a trail, and the ancestor crumb navigates back —
2.7s
client-date-picker-revisit.spec.ts
- ✅ Client form date pickers › stay usable on a second visit to the create form —
5.2s
client-servicing-gaps.spec.ts
- ✅ Client transfers › proposing a transfer sends the destination, the date and the format that parses it —
3.4s - ✅ Client transfers › a one-step transfer omits the date the platform refuses —
3.3s - ✅ Client transfers › the client’s own office is not offered as a destination —
3.3s - ✅ Client transfers › accepting a transfer sends a note and nothing else —
3.3s - ✅ Client transfers › accepting with no note sends an empty body —
3.1s - ✅ Client transfers › rejecting a transfer is offered while one is pending —
3.5s - ✅ Client transfers › withdrawing is offered from on hold, which is the only way back —
3.7s - ✅ Client transfers › answers to a transfer are not offered when none is pending —
2.4s - ✅ Client staff and default savings account › assigning a member of staff sends the staff id —
4.3s - ✅ Client staff and default savings account › unassigning echoes the current holder back, which the platform requires —
3.2s - ✅ Client staff and default savings account › unassigning is not offered when nobody is assigned —
2.5s - ✅ Client staff and default savings account › the assigned officer is shown on the header —
2.7s - ✅ Client staff and default savings account › setting the default savings account sends the account id —
3.7s - ✅ Undoing a rejection › posts the command name the platform recognises, not the menu identifier —
3.4s
client.spec.ts
- ✅ Client Management › should create a new client —
3.1s
collateral-currency-search.spec.ts
- ✅ Collateral product currency — searchable select (#626) › the field is closed with no option list until it is opened —
2.5s - ✅ Collateral product currency — searchable select (#626) › typing narrows a long, alphabetical list to the matching currency —
2.8s - ✅ Collateral product currency — searchable select (#626) › matches by currency code as well as by name —
3.1s - ✅ Collateral product currency — searchable select (#626) › shows a "no results" message rather than an empty panel —
2.6s - ✅ Collateral product currency — searchable select (#626) › Cancel closes the picker without changing the selection —
2.8s
date-picker-revisit.spec.ts
- ✅ Date pickers on revisited forms › office form keeps its pickers usable on every visit —
3.0s - ✅ Date pickers on revisited forms › staff form keeps its pickers usable on every visit —
3.4s - ✅ Date pickers on revisited forms › holiday form keeps its pickers usable on every visit —
3.4s - ✅ Date pickers on revisited forms › teller form keeps its pickers usable on every visit —
3.0s - ✅ Date pickers on revisited forms › accounting closure form keeps its pickers usable on every visit —
3.3s - ✅ Date pickers on revisited forms › floating rate form keeps its pickers usable on every visit —
4.9s(retried 1×)
deployment-customization.spec.ts
- ✅ with no overlay mounted › boots, keeps the shipped branding, and shows the full menu —
1.6s - ✅ with no overlay mounted › does not ask for an overlay this deployment has not declared —
1.3s - ✅ with no overlay mounted › logs no federation parse error on load —
1.3s - ✅ branding › applies colour and density tokens to the document —
1.3s - ✅ branding › recolours Ionic through the same tokens —
1.3s - ✅ branding › renames the product in the header and the tab title —
2.6s - ✅ branding › serves the deployment logo and names it after the deployment —
1.3s - ✅ branding › refuses a fill that cannot carry the white text baked into the stylesheet —
1.3s - ✅ branding › accepts a light accent and derives a dark label for it —
1.3s - ✅ branding › ignores a token outside the published allow-list, and says so —
1.3s - ✅ navigation › hides an entry named by its id —
1.7s - ✅ navigation › does not hide an entry named by its labelKey —
1.5s - ✅ navigation › renames and reorders entries —
1.3s - ✅ navigation › adds an external entry that opens in a new tab —
1.4s - ✅ navigation › nests an added entry under an existing group —
1.3s - ✅ navigation › gates an added entry on permissions like any built-in one —
1.4s - ✅ navigation › drops an external entry with no usable url rather than rendering a dead link —
1.5s - ✅ layering › merges over config.json instead of replacing it —
1.4s - ✅ layering › a malformed overlay leaves the application usable —
1.3s
e2e-journey.spec.ts
- ✅ E2E: Login Flow › should display login page with all required fields —
1.1s - ✅ E2E: Login Flow › should have Sign In button disabled when fields are empty —
1.2s - ✅ E2E: Login Flow › should enable Sign In when credentials are entered —
1.3s - ✅ E2E: Login Flow › should redirect to dashboard after successful login —
1.3s - ✅ E2E: Login Flow › should display language selector on login page —
1.2s - ✅ E2E: Login Flow › should display API endpoint selector with value —
1.2s - ✅ E2E: Dashboard › should display dashboard summary cards —
1.5s - ✅ E2E: Dashboard › should display system health as Online —
1.5s - ✅ E2E: Dashboard › should display pending approvals section —
1.4s - ✅ E2E: Dashboard › should display loan and savings status distribution charts —
1.4s - ✅ E2E: Dashboard › should display system operational status —
1.4s - ✅ E2E: Dashboard › should have header with business date, render time, and logout —
1.5s - ✅ E2E: Dashboard › should have sidebar toggle button —
1.6s - ✅ E2E: Dashboard › should have global search bar in header —
1.3s - ✅ E2E: Dashboard › should have Guide button in header —
1.4s - ✅ E2E: Dashboard › should have dark mode toggle button —
1.3s - ✅ E2E: Sidebar Navigation › should have all main navigation links —
1.4s - ✅ E2E: Sidebar Navigation › should have Products section with sub-links —
1.5s - ✅ E2E: Sidebar Navigation › should have Transfers section with sub-links —
1.4s - ✅ E2E: Sidebar Navigation › should have Accounting section with sub-links —
2.0s - ✅ E2E: Sidebar Navigation › should have Security section —
1.4s - ✅ E2E: Sidebar Navigation › should have Settings section —
1.4s - ✅ E2E: Sidebar Navigation › should have Organization section —
1.4s - ✅ E2E: Sidebar Navigation › should have System section —
1.5s - ✅ E2E: Sidebar Navigation › should navigate to all major pages via sidebar —
3.1s - ✅ E2E: Offices › should display offices list with table —
1.6s - ✅ E2E: Offices › should have Create Office button —
1.5s - ✅ E2E: Offices › should navigate to office create form —
1.8s - ✅ E2E: Offices › should validate office create form - save disabled when empty —
1.7s - ✅ E2E: Offices › should fill office create form and enable save —
2.4s - ✅ E2E: Offices › should cancel office creation and return to list —
1.8s - ✅ E2E: Offices › should have search input on offices page —
2.0s - ✅ E2E: Offices › should show edit button for each office —
2.7s - ✅ E2E: Offices › should have pagination controls —
2.4s - ✅ E2E: Clients › should display clients list page —
2.3s - ✅ E2E: Clients › should display client data in table —
1.9s - ✅ E2E: Clients › should show ACTIVE status badge —
2.3s - ✅ E2E: Clients › should have Create Client button —
2.3s - ✅ E2E: Clients › should show empty state when no clients exist —
1.9s - ✅ E2E: Clients › should have search input and status filter —
1.9s - ✅ E2E: Clients › should have pagination controls —
1.8s - ✅ E2E: Client Creation › should navigate to client create form —
2.1s - ✅ E2E: Client Creation › should display all required client form fields, across the wizard steps —
3.2s - ✅ E2E: Client Creation › should display optional client form fields, across the wizard steps —
2.8s - ✅ E2E: Client Creation › should have Next disabled until the current step is valid —
2.6s - ✅ E2E: Client Creation › should populate office dropdown from API —
2.5s - ✅ E2E: Client Creation › should fill client form and enable save on the last step —
3.2s - ✅ E2E: Client Creation › should submit client and redirect to clients list —
3.5s - ✅ E2E: Client Creation › should cancel client creation and return to clients list —
3.2s - ✅ E2E: Client Creation › should have add office quick-action button —
2.2s - ✅ E2E: Client Creation › should have help icons for form fields —
1.8s - ✅ E2E: Client Creation › should have calendar buttons for date fields —
2.7s - ✅ E2E: Client Creation › should have pre-filled dates in Submitted On and Activation Date —
3.1s - ✅ E2E: Client Creation › should have Active checkbox checked by default —
2.2s - ✅ E2E: Client Creation › should handle Entity legal form showing fullname field —
3.7s - ✅ E2E: Loan Products Page › should display loan products list page —
1.9s - ✅ E2E: Loan Products Page › should have Create Loan Product button —
1.9s - ✅ E2E: Loan Products Page › should display table with correct headers —
2.0s - ✅ E2E: Loan Products Page › should show empty state when no products exist —
2.0s - ✅ E2E: Loan Products Page › should have search input —
1.9s - ✅ E2E: Loan Products Page › should navigate to loan product create form —
2.6s - ✅ E2E: Savings Products Page › should display savings products list page —
1.9s - ✅ E2E: Other Products Pages › Fixed Deposit Products page loads —
1.9s - ✅ E2E: Other Products Pages › Recurring Deposit Products page loads —
1.9s - ✅ E2E: Other Products Pages › Share Products page loads —
1.9s - ✅ E2E: Other Products Pages › Tax Components page loads —
2.3s - ✅ E2E: Other Products Pages › Tax Groups page loads —
2.4s - ✅ E2E: Other Products Pages › Floating Rates page loads —
1.9s - ✅ E2E: Loans Portfolio › should display loans portfolio page —
1.9s - ✅ E2E: Loans Portfolio › should have Create Loan Account button —
1.8s - ✅ E2E: Loans Portfolio › should display table with correct headers —
1.9s - ✅ E2E: Loans Portfolio › should show empty state when no loans exist —
1.8s - ✅ E2E: Loans Portfolio › should have search input —
2.4s - ✅ E2E: Loans Portfolio › should have pagination controls —
1.9s - ✅ E2E: Header & Global Elements › should display Fineract logo and title in header —
1.6s - ✅ E2E: Header & Global Elements › should display logged-in username —
2.0s - ✅ E2E: Header & Global Elements › should display office name for user —
1.6s - ✅ E2E: Header & Global Elements › should have Logout button —
1.6s - ✅ E2E: Header & Global Elements › should have language selector in header —
2.2s - ✅ E2E: Header & Global Elements › should display render time —
1.6s - ✅ E2E: Header & Global Elements › should display business date —
1.6s
feature-coverage.spec.ts
- ✅ Navigation & Sidebar › all main navigation links are visible in sidebar —
2.1s - ✅ Navigation & Sidebar › sidebar navigation routes to correct pages —
3.0s - ✅ Navigation & Sidebar › navigating to /accounting redirects to /accounting/chart-of-accounts —
3.2s - ✅ Navigation & Sidebar › navigating to /organization redirects to /organization/offices —
2.8s - ✅ Navigation & Sidebar › navigating to /system redirects to /system/data-tables —
2.8s - ✅ Navigation & Sidebar › an unknown route keeps its URL and offers recovery actions —
3.5s - ✅ Navigation & Sidebar › header shows logged-in user info —
1.6s - ✅ Navigation & Sidebar › help tour button is visible and interactive —
1.6s - ✅ Navigation & Sidebar › logout button is visible —
1.9s - ✅ Navigation & Sidebar › language selector is present —
1.5s - ✅ Dashboard › dashboard shows key metrics cards —
1.5s - ✅ Dashboard › dashboard shows pending approvals section —
1.9s - ✅ Dashboard › dashboard shows loan and savings status distribution —
1.6s - ✅ Dashboard › dashboard shows system operational status —
1.6s - ✅ Groups › groups page renders with title —
1.8s - ✅ Groups › groups page has create button —
1.8s - ✅ Centers › centers page renders with title —
1.8s - ✅ Centers › centers page has create button —
2.3s - ✅ Organization › offices page loads with list —
1.9s - ✅ Organization › staff page loads —
1.9s - ✅ Organization › funds page loads —
1.9s - ✅ Organization › payment types page loads —
1.9s - ✅ Accounting › chart of accounts loads —
1.9s - ✅ Accounting › journal entries page loads —
2.5s - ✅ Accounting › accounting closures loads —
1.8s - ✅ Accounting › accounting rules loads —
1.8s - ✅ Accounting › financial activity mappings loads —
1.8s - ✅ Accounting › charges page loads —
1.8s - ✅ Security › users page loads —
1.8s - ✅ Security › roles page loads —
2.3s - ✅ Security › audit logs page loads —
2.0s - ✅ Security › leftover audit trails path lands on audits, not the dashboard —
3.1s - ✅ Products - Loan & Savings › loan products page loads —
1.9s - ✅ Products - Loan & Savings › savings products page loads —
1.8s - ✅ Products - Loan & Savings › tax components page loads —
2.5s - ✅ Products - Loan & Savings › tax groups page loads —
1.8s - ✅ Products - Loan & Savings › floating rates page loads —
1.9s - ✅ Products - Loan & Savings › savings accounts page loads —
1.9s - ✅ Settings › global configurations page loads —
1.8s - ✅ Settings › holidays page loads —
1.9s - ✅ Settings › working days page loads —
2.2s - ✅ System › data tables page loads —
1.8s - ✅ System › bulk import page loads —
1.9s - ✅ System › delinquency page loads —
1.9s - ✅ Tellers › tellers page loads with create button —
1.8s - ✅ Transfers › account transfer page loads —
2.0s - ✅ Transfers › standing instructions page loads —
2.5s - ✅ Transfers › SI history page loads —
1.8s - ✅ Embedded Fintech › asset owners page loads —
2.0s
functional-coverage.spec.ts
- ✅ Client CRUD Workflow › should complete full client creation flow — Person —
3.8s - ✅ Client CRUD Workflow › should complete full client creation flow — Entity —
3.4s - ✅ Client CRUD Workflow › should cancel client creation and return to list —
2.4s - ✅ Client CRUD Workflow › should disable office and legal form in edit mode —
4.7s - ✅ Client View & Status Transitions › should display client view with correct details —
3.7s - ✅ Client View & Status Transitions › should show actions menu for pending client (status 100) —
3.3s - ✅ Client View & Status Transitions › should show actions menu for active client (status 300) —
3.7s - ✅ Client View & Status Transitions › should show actions menu for closed client (status 600) —
3.5s - ✅ Client View & Status Transitions › should show New Account menu for active client —
3.4s - ✅ Client View & Status Transitions › should navigate from client view to client list via breadcrumb —
3.5s - ✅ Client View & Status Transitions › should navigate back from client view —
3.6s - ✅ Client View Tabs › should display all expected tabs on client view —
3.9s - ✅ Client View Tabs › should switch between client view tabs —
4.0s - ✅ Search & Filter Interactions › should have search input on clients page and accept input —
1.9s - ✅ Search & Filter Interactions › should have office filter on groups page —
2.0s - ✅ Search & Filter Interactions › should have office filter on loans page —
1.8s - ✅ Search & Filter Interactions › should have search input on charges page —
1.9s - ✅ Navigation Flow Verification › should navigate full client lifecycle: list → create → back → list —
2.4s - ✅ Navigation Flow Verification › should navigate from dashboard to all top-level pages via sidebar —
4.4s - ✅ Navigation Flow Verification › should go from loan products → create → back —
2.3s - ✅ Office CRUD › should validate office create form — save disabled when empty —
2.1s - ✅ Office CRUD › should validate office create form — save enabled when filled —
2.5s - ✅ Office CRUD › should cancel office creation —
2.2s - ✅ Organization Create Flows › staff create form loads —
2.2s - ✅ Organization Create Flows › funds create form loads —
2.6s - ✅ Organization Create Flows › payment types create form loads —
2.0s - ✅ Accounting CRUD › accounting closure create form loads —
2.1s - ✅ Accounting CRUD › accounting rule create form loads —
2.1s - ✅ Accounting CRUD › financial activity mapping create form loads —
2.0s - ✅ Accounting CRUD › charge create form loads —
2.0s - ✅ Accounting CRUD › chart of accounts create form loads —
2.4s - ✅ Settings CRUD › global configurations page has editable toggle —
1.9s - ✅ Settings CRUD › holiday create form loads —
2.2s - ✅ Settings CRUD › working days page has save button —
1.9s - ✅ System CRUD › data table create form loads —
2.0s - ✅ System CRUD › delinquency page has create buttons for ranges and buckets —
1.9s - ✅ Security CRUD › role create form loads —
2.4s - ✅ Security CRUD › audit logs search form has date range —
2.2s - ✅ Security CRUD › audit logs list exports the loaded page as CSV —
2.2s - ✅ Reporting — Run Report Flow › should navigate to report and verify report parameters —
2.8s - ✅ Teller CRUD › teller create form loads —
2.2s - ✅ Create Office Dialog from Client Form › should open create office dialog from client create form —
2.4s
global-search-nav-shortcuts.spec.ts
- ✅ Global search navigation shortcuts › offers a settings page the entity search cannot return —
2.5s - ✅ Global search navigation shortcuts › navigates to the page behind a shortcut —
2.2s - ✅ Global search navigation shortcuts › keeps the results open across the mousedown that starts a click, so a slow render cannot race the dropdown closed —
2.3s - ✅ Global search navigation shortcuts › withholds a shortcut the user has no permission to reach —
2.4s
global-search-navigation.spec.ts
- ✅ Global search navigation › does not query the backend for a single character —
2.5s - ✅ Global search navigation › sends one request for a phrase typed straight through —
3.0s - ✅ Global search navigation › opens the client behind a client result —
2.8s - ✅ Global search navigation › opens the loan behind a loan result —
2.4s - ✅ Global search navigation › opens the savings account behind a savings result —
2.3s - ✅ Global search navigation › clears the query and closes the dropdown after a selection —
2.1s - ✅ Global search navigation › closes the dropdown when focus leaves without a selection —
2.3s - ✅ Global search navigation › shows nothing rather than an empty dropdown when there are no matches —
2.5s
group-detail.spec.ts
- ✅ Group detail › custom field tabs expose the app keyboard and panel contract at 1280px —
4.6s - ✅ Group detail › custom field tabs expose the app keyboard and panel contract at 390px —
4.1s - ✅ Group detail › asks for the associations, and shows every member rather than only the active ones —
4.0s - ✅ Group detail › closes a group with the reason id and a Fineract-formatted date —
4.8s - ✅ Group detail › does not offer a client who is already a member, and associates the one it does —
4.4s - ✅ Group detail › unassigns a committee role by the assignment id, not the role id —
4.0s - ✅ Group detail › offers a retry when the group cannot be loaded —
3.9s - ✅ Group detail › says so when no closure reason has been defined —
4.1s
guidance-tour.spec.ts
- ✅ the guided tour › highlights the System Status card, not the sidebar, on the dashboard tour —
2.1s - ✅ the guided tour › presents the card as a dialog named and described by its own copy —
1.7s - ✅ the guided tour › announces the step counter as a polite live region —
2.1s - ✅ the guided tour › closes on Escape and hands focus back to the Guide button —
2.1s - ✅ the guided tour › names an unmatched route after itself instead of handing it the dashboard tour —
3.0s - ⏭️ the guided tour at a phone viewport › opens from the overflow menu as a full-width bottom sheet —
1.5s
keyboard-shortcuts.spec.ts
- ✅ Alt+C jumps straight to Create Client from anywhere —
2.0s - ✅ Alt+G jumps to Create Group —
2.3s - ✅ Alt+E jumps to Create Center —
1.9s - ✅ Alt+H opens the guidance tour for the current page —
1.6s - ✅ typing in the global search box does not trigger the Create Client shortcut —
1.6s
list-load-failure.spec.ts
- ✅ entity-to-entity mapping › renders the rows the endpoint returns, rather than claiming there are none —
3.7s - ✅ entity-to-entity mapping › shows a failure state, not an empty one, when the payload cannot be read —
3.8s - ✅ entity-to-entity mapping › retries and recovers —
3.6s - ✅ report mailing jobs › reads rows out of the paged envelope the endpoint returns —
4.0s - ✅ report mailing jobs › shows a failure state when the request errors —
3.4s
list-pagination.spec.ts
- ✅ List pagination › advances through pages and back again —
3.6s - ✅ List pagination › jumps to the last page —
3.4s - ✅ List pagination › returns to the first page when a filter changes —
3.7s - ✅ List pagination › keeps search text when paging and shows the v2 account number —
4.3s - ✅ List pagination › redirects the old search page and exposes only one client navigation item —
5.2s - ✅ List pagination › keeps an account-number search broad and disables unsupported Office sorting —
4.4s - ✅ List pagination › returns to the first page when searching —
4.3s - ✅ Profile › renders the signed-in user rather than hanging on a spinner —
3.8s - ✅ Profile › changes the signed-in user password from the profile screen —
3.6s - ✅ Profile › shows an error when the profile cannot be loaded —
3.4s - ✅ List load failure › reports the failure and reloads when the user retries —
3.9s - ✅ List load failure › calendars: reports the failure and reloads when the user retries —
3.5s - ✅ List load failure › accounting rules: reports the failure and reloads when the user retries —
3.8s
loan-portfolio-summary.spec.ts
- ✅ Loan Portfolio Summary › searching sends entities: loans and shows the grouped results —
3.6s - ✅ Loan Portfolio Summary › Edit Parameters returns from the results view to the filter form —
3.4s - ✅ Loan Portfolio Summary › checking the outstanding-amount filter sends the between min/max values —
3.8s - ✅ Loan Portfolio Summary › switching to a single-value comparison condition sends one value —
4.1s
loan-product-down-payment.spec.ts
- ✅ Loan product down payment and tranches › down payment is offered only for a progressive product —
4.4s - ✅ Loan product down payment and tranches › the percentage and auto-repayment appear only once down payment is on —
4.1s - ✅ Loan product down payment and tranches › multi-tranche disbursement reveals its tranche count, on either engine —
2.6s - ✅ Loan product down payment and tranches › submits the down payment and tranche settings it was given —
3.8s - ✅ Loan product down payment and tranches › does not send a down payment on a cumulative product —
4.8s - ✅ Loan product down payment and tranches › income recognition is offered only for a progressive product —
3.3s - ✅ Loan product down payment and tranches › the capitalisation details appear only once it is on —
3.4s - ✅ Loan product down payment and tranches › submits the income recognition settings it was given —
4.0s - ✅ Loan product down payment and tranches › does not send income recognition on a cumulative product —
4.3s - ✅ Loan product down payment and tranches › interest recalculation reveals its mandatory settings only once it is on —
2.5s - ✅ Loan product down payment and tranches › the rest interval appears only when the frequency is not the repayment period —
14.2s - ✅ Loan product down payment and tranches › submits the interest recalculation settings it was given —
2.8s - ✅ Loan product down payment and tranches › does not send recalculation settings once it is switched back off —
2.7s
charge-refund.spec.ts
- ✅ refunds the remaining balance of a collected loan charge —
5.2s
client-empty-account-cta.spec.ts
- ✅ empty account tabs offer the matching creation action —
4.3s
client-load-error.spec.ts
- ✅ shows a not-found state and returns to the list, without an error toast —
3.3s - ✅ offers a retry for a transient failure, and recovers on success —
2.6s
contract-termination.spec.ts
- ✅ terminates and undoes a progressive loan contract —
6.9s
loan-schedule-type-gating.spec.ts
- ✅ Loan schedule type gating › a cumulative loan offers neither progressive-only tab, and fetches neither —
3.2s - ✅ Loan schedule type gating › a progressive loan shows only the capabilities it actually has —
2.5s - ✅ Loan schedule type gating › fetches buy-down fees for a progressive loan that has no external id —
2.5s - ✅ Loan schedule type gating › a progressive loan with both capabilities shows both —
3.2s - ✅ Loan schedule type gating › a charged-off loan says so and offers the reversal instead —
2.6s - ✅ Loan schedule type gating › a healthy loan offers charge-off and no marker —
2.9s
loan-servicing-gaps.spec.ts
- ✅ Loan servicing gaps › edits an interest pause through PUT while preserving its existing dates —
3.1s - ✅ Loan servicing gaps › undo approval sends an empty body, without the locale the platform refuses —
3.3s - ✅ Loan servicing gaps › undo approval carries the reason when one was given —
3.8s - ✅ Loan servicing gaps › undo approval is offered only while the loan is approved —
3.2s - ✅ Loan servicing gaps › the delinquency tab shows the summary the loan carries and the tags it fetches —
3.1s - ✅ Loan servicing gaps › the data-only tabs stay hidden when the loan carries nothing for them —
2.4s - ✅ Loan servicing gaps › each data-only tab appears and renders once the loan carries its data —
3.4s - ✅ Loan servicing gaps › disburse to savings sends the date and amount, with the platform date format —
3.3s - ✅ Loan servicing gaps › disburse to savings is offered only on an approved loan —
2.9s - ✅ Loan servicing gaps › unassign loan officer sends the date, and appears only when one is assigned —
4.0s - ✅ Loan servicing gaps › unassign loan officer is hidden on a loan with no officer —
2.9s - ✅ Loan servicing gaps › undo last disbursal appears only on a multi-disbursal loan, and sends an empty body —
3.8s - ✅ Loan servicing gaps › undo last disbursal is hidden on a single-disbursal loan —
3.1s - ✅ Loan servicing gaps › close as rescheduled is offered on an active loan —
2.9s - ✅ Loan servicing gaps › revising the amounts is offered on an approved loan —
2.5s - ✅ Loan servicing gaps › revising the amounts is hidden before approval —
3.0s - ✅ Loan servicing gaps › revising the approved amount sends the new amount and locale —
3.3s - ✅ Loan servicing gaps › revising the available disbursement amount sends the new amount, including zero —
3.8s
logout-reason-notice.spec.ts
- ✅ explains an inactivity sign-out —
1.4s - ✅ explains an expired session, with different wording —
1.4s - ✅ stays silent when the user came to sign in of their own accord —
243ms - ✅ stays silent for a reason it does not recognise, rather than showing a blank notice —
234ms
rbac-feature-flag.spec.ts
- ✅ RBAC permission gating (rbacEnabled = true) › a limited user does not see permission-gated nav groups —
1.4s - ✅ RBAC permission gating (rbacEnabled = true) › a user with READ_USER sees only the Security entries that permission covers —
1.4s - ✅ RBAC permission gating (rbacEnabled = true) › the Security group fills in as the user is granted each of its permissions —
1.3s - ✅ RBAC permission gating (rbacEnabled = true) › a superuser (ALL_FUNCTIONS) sees all permission-gated groups —
1.4s - ✅ RBAC institution-feature gating (rbacEnabled = true) › universal institution shows Groups, Centers and Collection Sheet —
1.4s - ✅ RBAC institution-feature gating (rbacEnabled = true) › commercial bank (cb) hides all group-lending features —
1.7s - ✅ RBAC institution-feature gating (rbacEnabled = true) › credit union (cu) shows Groups but hides Centers and Collection Sheet —
1.4s - ✅ rbacEnabled = false › restores the pre-RBAC behaviour of showing everything —
1.4s - ✅ deployment navigation overrides › removes the entries the deployment names by id, leaving the rest alone —
1.4s - ✅ deployment navigation overrides › ignores a labelKey where an id is required —
1.3s - ✅ deployment navigation overrides › removes them even where RBAC is off —
1.5s
rbac-route-protection.spec.ts
- ✅ route authorization › a superuser reaches every sampled route and sees the full navigation —
11.3s - ✅ route authorization › a single-module user is confined to that module —
7.7s - ✅ route authorization › a read-only user gets the lists and not the forms —
10.0s - ✅ route authorization › a user with an empty permission list is refused everywhere and the app still works —
8.1s - ✅ route authorization › a session carrying no permissions field is treated as carrying none —
4.4s - ✅ route authorization › an unrecognised permission code grants nothing —
5.1s - ✅ route authorization › an unauthenticated visitor is asked to sign in, not told they are forbidden —
4.9s - ✅ route authorization › a deployment with RBAC turned off behaves as it did before the guard —
6.5s - ✅ the Access Denied page › says what happened, under a single heading —
2.9s - ✅ the Access Denied page › moves focus to the heading, since the user did not ask to come here —
2.9s - ✅ the Access Denied page › announces itself politely —
3.1s - ✅ the Access Denied page › names the permissions the screen wanted, so the user can ask for them —
2.8s - ✅ the Access Denied page › offers a way back that the user is allowed to take —
2.9s - ✅ the Access Denied page › is reachable by keyboard alone —
3.2s - ✅ permission feedback › a visible nav entry says what the user can do in that module —
1.3s - ✅ permission feedback › a nav entry carries no hint when there is nothing specific to say —
1.4s - ✅ navigation and routes agree › a hidden menu entry is also refused by URL, and a shown one is not —
4.6s - ✅ navigation and routes agree › the create button is withheld from a user whose create route would refuse them —
3.2s
report-enhancements.spec.ts
- ✅ Report Enhancements, Pagination, and Help Tour › should run report, show paginated data, and download CSV —
3.5s - ✅ Report Enhancements, Pagination, and Help Tour › should trigger guidance help tour and navigate steps —
2.8s
reporting.spec.ts
- ✅ Reporting › should display list of reports —
1.6s - ✅ Reporting › should navigate to run report page —
1.7s
scheduler-jobs.spec.ts
- ✅ Scheduler Jobs bulk run › Run Selected is disabled until a job is checked —
3.7s - ✅ Scheduler Jobs bulk run › Select All checks every job, and running confirms then triggers each one —
3.0s - ✅ Scheduler Jobs bulk run › declining the confirmation runs nothing —
3.0s
two-factor-authentication.spec.ts
- ✅ two-step verification › asks for a code and lets the user in once it is accepted —
1.4s - ✅ two-step verification › sends the token on every later request —
1.5s - ✅ two-step verification › keeps the user on the step when the code is wrong, and says why —
1.3s - ✅ two-step verification › accepts a correct code after a wrong one —
1.5s - ✅ two-step verification › offers the choice when there is more than one channel —
1.3s - ✅ two-step verification › says so when the account has no channel configured —
1.2s - ✅ two-step verification › returns to the choice when the code could not be sent —
1.5s - ✅ two-step verification › does not let a half-finished session reach the application —
2.8s - ✅ two-step verification › backing out returns to the password form —
1.3s - ✅ two-step verification › a deployment without a second factor signs in exactly as before —
1.4s
working-capital-loan-actions.spec.ts
- ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › shows delinquency action history and submits a new one —
3.8s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › shows breach action history and submits a new one —
4.2s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › shows near-breach action history and submits a new one —
3.5s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › attaches and detaches a loan originator —
3.9s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › adds a new charge and waives an existing one —
3.8s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › shows rate-change history, amortization schedule, and delinquency range tags —
2.7s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › marks the loan as fraud, applies a discount, and changes the payment rate —
4.7s
Slowest 10 — what the shard counts should be tuned against
| Test | Spec | Time |
|---|---|---|
| Loan product down payment and tranches › the rest interval appears only when the frequency is not the repayment period | loan-product-down-payment.spec.ts |
14.2s |
| Runtime accessibility › banner and dashboard content have no blocking violations | accessibility.spec.ts |
13.8s |
| route authorization › a superuser reaches every sampled route and sees the full navigation | rbac-route-protection.spec.ts |
11.3s |
| route authorization › a read-only user gets the lists and not the forms | rbac-route-protection.spec.ts |
10.0s |
| route authorization › a user with an empty permission list is refused everywhere and the app still works | rbac-route-protection.spec.ts |
8.1s |
| route authorization › a single-module user is confined to that module | rbac-route-protection.spec.ts |
7.7s |
| terminates and undoes a progressive loan contract | contract-termination.spec.ts |
6.9s |
| route authorization › a deployment with RBAC turned off behaves as it did before the guard | rbac-route-protection.spec.ts |
6.5s |
| refunds the remaining balance of a collected loan charge | charge-refund.spec.ts |
5.2s |
| Client form date pickers › stay usable on a second visit to the create form | client-date-picker-revisit.spec.ts |
5.2s |
📼 Download the HTML report, videos and traces — see the playwright-report-mocked artifact.
Generated by run 36758220704 from 432254f. The run executed a fork branch, so treat its contents as unverified.
E2E — real Fineract🎭 E2E Tests✅ All green — 94 passed · 0 failed · 0 skipped, across 30 spec files in 7m 39s. By spec file
All 94 tests — click to expand
Slowest 10 — what the shard counts should be tuned against
📼 Download the HTML report, videos and traces — see the Generated by run 36758220704 from |
Summary
formatArrayDatehelperValidation
npx --yes node@22 ./node_modules/@angular/cli/bin/ng run fineract-backoffice-ui:unit-test --watch=false— 1662 passednpm run lintnpx prettier --check src/app/features/products/floating-rates/floating-rate-form.component.ts src/app/features/products/floating-rates/floating-rate-form.component.test.tsnpm run build— passed with the existing header component budget warningFixes #257
Co-authored-by: insisong emmanuelisaacnsisong@gmail.com