Skip to content

Commit 80d443a

Browse files
authored
test(quality): expand feature validation coverage (CoreBunch#84)
* test(quality): expand feature validation coverage * fix(settings): contain preferences modal on mobile * test(users): cover non-owner lifecycle validation * test(admin): cover global toolbar live targets * fix(admin): harden workspace shell recovery * fix(admin): contain right sidebar on mobile * test(server): clarify audit SQL null bindings * test(quality): clear code quality blockers * test(quality): avoid CodeQL step-up false positive * test(quality): resolve feature validation rebase drift
1 parent b9c74d6 commit 80d443a

179 files changed

Lines changed: 16512 additions & 982 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/e2e/README.md

Lines changed: 298 additions & 26 deletions
Large diffs are not rendered by default.

docs/e2e/capabilities.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Use disposable local data and create one custom role per scenario. Log out betwe
1515
| Expected | Site and Media are reachable, Account is reachable, disallowed workspaces are hidden or denied without exposing their data. Direct disallowed URLs must not render the protected workspace. |
1616
| Watch For | Stale nav items, route flashes before redirect, protected data in loading states, unclear denial copy. |
1717

18+
Automation note: `tests/e2e/users.e2e.ts` covers the limited Site + Media role path. It verifies Media is the only granted non-self workspace shown in the toolbar, Content and Users are absent, and direct `/admin/users` navigation redirects away without rendering the protected Users screen.
19+
1820
## CAP-002: Site Edit Mode Boundaries
1921

2022
| Field | Value |
@@ -37,24 +39,30 @@ Use disposable local data and create one custom role per scenario. Log out betwe
3739
| Expected | The first attempt opens step-up, cancel leaves state unchanged, wrong password shows a clear error, correct password completes or reaches the action's normal validation. |
3840
| Watch For | Actions completing before step-up, stale step-up windows across users, generic auth errors, partial side effects after cancel or wrong password. |
3941

42+
Automation note: `tests/e2e/capabilities.e2e.ts` covers plugin JSON-manifest install/uninstall and destructive CMS-bundle replace import step-up for cancel, wrong password, and correct password. Publish and user creation step-up are covered by the publishing, Users, and Account specs, including mobile user-create step-up dialog containment at 390px and MFA-enabled user-create step-up with wrong-code/no-mutation coverage.
43+
4044
## CAP-004: Data And Media Capability Splits
4145

4246
| Field | Value |
4347
|---|---|
4448
| Priority | P1 |
45-
| Personas | Data reader, data manager, media reader, media writer, media replacer, media deleter |
49+
| Personas | Data reader, data manager, data exporter, data importer, media reader, media writer, media replacer, media deleter |
4650
| Setup | Seed a data table with rows and upload one media asset as Owner. Create one role for each listed persona. |
4751
| Path | Exercise table browsing, table creation, row move/export/import affordances, media browse/upload/metadata/replace/delete affordances. |
4852
| Expected | Read personas can browse but not mutate. Write/manage personas see only the operations their capability grants. Replace and delete are not implied by upload/write. |
4953
| Watch For | Hidden operations still reachable by direct URL, destructive media actions exposed to writers, data import/export buttons shown to table readers. |
5054

55+
Automation note: `tests/e2e/capabilities.e2e.ts` covers data reader, data manager, data exporter, data importer, content editor without row-move capability, content mover, media reader, media writer, media replacer, and media deleter personas. The automated data checks verify custom-table visibility, schema-only browsing without row-permission errors, table creation, import/export modal affordance boundaries, row-move controls hidden without `data.rows.move`, and a permitted content mover moving an entry between collections. The automated media checks verify read/write/replace/delete stay separate, replace can swap bytes without metadata/delete controls, and delete can trash/purge without upload/replace controls.
56+
5157
## CAP-005: Plugin And AI Capability Splits
5258

5359
| Field | Value |
5460
|---|---|
5561
| Priority | P1 |
56-
| Personas | Plugin reader, plugin configurator, plugin lifecycle operator, AI chat user, AI provider manager, AI auditor |
62+
| Personas | Plugin reader, plugin installer, plugin configurator, plugin lifecycle operator, AI chat user, AI provider manager, AI auditor |
5763
| Setup | Install or seed a harmless test plugin if available. Configure an AI provider only when the run owns a disposable key or local provider. |
58-
| Path | Check plugin list/settings/lifecycle actions per role. For AI, check provider settings, audit tab, conversation list, and chat-only tool behavior. |
59-
| Expected | Plugin read/configure/lifecycle/install surfaces remain separate. AI chat users can open conversations but cannot access provider credentials or audit, and mutating tools are not presented. |
60-
| Watch For | Masked settings leaking to read-only roles, lifecycle controls exposed to configurators, AI write actions available to chat-only users. |
64+
| Path | Check plugin list/settings/lifecycle/schedule/pack actions per role. For AI, check provider settings, audit tab, conversation list, and chat-only tool behavior. |
65+
| Expected | Plugin read/configure/lifecycle/install/schedule/pack surfaces remain separate. AI chat users can open conversations but cannot access provider credentials or audit, and mutating tools are not presented. |
66+
| Watch For | Masked settings leaking to read-only roles, lifecycle controls exposed to configurators, schedule mutation controls exposed to readers, pack re-sync exposed without install capability, AI write actions available to chat-only users. |
67+
68+
Automation note: `tests/e2e/capabilities.e2e.ts` covers plugin reader vs installer upload/remove affordances, plugin configurators seeing Settings without install/lifecycle controls, plugin lifecycle operators seeing Disable without settings/install controls, installed-plugin schedule inspection without lifecycle mutation controls for readers, schedule mutation controls for lifecycle operators, pack re-sync visibility for installers only, site reader without `ai.chat` hiding the assistant rail, site reader with `ai.chat` opening the assistant panel, AI provider managers seeing Providers/Defaults without Audit, and AI auditors seeing Audit without provider/default controls. `tests/e2e/ai.e2e.ts` covers AI write-tool filtering by downgrading a credential-owning persona to `ai.chat` only before sending a Site assistant prompt, then asserting the fake-provider request includes read tools and omits mutating tools.

0 commit comments

Comments
 (0)