refactor: migrate system buttons to app-button - #596
Conversation
E2E — mocked backend🎭 E2E Tests✅ All green — 364 passed · 0 failed · 1 skipped · 1 flaky, across 30 spec files in 6m 57s.
|
| Spec | ✅ | ❌ | ⏭️ | 🔒 | Time |
|---|---|---|---|---|---|
| accessibility.spec.ts | 4 | 0 | 0 | 0 | 28.5s |
| all-functions-read-shortcut.spec.ts | 5 | 0 | 0 | 0 | 9.1s |
| branded-deployment.spec.ts | 9 | 0 | 0 | 0 | 18.2s |
| breadcrumb.spec.ts | 2 | 0 | 0 | 0 | 5.7s |
| client-date-picker-revisit.spec.ts | 1 | 0 | 0 | 0 | 6.0s |
| client-servicing-gaps.spec.ts | 14 | 0 | 0 | 0 | 59.6s |
| client.spec.ts | 1 | 0 | 0 | 0 | 4.0s |
| date-picker-revisit.spec.ts | 6 | 0 | 0 | 0 | 27.0s |
| deployment-customization.spec.ts | 19 | 0 | 0 | 0 | 35.4s |
| e2e-journey.spec.ts | 81 | 0 | 0 | 0 | 2m 51s |
| feature-coverage.spec.ts | 48 | 0 | 0 | 0 | 1m 41s |
| functional-coverage.spec.ts | 42 | 0 | 0 | 0 | 1m 52s |
| global-search-nav-shortcuts.spec.ts | 4 | 0 | 0 | 0 | 9.7s |
| global-search-navigation.spec.ts | 8 | 0 | 0 | 0 | 19.7s |
| group-detail.spec.ts | 8 | 0 | 0 | 0 | 34.2s |
| guidance-tour.spec.ts | 5 | 0 | 1 | 0 | 13.1s |
| keyboard-shortcuts.spec.ts | 5 | 0 | 0 | 0 | 9.7s |
| list-pagination.spec.ts | 12 | 0 | 0 | 0 | 45.3s |
| client-empty-account-cta.spec.ts | 1 | 0 | 0 | 0 | 6.2s |
| loan-portfolio-summary.spec.ts | 4 | 0 | 0 | 0 | 14.6s |
| loan-product-down-payment.spec.ts | 13 | 0 | 0 | 0 | 1m 3s |
| loan-schedule-type-gating.spec.ts | 5 | 0 | 0 | 0 | 17.5s |
| loan-servicing-gaps.spec.ts | 14 | 0 | 0 | 0 | 54.3s |
| rbac-feature-flag.spec.ts | 11 | 0 | 0 | 0 | 19.4s |
| rbac-route-protection.spec.ts | 18 | 0 | 0 | 0 | 1m 38s |
| report-enhancements.spec.ts | 2 | 0 | 0 | 0 | 5.8s |
| reporting.spec.ts | 2 | 0 | 0 | 0 | 3.7s |
| scheduler-jobs.spec.ts | 3 | 0 | 0 | 0 | 10.9s |
| two-factor-authentication.spec.ts | 10 | 0 | 0 | 0 | 18.4s |
| working-capital-loan-actions.spec.ts | 7 | 0 | 0 | 0 | 30.9s |
All 365 tests — click to expand
accessibility.spec.ts
- ✅ Runtime accessibility › client list has no blocking violations —
4.8s - ✅ Runtime accessibility › client form has no blocking violations —
4.2s - ✅ Runtime accessibility › banner and dashboard content have no blocking violations —
14.5s - ✅ Runtime accessibility › create office dialog has no blocking violations —
5.0s
all-functions-read-shortcut.spec.ts
- ✅ ALL_FUNCTIONS_READ shortcut › grants read access to the Clients list without any explicit READ_CLIENT permission —
1.9s - ✅ ALL_FUNCTIONS_READ shortcut › does not grant the Create Client action —
1.9s - ✅ ALL_FUNCTIONS_READ shortcut › does not grant Create Client even combined with an explicit READ_CLIENT permission —
1.8s - ✅ ALL_FUNCTIONS_READ shortcut › a user with the real CREATE_CLIENT permission still sees the button —
1.7s - ✅ ALL_FUNCTIONS_READ shortcut › ALL_FUNCTIONS (full superuser) still sees the Create Client button —
1.9s
branded-deployment.spec.ts
- ✅ a fully branded deployment › wears the institution’s name and mark, not Fineract’s —
1.6s - ✅ a fully branded deployment › carries the institution’s palette into its own chrome and into Ionic —
2.5s - ✅ 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.6s - ✅ a fully branded deployment › offers the institution’s own systems beside Fineract’s screens —
1.6s - ✅ a fully branded deployment › restates the labels the institution words differently —
2.0s - ✅ a fully branded deployment › keeps a readable palette in dark mode, with a label colour to match —
1.6s - ✅ a fully branded deployment › does not leak a light colour into the dark palette —
2.6s - ✅ a fully branded deployment › reports no configuration defects for the published example —
3.2s
breadcrumb.spec.ts
- ✅ a single-crumb page shows no breadcrumb trail —
1.7s - ✅ a nested page shows a trail, and the ancestor crumb navigates back —
4.0s
client-date-picker-revisit.spec.ts
- ✅ Client form date pickers › stay usable on a second visit to the create form —
6.0s
client-servicing-gaps.spec.ts
- ✅ Client transfers › proposing a transfer sends the destination, the date and the format that parses it —
4.5s - ✅ Client transfers › a one-step transfer omits the date the platform refuses —
4.7s - ✅ Client transfers › the client’s own office is not offered as a destination —
4.0s - ✅ Client transfers › accepting a transfer sends a note and nothing else —
4.2s - ✅ Client transfers › accepting with no note sends an empty body —
5.3s - ✅ Client transfers › rejecting a transfer is offered while one is pending —
4.0s - ✅ Client transfers › withdrawing is offered from on hold, which is the only way back —
4.2s - ✅ Client transfers › answers to a transfer are not offered when none is pending —
3.7s - ✅ Client staff and default savings account › assigning a member of staff sends the staff id —
4.1s - ✅ Client staff and default savings account › unassigning echoes the current holder back, which the platform requires —
4.3s - ✅ Client staff and default savings account › unassigning is not offered when nobody is assigned —
4.3s - ✅ Client staff and default savings account › the assigned officer is shown on the header —
3.5s - ✅ Client staff and default savings account › setting the default savings account sends the account id —
4.4s - ✅ Undoing a rejection › posts the command name the platform recognises, not the menu identifier —
4.4s
client.spec.ts
- ✅ Client Management › should create a new client —
4.0s
date-picker-revisit.spec.ts
- ✅ Date pickers on revisited forms › office form keeps its pickers usable on every visit —
4.0s - ✅ Date pickers on revisited forms › staff form keeps its pickers usable on every visit —
3.9s - ✅ Date pickers on revisited forms › holiday form keeps its pickers usable on every visit —
4.8s - ✅ Date pickers on revisited forms › teller form keeps its pickers usable on every visit —
3.7s - ✅ Date pickers on revisited forms › accounting closure form keeps its pickers usable on every visit —
3.8s - ✅ Date pickers on revisited forms › floating rate form keeps its pickers usable on every visit —
6.8s(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.7s - ✅ with no overlay mounted › logs no federation parse error on load —
1.6s - ✅ branding › applies colour and density tokens to the document —
2.5s - ✅ branding › recolours Ionic through the same tokens —
1.6s - ✅ branding › renames the product in the header and the tab title —
3.0s - ✅ branding › serves the deployment logo and names it after the deployment —
1.6s - ✅ branding › refuses a fill that cannot carry the white text baked into the stylesheet —
2.6s - ✅ branding › accepts a light accent and derives a dark label for it —
1.6s - ✅ branding › ignores a token outside the published allow-list, and says so —
1.6s - ✅ navigation › hides an entry named by its id —
1.6s - ✅ navigation › does not hide an entry named by its labelKey —
1.6s - ✅ navigation › renames and reorders entries —
2.5s - ✅ navigation › adds an external entry that opens in a new tab —
1.6s - ✅ navigation › nests an added entry under an existing group —
1.6s - ✅ navigation › gates an added entry on permissions like any built-in one —
1.6s - ✅ navigation › drops an external entry with no usable url rather than rendering a dead link —
1.6s - ✅ layering › merges over config.json instead of replacing it —
2.6s - ✅ layering › a malformed overlay leaves the application usable —
1.6s
e2e-journey.spec.ts
- ✅ E2E: Login Flow › should display login page with all required fields —
1.3s - ✅ E2E: Login Flow › should have Sign In button disabled when fields are empty —
1.3s - ✅ E2E: Login Flow › should enable Sign In when credentials are entered —
1.4s - ✅ E2E: Login Flow › should redirect to dashboard after successful login —
1.6s - ✅ E2E: Login Flow › should display language selector on login page —
1.3s - ✅ E2E: Login Flow › should display API endpoint selector with value —
1.8s - ✅ E2E: Dashboard › should display dashboard summary cards —
1.6s - ✅ E2E: Dashboard › should display system health as Online —
1.6s - ✅ E2E: Dashboard › should display pending approvals section —
1.6s - ✅ E2E: Dashboard › should display loan and savings status distribution charts —
1.6s - ✅ E2E: Dashboard › should display system operational status —
1.6s - ✅ E2E: Dashboard › should have header with business date, render time, and logout —
1.6s - ✅ E2E: Dashboard › should have sidebar toggle button —
2.5s - ✅ E2E: Dashboard › should have global search bar in header —
1.6s - ✅ E2E: Dashboard › should have Guide button in header —
1.6s - ✅ E2E: Dashboard › should have dark mode toggle button —
1.6s - ✅ E2E: Sidebar Navigation › should have all main navigation links —
2.1s - ✅ E2E: Sidebar Navigation › should have Products section with sub-links —
2.1s - ✅ E2E: Sidebar Navigation › should have Transfers section with sub-links —
1.7s - ✅ E2E: Sidebar Navigation › should have Accounting section with sub-links —
1.6s - ✅ E2E: Sidebar Navigation › should have Security section —
2.6s - ✅ E2E: Sidebar Navigation › should have Settings section —
1.7s - ✅ E2E: Sidebar Navigation › should have Organization section —
1.7s - ✅ E2E: Sidebar Navigation › should have System section —
1.6s - ✅ E2E: Sidebar Navigation › should navigate to all major pages via sidebar —
3.8s - ✅ E2E: Offices › should display offices list with table —
1.9s - ✅ E2E: Offices › should have Create Office button —
2.9s - ✅ E2E: Offices › should navigate to office create form —
2.0s - ✅ E2E: Offices › should validate office create form - save disabled when empty —
2.1s - ✅ E2E: Offices › should fill office create form and enable save —
2.5s - ✅ E2E: Offices › should cancel office creation and return to list —
2.1s - ✅ E2E: Offices › should have search input on offices page —
2.0s - ✅ E2E: Offices › should show edit button for each office —
2.0s - ✅ E2E: Offices › should have pagination controls —
1.9s - ✅ E2E: Clients › should display clients list page —
1.9s - ✅ E2E: Clients › should display client data in table —
2.3s - ✅ E2E: Clients › should show ACTIVE status badge —
2.8s - ✅ E2E: Clients › should have Create Client button —
1.9s - ✅ E2E: Clients › should show empty state when no clients exist —
2.3s - ✅ E2E: Clients › should have search input and status filter —
2.1s - ✅ E2E: Clients › should have pagination controls —
2.4s - ✅ E2E: Client Creation › should navigate to client create form —
2.2s - ✅ E2E: Client Creation › should display all required client form fields, across the wizard steps —
3.5s - ✅ E2E: Client Creation › should display optional client form fields, across the wizard steps —
2.9s - ✅ E2E: Client Creation › should have Next disabled until the current step is valid —
2.7s - ✅ E2E: Client Creation › should populate office dropdown from API —
2.3s - ✅ E2E: Client Creation › should fill client form and enable save on the last step —
3.3s - ✅ 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 —
2.9s - ✅ E2E: Client Creation › should have add office quick-action button —
2.2s - ✅ E2E: Client Creation › should have help icons for form fields —
1.9s - ✅ 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 —
2.7s - ✅ E2E: Client Creation › should have Active checkbox checked by default —
2.1s - ✅ E2E: Client Creation › should handle Entity legal form showing fullname field —
4.3s - ✅ 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 —
1.9s - ✅ E2E: Loan Products Page › should show empty state when no products exist —
2.4s - ✅ E2E: Loan Products Page › should have search input —
1.9s - ✅ E2E: Loan Products Page › should navigate to loan product create form —
3.1s - ✅ E2E: Savings Products Page › should display savings products list page —
1.9s - ✅ E2E: Other Products Pages › Fixed Deposit Products page loads —
2.3s - ✅ 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 —
1.9s - ✅ E2E: Other Products Pages › Tax Groups page loads —
1.9s - ✅ E2E: Other Products Pages › Floating Rates page loads —
2.9s - ✅ E2E: Loans Portfolio › should display loans portfolio page —
2.0s - ✅ 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 —
1.8s - ✅ E2E: Loans Portfolio › should have pagination controls —
2.8s - ✅ E2E: Header & Global Elements › should display Fineract logo and title in header —
1.6s - ✅ E2E: Header & Global Elements › should display logged-in username —
1.6s - ✅ 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 —
1.6s - ✅ E2E: Header & Global Elements › should display render time —
2.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 —
2.8s - ✅ Navigation & Sidebar › navigating to /organization redirects to /organization/offices —
3.8s - ✅ Navigation & Sidebar › navigating to /system redirects to /system/data-tables —
2.9s - ✅ 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.6s - ✅ Navigation & Sidebar › language selector is present —
1.6s - ✅ Dashboard › dashboard shows key metrics cards —
2.6s - ✅ Dashboard › dashboard shows pending approvals section —
1.5s - ✅ 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 —
2.3s - ✅ Centers › centers page has create button —
1.8s - ✅ Organization › offices page loads with list —
1.8s - ✅ Organization › staff page loads —
1.9s - ✅ Organization › funds page loads —
1.9s - ✅ Organization › payment types page loads —
1.9s - ✅ Accounting › chart of accounts loads —
2.7s - ✅ Accounting › journal entries page loads —
2.0s - ✅ Accounting › accounting closures loads —
1.8s - ✅ Accounting › accounting rules loads —
1.9s - ✅ Accounting › financial activity mappings loads —
1.8s - ✅ Accounting › charges page loads —
1.8s - ✅ Security › users page loads —
2.7s - ✅ Security › roles page loads —
1.9s - ✅ Security › audit logs page loads —
2.1s - ✅ Security › leftover audit trails path lands on audits, not the dashboard —
3.4s - ✅ Products - Loan & Savings › loan products page loads —
1.8s - ✅ Products - Loan & Savings › savings products page loads —
2.7s - ✅ Products - Loan & Savings › tax components page loads —
1.9s - ✅ Products - Loan & Savings › tax groups page loads —
1.9s - ✅ 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 —
2.8s - ✅ Settings › working days page loads —
1.8s - ✅ System › data tables page loads —
1.8s - ✅ System › bulk import page loads —
2.9s - ✅ System › delinquency page loads —
1.9s - ✅ Tellers › tellers page loads with create button —
1.9s - ✅ Transfers › account transfer page loads —
1.9s - ✅ Transfers › standing instructions page loads —
1.8s - ✅ Transfers › SI history page loads —
1.8s - ✅ Embedded Fintech › asset owners page loads —
2.8s
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 —
4.0s - ✅ Client CRUD Workflow › should cancel client creation and return to list —
2.8s - ✅ Client CRUD Workflow › should disable office and legal form in edit mode —
3.1s - ✅ Client View & Status Transitions › should display client view with correct details —
3.6s - ✅ Client View & Status Transitions › should show actions menu for pending client (status 100) —
3.2s - ✅ Client View & Status Transitions › should show actions menu for active client (status 300) —
3.2s - ✅ Client View & Status Transitions › should show actions menu for closed client (status 600) —
3.4s - ✅ Client View & Status Transitions › should show New Account menu for active client —
4.3s - ✅ Client View & Status Transitions › should navigate from client view to client list via breadcrumb —
3.1s - ✅ Client View & Status Transitions › should navigate back from client view —
3.8s - ✅ Client View Tabs › should display all expected tabs on client view —
3.4s - ✅ Client View Tabs › should switch between client view tabs —
3.5s - ✅ Search & Filter Interactions › should have search input on clients page and accept input —
1.8s - ✅ Search & Filter Interactions › should have office filter on groups page —
1.9s - ✅ Search & Filter Interactions › should have office filter on loans page —
2.7s - ✅ 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.3s - ✅ Navigation Flow Verification › should navigate from dashboard to all top-level pages via sidebar —
4.2s - ✅ Navigation Flow Verification › should go from loan products → create → back —
2.2s - ✅ Office CRUD › should validate office create form — save disabled when empty —
2.4s - ✅ Office CRUD › should validate office create form — save enabled when filled —
2.4s - ✅ Office CRUD › should cancel office creation —
3.0s - ✅ Organization Create Flows › staff create form loads —
2.2s - ✅ Organization Create Flows › funds create form loads —
1.9s - ✅ Organization Create Flows › payment types create form loads —
1.9s - ✅ Accounting CRUD › accounting closure create form loads —
2.0s - ✅ Accounting CRUD › accounting rule create form loads —
3.0s - ✅ Accounting CRUD › financial activity mapping create form loads —
1.9s - ✅ Accounting CRUD › charge create form loads —
2.0s - ✅ Accounting CRUD › chart of accounts create form loads —
1.9s - ✅ Settings CRUD › global configurations page has editable toggle —
1.8s - ✅ Settings CRUD › holiday create form loads —
2.1s - ✅ Settings CRUD › working days page has save button —
2.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.0s - ✅ Security CRUD › audit logs search form has date range —
2.3s - ✅ Security CRUD › audit logs list exports the loaded page as CSV —
3.1s - ✅ Reporting — Run Report Flow › should navigate to report and verify report parameters —
2.7s - ✅ Teller CRUD › teller create form loads —
2.1s - ✅ Create Office Dialog from Client Form › should open create office dialog from client create form —
2.3s
global-search-nav-shortcuts.spec.ts
- ✅ Global search navigation shortcuts › offers a settings page the entity search cannot return —
1.9s - ✅ Global search navigation shortcuts › navigates to the page behind a shortcut —
3.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.2s - ✅ 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 —
2.9s - ✅ Global search navigation › opens the client behind a client result —
3.2s - ✅ Global search navigation › opens the loan behind a loan result —
2.2s - ✅ Global search navigation › opens the savings account behind a savings result —
2.1s - ✅ 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.2s - ✅ 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.8s - ✅ Group detail › custom field tabs expose the app keyboard and panel contract at 390px —
4.0s - ✅ 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 —
5.0s - ✅ Group detail › does not offer a client who is already a member, and associates the one it does —
4.0s - ✅ Group detail › unassigns a committee role by the assignment id, not the role id —
4.9s - ✅ Group detail › offers a retry when the group cannot be loaded —
3.3s - ✅ 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 —
3.0s - ✅ the guided tour › closes on Escape and hands focus back to the Guide button —
1.7s - ✅ the guided tour › names an unmatched route after itself instead of handing it the dashboard tour —
3.1s - ⏭️ 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 —
1.9s - ✅ Alt+G jumps to Create Group —
1.8s - ✅ Alt+E jumps to Create Center —
1.8s - ✅ Alt+H opens the guidance tour for the current page —
2.6s - ✅ typing in the global search box does not trigger the Create Client shortcut —
1.6s
list-pagination.spec.ts
- ✅ List pagination › advances through pages and back again —
3.5s - ✅ List pagination › jumps to the last page —
2.9s - ✅ List pagination › returns to the first page when a filter changes —
4.1s - ✅ List pagination › keeps search text when paging and shows the v2 account number —
3.8s - ✅ List pagination › redirects the old search page and exposes only one client navigation item —
4.2s - ✅ List pagination › keeps an account-number search broad and disables unsupported Office sorting —
5.2s - ✅ List pagination › returns to the first page when searching —
4.1s - ✅ Profile › renders the signed-in user rather than hanging on a spinner —
2.8s - ✅ Profile › shows an error when the profile cannot be loaded —
3.3s - ✅ 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 —
4.1s
client-empty-account-cta.spec.ts
- ✅ empty account tabs offer the matching creation action —
6.2s
loan-portfolio-summary.spec.ts
- ✅ Loan Portfolio Summary › searching sends entities: loans and shows the grouped results —
3.9s - ✅ Loan Portfolio Summary › Edit Parameters returns from the results view to the filter form —
3.3s - ✅ 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 —
3.6s
loan-product-down-payment.spec.ts
- ✅ Loan product down payment and tranches › down payment is offered only for a progressive product —
3.7s - ✅ Loan product down payment and tranches › the percentage and auto-repayment appear only once down payment is on —
4.6s - ✅ Loan product down payment and tranches › multi-tranche disbursement reveals its tranche count, on either engine —
3.1s - ✅ Loan product down payment and tranches › submits the down payment and tranche settings it was given —
4.2s - ✅ Loan product down payment and tranches › does not send a down payment on a cumulative product —
5.8s - ✅ Loan product down payment and tranches › income recognition is offered only for a progressive product —
3.8s - ✅ Loan product down payment and tranches › the capitalisation details appear only once it is on —
3.9s - ✅ Loan product down payment and tranches › submits the income recognition settings it was given —
4.9s - ✅ Loan product down payment and tranches › does not send income recognition on a cumulative product —
4.9s - ✅ Loan product down payment and tranches › interest recalculation reveals its mandatory settings only once it is on —
3.0s - ✅ Loan product down payment and tranches › the rest interval appears only when the frequency is not the repayment period —
14.9s - ✅ Loan product down payment and tranches › submits the interest recalculation settings it was given —
3.2s - ✅ Loan product down payment and tranches › does not send recalculation settings once it is switched back off —
3.2s
loan-schedule-type-gating.spec.ts
- ✅ Loan schedule type gating › a cumulative loan offers neither progressive-only tab, and fetches neither —
4.0s - ✅ Loan schedule type gating › a progressive loan shows only the capabilities it actually has —
3.3s - ✅ 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 —
3.7s - ✅ Loan schedule type gating › a healthy loan offers charge-off and no marker —
3.3s
loan-servicing-gaps.spec.ts
- ✅ Loan servicing gaps › edits an interest pause through PUT while preserving its existing dates —
3.7s - ✅ Loan servicing gaps › undo approval sends an empty body, without the locale the platform refuses —
5.0s - ✅ Loan servicing gaps › undo approval carries the reason when one was given —
4.3s - ✅ Loan servicing gaps › undo approval is offered only while the loan is approved —
3.1s - ✅ Loan servicing gaps › the delinquency tab shows the summary the loan carries and the tags it fetches —
3.8s - ✅ Loan servicing gaps › the data-only tabs stay hidden when the loan carries nothing for them —
2.7s - ✅ Loan servicing gaps › each data-only tab appears and renders once the loan carries its data —
3.5s - ✅ Loan servicing gaps › disburse to savings sends the date and amount, with the platform date format —
5.1s - ✅ Loan servicing gaps › disburse to savings is offered only on an approved loan —
3.3s - ✅ Loan servicing gaps › unassign loan officer sends the date, and appears only when one is assigned —
4.2s - ✅ Loan servicing gaps › unassign loan officer is hidden on a loan with no officer —
3.6s - ✅ Loan servicing gaps › undo last disbursal appears only on a multi-disbursal loan, and sends an empty body —
4.1s - ✅ Loan servicing gaps › undo last disbursal is hidden on a single-disbursal loan —
3.7s - ✅ Loan servicing gaps › close as rescheduled is offered on an active loan —
4.2s
rbac-feature-flag.spec.ts
- ✅ RBAC permission gating (rbacEnabled = true) › a limited user does not see permission-gated nav groups —
1.5s - ✅ 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.5s - ✅ RBAC permission gating (rbacEnabled = true) › a superuser (ALL_FUNCTIONS) sees all permission-gated groups —
1.6s - ✅ RBAC institution-feature gating (rbacEnabled = true) › universal institution shows Groups, Centers and Collection Sheet —
1.6s - ✅ RBAC institution-feature gating (rbacEnabled = true) › commercial bank (cb) hides all group-lending features —
2.6s - ✅ RBAC institution-feature gating (rbacEnabled = true) › credit union (cu) shows Groups but hides Centers and Collection Sheet —
2.0s - ✅ rbacEnabled = false › restores the pre-RBAC behaviour of showing everything —
1.6s - ✅ deployment navigation overrides › removes the entries the deployment names by id, leaving the rest alone —
1.6s - ✅ deployment navigation overrides › ignores a labelKey where an id is required —
1.5s - ✅ deployment navigation overrides › removes them even where RBAC is off —
2.6s
rbac-route-protection.spec.ts
- ✅ route authorization › a superuser reaches every sampled route and sees the full navigation —
12.9s - ✅ route authorization › a single-module user is confined to that module —
9.1s - ✅ route authorization › a read-only user gets the lists and not the forms —
10.7s - ✅ route authorization › a user with an empty permission list is refused everywhere and the app still works —
8.0s - ✅ route authorization › a session carrying no permissions field is treated as carrying none —
5.7s - ✅ route authorization › an unrecognised permission code grants nothing —
4.8s - ✅ route authorization › an unauthenticated visitor is asked to sign in, not told they are forbidden —
6.1s - ✅ route authorization › a deployment with RBAC turned off behaves as it did before the guard —
7.0s - ✅ the Access Denied page › says what happened, under a single heading —
4.6s - ✅ the Access Denied page › moves focus to the heading, since the user did not ask to come here —
3.1s - ✅ 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 —
3.7s - ✅ the Access Denied page › offers a way back that the user is allowed to take —
3.2s - ✅ the Access Denied page › is reachable by keyboard alone —
3.1s - ✅ permission feedback › a visible nav entry says what the user can do in that module —
1.5s - ✅ permission feedback › a nav entry carries no hint when there is nothing specific to say —
2.5s - ✅ navigation and routes agree › a hidden menu entry is also refused by URL, and a shown one is not —
4.8s - ✅ navigation and routes agree › the create button is withheld from a user whose create route would refuse them —
4.0s
report-enhancements.spec.ts
- ✅ Report Enhancements, Pagination, and Help Tour › should run report, show paginated data, and download CSV —
3.8s - ✅ Report Enhancements, Pagination, and Help Tour › should trigger guidance help tour and navigate steps —
2.1s
reporting.spec.ts
- ✅ Reporting › should display list of reports —
1.8s - ✅ Reporting › should navigate to run report page —
1.9s
scheduler-jobs.spec.ts
- ✅ Scheduler Jobs bulk run › Run Selected is disabled until a job is checked —
3.4s - ✅ Scheduler Jobs bulk run › Select All checks every job, and running confirms then triggers each one —
3.8s - ✅ Scheduler Jobs bulk run › declining the confirmation runs nothing —
3.7s
two-factor-authentication.spec.ts
- ✅ two-step verification › asks for a code and lets the user in once it is accepted —
2.0s - ✅ two-step verification › sends the token on every later request —
2.4s - ✅ 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.7s - ✅ 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.3s - ✅ two-step verification › does not let a half-finished session reach the application —
3.9s - ✅ two-step verification › backing out returns to the password form —
1.7s - ✅ two-step verification › a deployment without a second factor signs in exactly as before —
1.6s
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 —
4.0s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › shows breach action history and submits a new one —
6.1s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › shows near-breach action history and submits a new one —
4.4s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › attaches and detaches a loan originator —
3.5s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › adds a new charge and waives an existing one —
5.2s - ✅ Working Capital loan delinquency, breach and near-breach actions, and originators › shows rate-change history, amortization schedule, and delinquency range tags —
3.1s - ✅ 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.9s |
| Runtime accessibility › banner and dashboard content have no blocking violations | accessibility.spec.ts |
14.5s |
| route authorization › a superuser reaches every sampled route and sees the full navigation | rbac-route-protection.spec.ts |
12.9s |
| route authorization › a read-only user gets the lists and not the forms | rbac-route-protection.spec.ts |
10.7s |
| route authorization › a single-module user is confined to that module | rbac-route-protection.spec.ts |
9.1s |
| route authorization › a user with an empty permission list is refused everywhere and the app still works | rbac-route-protection.spec.ts |
8.0s |
| route authorization › a deployment with RBAC turned off behaves as it did before the guard | rbac-route-protection.spec.ts |
7.0s |
| Date pickers on revisited forms › floating rate form keeps its pickers usable on every visit | date-picker-revisit.spec.ts |
6.8s |
| empty account tabs offer the matching creation action | client-empty-account-cta.spec.ts |
6.2s |
| Working Capital loan delinquency, breach and near-breach actions, and originators › shows breach action history and submits a new one | working-capital-loan-actions.spec.ts |
6.1s |
📼 Download the HTML report, videos and traces — see the playwright-report-mocked artifact.
Generated by run 35787088713 from 12b6493. The run executed a fork branch, so treat its contents as unverified.
E2E — real Fineract🎭 E2E Tests❌ 1 failing — 77 passed · 1 failed · 0 skipped · 2 flaky, across 24 spec files in 7m 12s. ❌ Failures
|
| Spec | ✅ | ❌ | ⏭️ | 🔒 | Time |
|---|---|---|---|---|---|
| backend.setup.ts | 3 | 0 | 0 | 0 | 6.1s |
| batch-api-operations.spec.ts | 5 | 0 | 0 | 0 | 30.8s |
| center-servicing.spec.ts | 2 | 0 | 0 | 0 | 17.1s |
| client-legal-form-search.spec.ts | 1 | 0 | 0 | 0 | 4.9s |
| client-transfer.spec.ts | 4 | 0 | 0 | 0 | 43.0s |
| deposit-account-servicing.spec.ts | 3 | 0 | 0 | 0 | 24.7s |
| deposit-product-configuration.spec.ts | 3 | 0 | 0 | 0 | 14.9s |
| group-membership.spec.ts | 3 | 0 | 0 | 0 | 44.8s |
| loan-account-actions.spec.ts | 3 | 0 | 0 | 0 | 22.1s |
| loan-charge-off.spec.ts | 2 | 0 | 0 | 0 | 22.1s |
| loan-product-accounting.spec.ts | 1 | 0 | 0 | 0 | 48.1s |
| loan-servicing.spec.ts | 2 | 0 | 0 | 0 | 19.6s |
| login.spec.ts | 4 | 0 | 0 | 0 | 6.5s |
| parity-screens.spec.ts | 7 | 1 | 0 | 0 | 59.0s |
| rbac-backend-restricted-user.spec.ts | 7 | 0 | 0 | 0 | 34.7s |
| rbac-multi-permission.spec.ts | 9 | 0 | 0 | 0 | 58.4s |
| full-demo.spec.ts | 1 | 0 | 0 | 0 | 1m 6s |
| loan-lifecycle.spec.ts | 4 | 0 | 0 | 0 | 2m 7s |
| loan-schedule-type.spec.ts | 3 | 0 | 0 | 0 | 36.6s |
| report-parameter-backend.spec.ts | 4 | 0 | 0 | 0 | 23.4s |
| savings-transaction-correction.spec.ts | 1 | 0 | 0 | 0 | 6.9s |
| share-account-servicing.spec.ts | 2 | 0 | 0 | 0 | 18.5s |
| share-product-accounting.spec.ts | 1 | 0 | 0 | 0 | 24.1s |
| teller-cash-management.spec.ts | 2 | 0 | 0 | 0 | 37.0s |
All 78 tests — click to expand
backend.setup.ts
- ✅ seed backend reference data —
1.8s - ✅ seed backend reference data —
2.1s - ✅ seed backend reference data —
2.3s
batch-api-operations.spec.ts
- ✅ Batch API Operations against Fineract › runs the sample batch scenario — create client, create loan, add and read back a charge —
5.9s - ✅ Batch API Operations against Fineract › shows a parse error instead of submitting when the batch input is not valid JSON —
6.1s - ✅ Batch API enclosingTransaction semantics against Fineract › rolls back the earlier steps when enclosingTransaction is true and a later step fails —
5.7s - ✅ Batch API enclosingTransaction semantics against Fineract › does not roll back the earlier steps when enclosingTransaction is false and a later step fails —
9.0s(retried 1×) - ✅ Batch API Operations on a mobile viewport against Fineract › the sample batch scenario is reachable and works by touch at mobile width —
4.1s
center-servicing.spec.ts
- ✅ Center servicing › a center is activated, staffed and given a group —
12.3s - ✅ Center servicing › notes are recorded against the center —
4.8s
client-legal-form-search.spec.ts
- ✅ Client list: legal form filtering › an entity client appears in the main client list —
4.9s
client-transfer.spec.ts
- ✅ Client transfer between offices › a proposed transfer is held until the destination accepts, and then the client moves —
10.5s - ✅ Client transfer between offices › a rejected transfer leaves the client on hold, and withdrawing is the way back —
11.8s - ✅ Client transfer between offices › a client can be transferred in one step when the user may act for both offices —
9.6s - ✅ Client staff assignment › an officer can be assigned and then removed —
11.1s
deposit-account-servicing.spec.ts
- ✅ Term deposit account servicing › an account is approved, activated and closed before maturity —
10.2s - ✅ Term deposit account servicing › a deposit is recorded, listed, and reversed without leaving the list —
9.1s - ✅ Term deposit account servicing › an application can be rejected instead of approved —
5.5s
deposit-product-configuration.spec.ts
- ✅ Deposit product configuration › a fixed deposit product survives being edited —
5.3s - ✅ Deposit product configuration › a recurring deposit product can be created at all —
4.1s - ✅ Deposit product configuration › a savings product carries its accounting configuration —
5.6s
group-membership.spec.ts
- ✅ Group membership and lifecycle › a group is activated, staffed, given members and a committee, then emptied —
19.0s - ✅ Group membership and lifecycle › notes are recorded against the group and can be removed again —
7.6s - ✅ Group membership and lifecycle › an empty group is closed with a reason, and a group with members is refused —
18.2s
loan-account-actions.spec.ts
- ✅ Loan account lifecycle actions › new action menu items appear only for active loans —
6.8s - ✅ Loan account lifecycle actions › undo disbursal shows a confirm dialog and reverts the loan to Approved —
7.8s - ✅ Loan account lifecycle actions › write off requires confirmation and moves the loan out of Active status —
7.6s
loan-charge-off.spec.ts
- ✅ Loan servicing commands › charges a loan off through the UI and reverses it —
9.4s - ✅ Loan servicing commands › records a goodwill credit through the shared transaction form —
12.7s
loan-product-accounting.spec.ts
- ✅ Loan product accounting › a cash-accounting product is configured, round-trips on edit, and posts to the ledger —
48.1s(retried 1×)
loan-servicing.spec.ts
- ✅ Loan servicing: notes and transaction adjustment › notes can be added and removed, with a confirm dialog on delete —
8.6s - ✅ Loan servicing: notes and transaction adjustment › a repayment transaction can be viewed and adjusted with a corrected amount —
11.0s
login.spec.ts
- ✅ Login › login page displays correctly —
1.5s - ✅ Login › login form has required fields —
1.4s - ✅ Login › submit button is disabled when form is empty —
2.2s - ✅ Login › submit button is enabled when form is filled —
1.3s
parity-screens.spec.ts
- ✅ Screens added for platform parity › a manual journal entry can be read whole and reversed —
5.3s - ✅ Screens added for platform parity › an entry that is already reversed is not offered again —
5.3s - ❌ Screens added for platform parity › a report definition can be created, edited and deleted; a core one cannot —
19.4s(retried 2×) - ✅ Screens added for platform parity › a core report opens read-only with only its in-use setting —
5.4s - ✅ Screens added for platform parity › a pending loan is approved from the queue, in a batch —
6.0s - ✅ Screens added for platform parity › a fixed deposit is listed as a deposit, not as a savings account —
5.9s - ✅ Screens added for platform parity › an office has a screen, and it carries its custom fields —
4.7s - ✅ Screens added for platform parity › a savings account carries notes, and the note survives a reload —
7.2s
rbac-backend-restricted-user.spec.ts
- ✅ a genuinely restricted Fineract user › holds exactly the permissions their role was granted —
240ms - ✅ a genuinely restricted Fineract user › reaches the screen their permission covers —
4.2s - ✅ a genuinely restricted Fineract user › is refused a screen their permission does not cover, by URL and by the backend —
5.3s - ✅ a genuinely restricted Fineract user › is refused a write screen they can read the list for, and the write itself —
6.1s - ✅ a genuinely restricted Fineract user › is not offered the actions it would be refused for —
5.0s - ✅ a genuinely restricted Fineract user › is shown an action it cannot take, disabled and saying what it needs —
5.3s - ✅ a genuinely restricted Fineract user › the superuser the rest of the suite uses is unaffected —
8.6s
rbac-multi-permission.spec.ts
- ✅ a route declaring more than one permission code (OR semantics) › is admitted by either declared code alone —
5.5s - ✅ a route declaring more than one permission code (OR semantics) › is admitted by the other declared code alone —
4.3s - ✅ a route declaring more than one permission code (OR semantics) › is refused when holding neither declared code, by the router and by the backend —
5.4s - ✅ ALL_FUNCTIONS_READ, against the real Fineract permission catalogue › reaches read screens across modules it holds no specific code for —
9.8s - ✅ ALL_FUNCTIONS_READ, against the real Fineract permission catalogue › is refused every write screen, and the writes themselves —
7.0s - ✅ a restricted session across a real page reload › keeps the same permission boundary after reloading, not just after a fresh login —
9.8s - ✅ a second real action-level gate, distinct from loan repayment › is shown the Approve action disabled and naming what it needs, refused by the backend too —
6.2s - ✅ Security module writes (users, roles), against the real backend › reaches the list screens but is refused the write screens —
10.1s - ✅ Security module writes (users, roles), against the real backend › is refused creating a user and modifying a role, by the backend itself —
290ms
full-demo.spec.ts
- ✅ Full feature demo recording › walk through loan schedule type, lifecycle, custom fields, collateral, and disbursement —
1m 6s
loan-lifecycle.spec.ts
- ✅ Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Cumulative loan —
32.8s - ✅ Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Progressive loan —
34.5s - ✅ Loan lifecycle: creation, approval, disbursement › an approved loan can be returned to pending approval —
30.4s - ✅ Loan lifecycle: creation, approval, disbursement › the delinquency tab reads a real loan, and the empty data tabs stay hidden —
29.7s
loan-schedule-type.spec.ts
- ✅ Loan Schedule Type (Cumulative vs Progressive) › loan products list shows a schedule type chip per product —
9.8s - ✅ Loan Schedule Type (Cumulative vs Progressive) › create a Progressive loan product end-to-end and verify it round-trips —
15.7s - ✅ Loan Schedule Type (Cumulative vs Progressive) › loan creation shows the schedule type badge for a Progressive product —
11.0s
report-parameter-backend.spec.ts
- ✅ Dynamic report parameters against Fineract › keeps the parameter form available when a report has cascading lookups —
5.0s - ✅ Dynamic report parameters against Fineract › changing Office changes the Client Listing row set —
6.6s - ✅ Cascading report parameters against Fineract › sends the parent value to the child lookup and clears the child when it changes —
7.5s - ✅ Chart reports against Fineract › renders a chart report as a chart rather than a table —
4.3s
savings-transaction-correction.spec.ts
- ✅ Savings transaction correction › a deposit is reversed and a hold is released —
6.9s
share-account-servicing.spec.ts
- ✅ Share account servicing › an account is approved, activated, traded and closed —
12.3s - ✅ Share account servicing › an application can be rejected —
6.2s
share-product-accounting.spec.ts
- ✅ Share product accounting › a share product is mapped to equity and round-trips on edit —
24.1s
teller-cash-management.spec.ts
- ✅ Teller cash management › a cashier is listed, receives an allocation, and settles cash back —
24.8s - ✅ Teller cash management › settling more than the cashier holds is refused and the form stays usable —
12.2s
Slowest 10 — what the shard counts should be tuned against
| Test | Spec | Time |
|---|---|---|
| Full feature demo recording › walk through loan schedule type, lifecycle, custom fields, collateral, and disbursement | full-demo.spec.ts |
1m 6s |
| Loan product accounting › a cash-accounting product is configured, round-trips on edit, and posts to the ledger | loan-product-accounting.spec.ts |
48.1s |
| Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Progressive loan | loan-lifecycle.spec.ts |
34.5s |
| Loan lifecycle: creation, approval, disbursement › create, approve, and disburse a Cumulative loan | loan-lifecycle.spec.ts |
32.8s |
| Loan lifecycle: creation, approval, disbursement › an approved loan can be returned to pending approval | loan-lifecycle.spec.ts |
30.4s |
| Loan lifecycle: creation, approval, disbursement › the delinquency tab reads a real loan, and the empty data tabs stay hidden | loan-lifecycle.spec.ts |
29.7s |
| Teller cash management › a cashier is listed, receives an allocation, and settles cash back | teller-cash-management.spec.ts |
24.8s |
| Share product accounting › a share product is mapped to equity and round-trips on edit | share-product-accounting.spec.ts |
24.1s |
| Screens added for platform parity › a report definition can be created, edited and deleted; a core one cannot | parity-screens.spec.ts |
19.4s |
| Group membership and lifecycle › a group is activated, staffed, given members and a committee, then emptied | group-membership.spec.ts |
19.0s |
📼 Download the HTML report, videos and traces — see the playwright-report-backend artifact.
Generated by run 35787088713 from 12b6493. The run executed a fork branch, so treat its contents as unverified.
|
@pranavdhanabalan Rebase against main and also run > eslint src --suppressions-location eslint-suppressions.json There are suppressions left that do not occur anymore. Consider re-running the command with |
|
@pranavdhanabalan Are you working on this? |
|
yes sir |
12b6493 to
0e4e206
Compare
What and why
Migrated the remaining System buttons from
ion-buttontoapp-buttonwhile preserving their existing labels, icons, permissions, click handlers, and test IDs.Closes #570
Verification
npm run check:ui-primitivesnpm run lintnpx playwright test --project=mockedgetByTestIdwhere required.Checklist
src/app/api/.src/app/core/adapters/instead of direct browser globals or imperative third-party APIs.