diff --git a/e2e/TEST_COVERAGE.md b/e2e/TEST_COVERAGE.md index 1b0d738ed9..88761a08c4 100644 --- a/e2e/TEST_COVERAGE.md +++ b/e2e/TEST_COVERAGE.md @@ -4,11 +4,13 @@ | Category | Features | Functions | ✅ Covered | ❌ Not Covered | |-----------------------------|----------|-----------|------------|----------------| -| User Features (ROLE_USER) | 5 | 21 | 12 | 9 | -| Admin Features (ROLE_ADMIN) | 15 | 335 | 239 | 96 | -| **Total** | **20** | **356** | **251** | **105** | +| User Features (ROLE_USER) | 5 | 25 | 20 | 4 | +| Admin Features (ROLE_ADMIN) | 15 | 365 | 352 | 7 | +| **Total** | **20** | **390** | **372** | **11** | -**Coverage:** `251 / 356` — `70.5%` +**Coverage:** `372 / 390` — `95.4%` + +> Counts are one per numbered row. The remainder of each category is `N/A` (6) or `⏳` (1). --- @@ -29,11 +31,14 @@ ### Feature 1 — Dashboard -| # | Function | Test Scenarios | Coverage | Notes | -|:----|:--------------------------------|:---------------------------------------------------------------|:--------:|:------------------------------------------------| -| 1.1 | Display widget-based dashboard | Load dashboard with multiple widgets · Display empty dashboard | ❌ | | -| 1.2 | Configure widgets per user/role | Add widget to dashboard · Remove widget from dashboard | ❌ | | -| 1.3 | Real-time data updates (SSE) | Receive SSE update and refresh widget | ❌ | | +| # | Function | Test Scenarios | Coverage | Notes | +|:----|:-------------------------------------|:-----------------------------------------------------------------------------------------------------|:--------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 1.1 | Display widget-based dashboard | Load dashboard with multiple widgets · Render each widget's display title · Display empty dashboard | ✅ | user-dashboard.spec.ts | +| 1.2 | Configure widgets per user/role | Add widget to dashboard · Remove widget from dashboard · Dashboard without a view permission is hidden | ✅ | user-dashboard.spec.ts (dashboard visibility is role-scoped by an access-control permission on the dashboard key) | +| 1.3 | Real-time data updates (SSE) | Receive SSE update and refresh widget | `N/A` | The widget dashboard does not subscribe to SSE — `@valtimo/dashboard` has no SSE usage, and `/api/v1/dashboard/{key}/data` is verified not to be re-requested after a case is created. Refresh is covered by 1.4 | +| 1.4 | Refresh widget data on open | Widget data is re-fetched on open and reflects newly created cases | ✅ | user-dashboard.spec.ts | +| 1.5 | Navigate from widget to linked route | Clicking a widget with a configured URL navigates to that route | ✅ | user-dashboard.spec.ts | +| 1.6 | Skip unsupported widget display type | Widget with an unregistered display type is skipped and the dashboard still renders | ✅ | user-dashboard.spec.ts (failure scenario) | --- @@ -65,11 +70,12 @@ ### Feature 4 — Objects -| # | Function | Test Scenarios | Coverage | Notes | -|:----|:----------------------|:----------------------------------------------------------|:--------:|:------------------------------------------------| -| 4.1 | View objects per type | Display objects filtered by type | ❌ | | -| 4.2 | View object details | Open and view object details | ❌ | | -| 4.3 | Search/filter objects | Search objects by criteria · Filter objects using filters | ❌ | | +| # | Function | Test Scenarios | Coverage | Notes | +|:-----|:----------------------|:-----------------------------------------------------------------------------------------|:--------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 4.1 | View objects per type | Lists the objects of one type · Columns match the API · List is scoped to the type | ✅ | user-objects.spec.ts — read-only against the seeded type. With no list columns configured the component falls back to `Record index` / `Object URL`; while loading it renders a **second** `valtimo-carbon-list`, so waits must be for that placeholder to go | +| 4.2 | View object details | Row click opens the object · Direct URL works · Summary form with edit/delete actions | ✅ | user-objects.spec.ts — the row navigates on the plain object id, not the full Objecten API URL | +| 4.2a | Handle unknown object | An unknown object id renders no summary form | ✅ | user-objects.spec.ts (failure scenario) | +| 4.3 | Search/filter objects | Search objects by criteria · Filter objects using filters | ❌ | **Blocked.** The search panel is only wired when the type has *list columns* configured (`columnType === CUSTOM`); otherwise the component issues a GET that ignores the filters. With a list column configured, `POST /api/v1/object-management/configuration/{id}/object` returns **400 with an empty body** — even for an empty `{}` filter body — and `catchError` turns it into an empty list, so the UI silently shows "no results". Needs a backend look before it can be tested | --- @@ -199,7 +205,7 @@ | 6.64 | Rearrange task list columns | Rearrange task list columns | ✅ | case-details-management-tasks.spec.ts | | 6.65 | View task search fields | View task list search fields | ✅ | case-details-management-tasks.spec.ts | | 6.66 | Add task search field | Add task list search field | ✅ | case-details-management-tasks.spec.ts | -| 6.67 | Toggle JSON/table view | Toggle task list JSON/table view | ❌ | | +| 6.67 | Toggle JSON/table view | Toggle task list JSON/table view | `N/A` | The Tasks tab has no JSON view — neither `valtimo-task-management-columns` nor `-search-fields` renders a switch-view control or JSON editor. Only the Case list and Search fields tabs offer one | #### 6J · Case List @@ -256,7 +262,8 @@ | 6.91 | Set widget density | Set widget density | ✅ | case-details-management-widgets.spec.ts | | 6.92 | Set widget style | Set widget style | ✅ | case-details-management-widgets.spec.ts | | 6.93 | Configure widget content | Configure widget content | ✅ | case-details-management-widgets.spec.ts | -| 6.94 | Set widget conditions | Set widget display conditions | ❌ | | +| 6.94 | Set widget conditions | Add a display condition in the wizard's last step · Condition round-trips when reopened | ✅ | case-details-management-widgets.spec.ts (path entered in manual mode; the "Equal to" label is stored as `==`) | +| 6.94a | Reject incomplete condition | Save disabled while a condition row is empty; removing the row re-enables it | ✅ | case-details-management-widgets.spec.ts (failure scenario) | | 6.95 | Add widget separator | Add widget separator | ✅ | case-details-management-widgets.spec.ts | | 6.96 | Rearrange widgets | Rearrange widgets order | ✅ | case-details-management-widgets.spec.ts | | 6.97 | Use widget JSON editor | Use widget JSON editor | ✅ | case-details-management-widgets.spec.ts | @@ -299,13 +306,19 @@ ### Feature 7 — Process Management -| # | Function | Test Scenarios | Coverage | Notes | -|:----|:------------------------|:------------------------------|:--------:|:------------------------------------------------| -| 7.1 | View process overview | Display process overview list | ❌ | | -| 7.2 | Create new process | Create new BPMN process | ❌ | | -| 7.3 | Edit BPMN process | Edit existing BPMN process | ❌ | | -| 7.4 | Deploy process | Deploy process definition | ❌ | | -| 7.5 | Manage process versions | Manage process versions | ❌ | | +Covers the standalone `/processes` admin page (the *independent* process context — process definitions not linked to a case). The case-scoped equivalent is Feature 6B. + +| # | Function | Test Scenarios | Coverage | Notes | +|:-----|:-----------------------------|:-----------------------------------------------------------------------------------|:--------:|:-----------------------------------------------------------------------------| +| 7.1 | View process overview | Display process overview list · Name/Key/Status columns · List matches the API | ✅ | process-management.spec.ts | +| 7.2 | Create new process | Create new BPMN process from the empty diagram and deploy it | ✅ | process-management.spec.ts | +| 7.3 | Edit BPMN process | Edit existing BPMN process in the modeler (append element) | ✅ | process-management.spec.ts | +| 7.4 | Deploy process | Deploy via BPMN upload · Save an edit as a new version · Deploy a new definition | ✅ | process-management.spec.ts | +| 7.5 | Manage process versions | View all versions · Switch version · Disabled while only one version exists | ✅ | process-management.spec.ts | +| 7.6 | Delete process | Delete process definition after confirming | ✅ | process-management.spec.ts | +| 7.6a | Reject upload without file | Upload stays disabled until a BPMN file is selected | ✅ | process-management.spec.ts (failure scenario) | +| 7.6b | Handle duplicate process key | Re-upload of the same key returns 409 and offers replace · cancel deploys nothing | ✅ | process-management.spec.ts (failure scenario) | +| 7.6c | Block invalid process deploy | Non-draft deploy is validated first; errors are highlighted and nothing deploys | ✅ | process-management.spec.ts (failure scenario) | --- @@ -313,10 +326,13 @@ | # | Function | Test Scenarios | Coverage | Notes | |:----|:------------------------------|:--------------------------------------|:--------:|:------------------------------------------------| -| 8.1 | View decision tables overview | Display decision tables overview list | ❌ | | -| 8.2 | Create decision table | Create new decision table | ❌ | | -| 8.3 | Edit decision table | Edit decision table in DMN modeler | ❌ | | -| 8.4 | Test decision table | Test decision table execution | ❌ | | +| 8.1 | View decision tables overview | Overview list visible · Key/Name/Version columns · List matches the API (latest version per key) | ✅ | decision-table-management.spec.ts | +| 8.2 | Create decision table | Name + input variables, then land in the DMN modeler | ✅ | decision-table-management.spec.ts — deliberately stops short of Deploy: a deployed standalone table cannot be removed again (see 8.4c), so deploying would leak state on every run. Deployment is covered case-scoped in 6.40 | +| 8.3 | Edit decision table | Open an existing table in the DMN modeler (editable, content loaded) | ✅ | decision-table-management.spec.ts | +| 8.4 | Test decision table | Test decision table execution | `N/A` | No evaluate/test UI exists — the DMN modeler route has no such control or copy | +| 8.4a | Reject unnamed decision table | Create submit stays disabled while the name is empty | ✅ | decision-table-management.spec.ts (failure scenario) | +| 8.4b | Reject upload without file | Upload submit stays disabled until a DMN file is chosen | ✅ | decision-table-management.spec.ts (failure scenario) | +| 8.4c | Delete unavailable standalone | Delete row action is present but **disabled** outside a case context | ✅ | decision-table-management.spec.ts (failure scenario) — delete is only implemented for case-scoped tables | --- @@ -342,27 +358,29 @@ | 9.9 | Configure plugin (2-step wizard) | Complete 2-step wizard flow | ✅ | plugin.spec.ts | | 9.10 | Choose plugin type from catalog | Select plugin type in step 1 | ✅ | plugin.spec.ts | | 9.11 | Enter plugin data (step 2) | Fill in all required fields in step 2 | ✅ | plugin.spec.ts | -| 9.12 | Auto-generate configuration ID | Verify UUID is auto-generated | ❌ | | +| 9.12 | Auto-generate configuration ID | Configuration ID is optional with a UUID placeholder · Saving it blank generates a UUID | ✅ | plugin.spec.ts (the field is not prefilled; the backend assigns the UUID on save) | | 9.13 | Enter configuration name | Enter and validate required configuration name · Cannot save without configuration name | ✅ | plugin.spec.ts | | 9.14 | Enter RSIN | Enter RSIN for plugins that require it | ✅ | plugin.spec.ts | | 9.15 | Enter plugin API URL | Enter and validate required API URL · Cannot save without API URL · Show validation error for invalid URL format | ✅ | plugin.spec.ts | | 9.16 | Select authentication plugin | Select required authentication plugin configuration · Cannot save without authentication plugin | ✅ | plugin.spec.ts | -| 9.17 | View authentication options | View available authentication options in dropdown | ❌ | | +| 9.17 | View authentication options | Dropdown lists every compatible authentication configuration, labelled `