xControl UI⚓︎
xControl, the Expeto Management portal, is verified at three levels: unit tests of the front-end code on every change, a browser suite that drives the portal in a real Chromium browser against a real xControl backend and front end, and the browser checks that the platform end-to-end suites make against the deployed portal. This page lists what the browser suite covers, test by test, and the wider UI regression scope it is drawn from.
The browser suite⚓︎
The suite is written in TypeScript on Playwright and runs in Chromium. It does not use mocks or network stubs. Before a run, the pipeline starts a real xControl backend with a seeded in-memory database and generated data, a front end built from the commit under test, and the browser container that drives them; every test acts on the portal the way an administrator does, through the rendered pages. Traces are retained for failed tests, video is recorded for every test, and an HTML report is published as a pipeline artifact.
Tests carry the TestRail case identifiers of the manual regression cases they cover, either in the test title or in the titles of the steps inside the test. The suite authenticates with the ADMIN role; Customer-Admin and Read-Only behaviour is in the manual scope.
The browser suite holds 74 tests in 11 specification files. 70 run in the default selection, 17 of them as the end-to-end sanity chain; the other 5 seed data or authenticate before a run. The tests carry 53 distinct TestRail case identifiers. Of the 137 cases in the UI regression scope below, 56 are covered by a browser test; the remainder stay in the manual regression scope.
The browser suite is a manual, non-blocking job in the front-end pipeline, started before an xControl release. The gates that run on every merge request to the front end are the type check, the linter and the unit tests.
| Specification file | Area | Test | TestRail cases | Default run |
|---|---|---|---|---|
account.spec.ts |
Accounts | C256 - Filter Columns by IP Origin and Email Address | C256 | Yes |
| C257 - Filter Columns by First Attempt and Email Address | C257 | Yes | ||
| C258 - Filter Columns by IP Origin and Last Attempt | C258 | Yes | ||
| Create, search, edit, delete new account | C252, C255, C254, C253 | Yes | ||
| C263 - Display default columns | C263 | Yes | ||
| C264 - None selected in the table columns | C264 | Yes | ||
| C259 - Display Only List of Accounts | C259 | Yes | ||
| C260 - Display Only Audit | C260 | Yes | ||
customer.spec.ts |
Customers | Create, edit, delete new customer as SuperAdmin | C6, C50, C200, C209 | Yes |
| Create, edit, delete new customer with extensions as SuperAdmin | C6, C207, C208, C209 | Yes | ||
keysets.spec.ts |
Keysets | Create, edit, delete keysets | C265, C267, C266 | Yes |
| C273 - Verify "Reset List" Button Functionality | C273 | Yes | ||
| C274 - Verify Behavior with no columns selected | C274 | Yes | ||
| Filter columns | C275, C276 | Yes | ||
mobile.assets.spec.ts |
Mobile Assets | Create a new Mobile Asset | C269 | Yes |
| Search, filter mobile asset | C272, C270, C271 | Yes | ||
| Delete created Mobile Asset | — | Yes | ||
| Verify columns track | — | Yes | ||
| Regression check - Spruce Issue #1255 - Unable to search mobile assets by ICCID | — | Yes | ||
| C284 - Verify "Reset List" Button Functionality | C284 | Yes | ||
| C279 - Reset Tiles to Default | C279 | Yes | ||
| C278 - Display Only Data Usage Tile | C278 | Yes | ||
private.radio.spec.ts |
Private Radios | Create New Private Radio | — | Yes |
| Delete Private Radio | — | Yes | ||
reports.spec.ts |
Reports | C320 - Generate Detailed usage report with Valid Parameters | C320 | Yes |
| C321 - Generate Summary usage report - By IMSI with Valid Parameters | C321 | Yes | ||
| C322 - Generate Summary usage report - By System with Valid Parameters | C322 | Yes | ||
| C323 - Generate Summary usage report with Valid Parameters | C323 | Yes | ||
| C324 - Generate Active devices by site report with Valid Parameters | C324 | Yes | ||
| C325 - Generate Active devices report with Valid Parameters | C325 | Yes | ||
| C328 - Filter Columns by ID and Report Name | C328 | Yes | ||
| C329 - Filter Columns by ID and Generated by | C329 | Yes | ||
| C330 - Filter Columns by Report Name and Initiated | C330 | Yes | ||
| C331 - Filter Columns by Report Config and Completed | C331 | Yes | ||
| C332 - Filter Columns by Status and Owned by | C332 | Yes | ||
| C333 - Filter Columns by ID and Status | C333 | Yes | ||
| C334 - Filter Columns by Generated by and Owned by | C334 | Yes | ||
| C335 - Filter Columns by Report Config and Initiated | C335 | Yes | ||
| C336 - Verify "Reset List" Button Functionality | C336 | Yes | ||
sanity.spec.ts |
End-to-end sanity chain | Create Customer | — | Yes |
| Create Account | — | Yes | ||
| Create Keyset | — | Yes | ||
| Create Site & Private Radio | — | Yes | ||
| Create APN Global | — | Yes | ||
| Create System Profile & APN Profile | — | Yes | ||
| Create System | — | Yes | ||
| Create Mobile Asset | — | Yes | ||
| Delete Mobile Asset | — | Yes | ||
| Delete APN Profile | — | Yes | ||
| Delete System Profile | — | Yes | ||
| Delete APN Global | — | Yes | ||
| Delete System | — | Yes | ||
| Delete Site | — | Yes | ||
| Delete Keyset | — | Yes | ||
| Delete Account | — | Yes | ||
| Delete Customer | — | Yes | ||
sites.spec.ts |
Sites | Search sites | — | Yes |
| C293 - Display only Name and Customer Columns in the sites details table | C293 | Yes | ||
| C294 - Display only Status and Systems Columns in the sites details table | C294 | Yes | ||
| C295 - Display only Private Radios and Type Columns in the sites details table | C295 | Yes | ||
| C296 - Display only Name and Status Columns in the sites details table | C296 | Yes | ||
system-profiles.spec.ts |
System Profiles and APNs | Add a new global APN | — | Yes |
| Add a new System Profile | — | Yes | ||
| Add a new APN Profile to the System Profile | — | Yes | ||
| Delete APNProfile from System Profile | — | Yes | ||
| Delete System Profile | — | Yes | ||
| Delete global APN | — | Yes | ||
systems.spec.ts |
Systems | C299 - Display Name and State Columns in the Systems Details table | C299 | Yes |
| C302 - Verify "Reset list" Button Functionality | C302 | Yes | ||
| C301 - Verify Default columns in the Systems Details table | C301 | Yes | ||
setup.spec.ts |
Seed data (setup only) | Create Customer | — | No |
| Create Keyset | — | No | ||
| Create Site | — | No | ||
| Create System | — | No | ||
auth.setup.ts |
Login (setup project) | Authenticate admin user | — | No |
Checks made by the platform suites⚓︎
The platform end-to-end suites also open the deployed portal in a browser. They sign in through the identity provider and confirm that a first login creates the account, open a Site's detail page and confirm that its status is not Offline and its agent version matches the deployed chart, open the documentation sites served by the deployment and check their navigation, and confirm that no device lookup is purchased from an external service while sessions are generated.
UI regression scope⚓︎
The following is the full UI regression scope for xControl, by functional area. It is included for reference: it shows the breadth of behaviour the portal is checked against, from every create, edit and delete flow to list filtering, pagination, column selection, reporting and export. The Automated by column names the browser tests that cover a case; the mapping is kept in the documentation sources from the case identifiers and test titles in the suite's code, and is updated when the suite changes.
APNs (11 cases, 2 automated)
| Case | Automated by |
|---|---|
| APNs page - Create APN Global | system-profiles.spec.ts: Add a new global APNsanity.spec.ts: Create APN Global |
| APNs page - Delete apn | system-profiles.spec.ts: Delete global APNsanity.spec.ts: Delete APN Global |
| APNs page - Edit APN | — |
| APNs page - Filter by Customer and Max Upload (Mbps) with Max Download (Mbps) | — |
| APNs page - Filter by Customer with Max Download (Mbps) only | — |
| APNs page - Filter by Max Upload (Mbps) and Max Download (Mbps) only | — |
| APNs page - Filter by Name and Customer with Max Download (Mbps) only | — |
| APNs page - Filter by Name and Customer with Max Upload (Mbps) only | — |
| APNs page - Filter by Name and Max Upload (Mbps) with Max Download (Mbps) only | — |
| APNs page - Filter by Name with Max Download (Mbps) only | — |
| APNs page - Filter by Name, Customer, Max Upload (Mbps), and Max Download (Mbps) | — |
Accounts (24 cases, 11 automated)
| Case | Automated by |
|---|---|
| Account - Verify Records Per Page Limit | — |
| Account - Verify Records Per Page Limit in the Accounts Table | — |
| Account - Verify Specific Page Navigation in the Accounts Table | — |
| Accounts - Verify Failed to login | — |
| Accounts - Verify Specific Page Navigation | — |
| Accounts - Verify audit log of the current user's last login | — |
| Accounts Page - Accounts list pagination | — |
| Accounts page - Display Only Audit Tile | account.spec.ts: C260 - Display Only Audit |
| Accounts page - Display Only List of Accounts Tile | account.spec.ts: C259 - Display Only List of Accounts |
| Accounts page - Display default columns | account.spec.ts: C263 - Display default columns |
| Accounts page - Filter Columns by Email Address and First Attempt | account.spec.ts: C257 - Filter Columns by First Attempt and Email Address |
| Accounts page - Filter Columns by Email Address and IP Origin | account.spec.ts: C256 - Filter Columns by IP Origin and Email Address |
| Accounts page - Filter Columns by IP Origin and Last Attempt | account.spec.ts: C258 - Filter Columns by IP Origin and Last Attempt |
| Accounts page - None selected in the table columns | account.spec.ts: C264 - None selected in the table columns |
| Accounts page - Show all tiles in Accounts page | — |
| Accounts page - Verify "Reset List" Button Functionality | — |
| Accounts page - Verify Functionality of Next and Previous Buttons | — |
| Create new Account as Admin | account.spec.ts: Create, search, edit, delete new accountsanity.spec.ts: Create Account |
| Create new Account as Customer | — |
| Create new Account as Read-Only Customer | — |
| Delete Account | account.spec.ts: Create, search, edit, delete new accountsanity.spec.ts: Delete Account |
| Edit account as Admin | account.spec.ts: Create, search, edit, delete new account |
| Search account | account.spec.ts: Create, search, edit, delete new account |
| Search by customer | — |
Customers (16 cases, 5 automated)
| Case | Automated by |
|---|---|
| Create new Customer as Admin | customer.spec.ts: Create, edit, delete new customer as SuperAdminsanity.spec.ts: Create Customer |
| Create new Customer as Customer-Admin | — |
| Customers - Display Only Mobile Assets Column | — |
| Customers - Display Only Sites Column | — |
| Customers - Display Only Systems Column | — |
| Delete Customer Extensions as Admin | customer.spec.ts: Create, edit, delete new customer with extensions as SuperAdmin |
| Delete Customer Extensions as Customer-Admin | — |
| Delete existing customer as Admin | customer.spec.ts: Create, edit, delete new customer as SuperAdminsanity.spec.ts: Delete Customer |
| Delete existing customer as Customer-Admin | — |
| Delete existing customer as Read-Only | — |
| Edit Customer Extensions as Admin | customer.spec.ts: Create, edit, delete new customer with extensions as SuperAdmin |
| Edit existing customer as Admin | customer.spec.ts: Create, edit, delete new customer as SuperAdmin |
| Edit existing customer as Customer-Admin | — |
| Edit existing customer as Read-Only | — |
| Filter Customers by status | — |
| Filter by customer | — |
Home (1 case, 0 automated)
| Case | Automated by |
|---|---|
| Home - Overview metrics | — |
Keysets (7 cases, 7 automated)
| Case | Automated by |
|---|---|
| Add New Keyset | keysets.spec.ts: Create, edit, delete keysetssanity.spec.ts: Create Keyset |
| Delete Keyset | keysets.spec.ts: Create, edit, delete keysetssanity.spec.ts: Delete Keyset |
| Edit Keyset | keysets.spec.ts: Create, edit, delete keysets |
| Keysets page - Filter by Customer | keysets.spec.ts: Filter columns |
| Keysets page - Filter by Name | keysets.spec.ts: Filter columns |
| Keysets page - Verify "Reset List" Button Functionality | keysets.spec.ts: C273 - Verify "Reset List" Button Functionality |
| Keysets page - Verify Behavior with no columns selected | keysets.spec.ts: C274 - Verify Behavior with no columns selected |
Login (2 cases, 1 automated)
| Case | Automated by |
|---|---|
| Login to xControl with Admin role | auth.setup.ts: Authenticate admin user |
| Logout from xControl | — |
Mobile Assets (18 cases, 6 automated)
| Case | Automated by |
|---|---|
| Create New Mobile Assets | mobile.assets.spec.ts: Create a new Mobile Assetsanity.spec.ts: Create Mobile Asset |
| Display All Columns in the Mobile Assets Details Table | — |
| Display Only Connected or Disconnected Since Column in the Mobile Assets Details Table | — |
| Display Only IMSI and IMEI Columns in the Mobile Assets Details Table | — |
| Download Mobile Assets as .CSV File | — |
| Filter Mobile Assets by system | mobile.assets.spec.ts: Search, filter mobile asset |
| Mobile Assets - Delete bulk | — |
| Mobile Assets - Display All Tiles | — |
| Mobile Assets - Display Only Data Usage Tile | mobile.assets.spec.ts: C278 - Display Only Data Usage Tile |
| Mobile Assets - Display Only Mobile Assets Details Tile | — |
| Mobile Assets - Display Only Overview Tile | — |
| Mobile Assets - Display deafult columns on the table | — |
| Mobile Assets - Edit bulk | — |
| Mobile Assets - Edit bulk as Customer Admin | — |
| Mobile Assets - Reset Tiles to Default | mobile.assets.spec.ts: C279 - Reset Tiles to Default |
| Mobile Assets - Verify "Reset List" Button Functionality | mobile.assets.spec.ts: C284 - Verify "Reset List" Button Functionality |
| Mobile Assets Page - Overview metrics | — |
| Search mobile assets | mobile.assets.spec.ts: Search, filter mobile asset |
Private Radios (5 cases, 1 automated)
| Case | Automated by |
|---|---|
| Create New Private Radio | private.radio.spec.ts: Create New Private Radiosanity.spec.ts: Create Site & Private Radio |
| Deselect All Columns in the Private Radios Details table | — |
| Display Private Radio ID and Site Columns | — |
| Private Radios - Verify "Reset Tiles" Button Functionality | — |
| Verify Default columns in the Private Radios Details table | — |
Profiles (7 cases, 0 automated)
| Case | Automated by |
|---|---|
| Create New Profile | — |
| Create New Profile with extensions | — |
| Delete profile | — |
| Edit profile | — |
| Profiles - Display Only System Column | — |
| Profiles - Display Only Customer Column | — |
| Search profile | — |
Reports (16 cases, 14 automated)
| Case | Automated by |
|---|---|
| Download Report from the "Generated Reports" table as Admin | — |
| Download Report from the "Generated Reports" table as Customer-Admin | — |
| Generate a Detailed Usage Report with Valid Parameters | reports.spec.ts: C320 - Generate Detailed usage report with Valid Parameters |
| Generate a Summary Usage Report - By IMSI with Valid Parameters | reports.spec.ts: C321 - Generate Summary usage report - By IMSI with Valid Parameters |
| Generate a Summary Usage Report - By System with Valid Parameters | reports.spec.ts: C322 - Generate Summary usage report - By System with Valid Parameters |
| Generate a Summary Usage Report with Valid Parameters | reports.spec.ts: C323 - Generate Summary usage report with Valid Parameters |
| Generate an Active Devices Report with Valid Parameters | reports.spec.ts: C325 - Generate Active devices report with Valid Parameters |
| Generate an Active Devices by Site Report with Valid Parameters | reports.spec.ts: C324 - Generate Active devices by site report with Valid Parameters |
| Reports page - Filter Columns by Generated by and Owned by | reports.spec.ts: C334 - Filter Columns by Generated by and Owned by |
| Reports page - Filter Columns by ID and Generated by | reports.spec.ts: C329 - Filter Columns by ID and Generated by |
| Reports page - Filter Columns by ID and Report Name | reports.spec.ts: C328 - Filter Columns by ID and Report Name |
| Reports page - Filter Columns by ID and Status | reports.spec.ts: C333 - Filter Columns by ID and Status |
| Reports page - Filter Columns by Report Config and Completed | reports.spec.ts: C331 - Filter Columns by Report Config and Completed |
| Reports page - Filter Columns by Report Config and Initiated | reports.spec.ts: C335 - Filter Columns by Report Config and Initiated |
| Reports page - Filter Columns by Report Name and Initiated | reports.spec.ts: C330 - Filter Columns by Report Name and Initiated |
| Reports page - Verify "Reset List" Button Functionality | reports.spec.ts: C336 - Verify "Reset List" Button Functionality |
Sites (9 cases, 2 automated)
| Case | Automated by |
|---|---|
| Add custom extensions to a Site | — |
| Create Sites as SuperUser | sanity.spec.ts: Create Site & Private Radio |
| Deselect All Columns in the Sites Details List on the Sites Page | — |
| Search sites | sites.spec.ts: Search sites |
| Sites Page - Overview metrics | — |
| Verify Associated System(s) | — |
| Verify Default columns in the Sites Details list on Sites page | — |
| Verify General Information of a Site | — |
| Verify Name columns in the Sites Details list on Sites page | — |
System Profile (8 cases, 3 automated)
| Case | Automated by |
|---|---|
| Systems profile page - Filter by "Customer" Column | — |
| Systems profile page - Filter by "Name" Column | — |
| Systems profile page - Filter by "System" Column | — |
| Systems profile page - Create systems profile | system-profiles.spec.ts: Add a new System Profilesanity.spec.ts: Create System Profile & APN Profile |
| Systems profile page - Delete systems profile | system-profiles.spec.ts: Delete System Profilesanity.spec.ts: Delete System Profile |
| Systems profile page - Reset Column Selection to Default | — |
| Systems profile page - Search by name profile | — |
| Systems profile page.- Edit system profile | system-profiles.spec.ts: Add a new APN Profile to the System Profile |
Systems (13 cases, 4 automated)
| Case | Automated by |
|---|---|
| Create systems | sanity.spec.ts: Create System |
| Delete a System | sanity.spec.ts: Delete System |
| Deselect All Columns in the Systems Details table | — |
| Display Name and State Columns in the Systems Details table | systems.spec.ts: C299 - Display Name and State Columns in the Systems Details table |
| Edit systems extensions | — |
| Export System Details as .JPEG File | — |
| Export System Details as .PNG File | — |
| Export System Details as .SVG File | — |
| Systems - Edit system name | — |
| Systems - Enable/disable status | — |
| Systems - Verify "Reset Tiles" Button Functionality | — |
| Systems - Verify Default columns in the Systems Details table | systems.spec.ts: C301 - Verify Default columns in the Systems Details table |
| Systems Page - Overview metrics | — |