@nextsparkjs/theme-default 0.1.0-beta.20 → 0.1.0-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_docs/README.md +215 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
- package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
- package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
- package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
- package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
- package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
- package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
- package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
- package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
- package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
- package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
- package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
- package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
- package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
- package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
- package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
- package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
- package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
- package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +78 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +86 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +176 -0
- package/tests/cypress/src/entities/index.ts +14 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +245 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +362 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +500 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress/support/e2e.ts +89 -0
- package/tests/cypress.config.ts +165 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/config/role-config.test.ts +529 -0
- package/tests/jest/jest.config.ts +81 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +367 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/user-roles/role-helpers.test.ts +432 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +15 -0
|
@@ -0,0 +1,552 @@
|
|
|
1
|
+
# Editor Role - Permission Restrictions (Format: BDD/Gherkin - Bilingual)
|
|
2
|
+
|
|
3
|
+
> **Test File:** `editor-role.cy.ts`
|
|
4
|
+
> **Format:** Behavior-Driven Development (BDD) with Given/When/Then
|
|
5
|
+
> **Languages:** English / Spanish (side-by-side)
|
|
6
|
+
> **Total Tests:** 10
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Feature: Editor Role Permission Restrictions
|
|
11
|
+
|
|
12
|
+
<table>
|
|
13
|
+
<tr>
|
|
14
|
+
<th width="50%">English</th>
|
|
15
|
+
<th width="50%">Español</th>
|
|
16
|
+
</tr>
|
|
17
|
+
<tr>
|
|
18
|
+
<td>
|
|
19
|
+
|
|
20
|
+
As an **Editor** (custom role with hierarchy level 5)
|
|
21
|
+
I want to **have read-only access to customers**
|
|
22
|
+
So that **I can view data without accidentally modifying it**
|
|
23
|
+
|
|
24
|
+
**Security Focus:** Editor is a custom role more restrictive than Member.
|
|
25
|
+
- Can only list/read customers (no create/update/delete)
|
|
26
|
+
- Cannot access Sector7 (superadmin only)
|
|
27
|
+
- Cannot access Dev Zone (restricted zone)
|
|
28
|
+
|
|
29
|
+
</td>
|
|
30
|
+
<td>
|
|
31
|
+
|
|
32
|
+
Como **Editor** (rol personalizado con nivel de jerarquia 5)
|
|
33
|
+
Quiero **tener acceso de solo lectura a clientes**
|
|
34
|
+
Para que **pueda ver datos sin modificarlos accidentalmente**
|
|
35
|
+
|
|
36
|
+
**Enfoque de Seguridad:** Editor es un rol personalizado mas restrictivo que Member.
|
|
37
|
+
- Solo puede listar/ver clientes (sin crear/editar/eliminar)
|
|
38
|
+
- No puede acceder a Sector7 (solo superadmin)
|
|
39
|
+
- No puede acceder a Dev Zone (zona restringida)
|
|
40
|
+
|
|
41
|
+
</td>
|
|
42
|
+
</tr>
|
|
43
|
+
</table>
|
|
44
|
+
|
|
45
|
+
### Background
|
|
46
|
+
|
|
47
|
+
<table>
|
|
48
|
+
<tr>
|
|
49
|
+
<th width="50%">English</th>
|
|
50
|
+
<th width="50%">Español</th>
|
|
51
|
+
</tr>
|
|
52
|
+
<tr>
|
|
53
|
+
<td>
|
|
54
|
+
|
|
55
|
+
```gherkin
|
|
56
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
57
|
+
And the API intercepts are set up
|
|
58
|
+
And the application is running on Everpoint Labs team
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
</td>
|
|
62
|
+
<td>
|
|
63
|
+
|
|
64
|
+
```gherkin
|
|
65
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
66
|
+
And los intercepts de API estan configurados
|
|
67
|
+
And la aplicacion esta corriendo en el equipo Everpoint Labs
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
</td>
|
|
71
|
+
</tr>
|
|
72
|
+
</table>
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## UI Restrictions - Buttons Hidden `@smoke`
|
|
77
|
+
|
|
78
|
+
### EDIT_ROLE_001: Editor can view customers list `@smoke`
|
|
79
|
+
|
|
80
|
+
<table>
|
|
81
|
+
<tr>
|
|
82
|
+
<th width="50%">English</th>
|
|
83
|
+
<th width="50%">Español</th>
|
|
84
|
+
</tr>
|
|
85
|
+
<tr>
|
|
86
|
+
<td>
|
|
87
|
+
|
|
88
|
+
```gherkin
|
|
89
|
+
Scenario: Editor can view customers list
|
|
90
|
+
|
|
91
|
+
Given I am logged in as an Editor
|
|
92
|
+
When I navigate to the Customers list page
|
|
93
|
+
And the customer list loads successfully
|
|
94
|
+
Then the customers table should be visible
|
|
95
|
+
And I should see customer data
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Verification:** Basic access to read data is allowed.
|
|
99
|
+
|
|
100
|
+
</td>
|
|
101
|
+
<td>
|
|
102
|
+
|
|
103
|
+
```gherkin
|
|
104
|
+
Scenario: Editor puede ver lista de clientes
|
|
105
|
+
|
|
106
|
+
Given estoy logueado como Editor
|
|
107
|
+
When navego a la pagina de lista de Clientes
|
|
108
|
+
And la lista de clientes carga exitosamente
|
|
109
|
+
Then la tabla de clientes deberia estar visible
|
|
110
|
+
And deberia ver datos de clientes
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Verificacion:** El acceso basico para leer datos esta permitido.
|
|
114
|
+
|
|
115
|
+
</td>
|
|
116
|
+
</tr>
|
|
117
|
+
</table>
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### EDIT_ROLE_002: Create Customer button not visible for Editor `@smoke`
|
|
122
|
+
|
|
123
|
+
<table>
|
|
124
|
+
<tr>
|
|
125
|
+
<th width="50%">English</th>
|
|
126
|
+
<th width="50%">Español</th>
|
|
127
|
+
</tr>
|
|
128
|
+
<tr>
|
|
129
|
+
<td>
|
|
130
|
+
|
|
131
|
+
```gherkin
|
|
132
|
+
Scenario: Create button is hidden for Editor role
|
|
133
|
+
|
|
134
|
+
Given I am logged in as an Editor
|
|
135
|
+
When I navigate to the Customers list page
|
|
136
|
+
And the customer list loads successfully
|
|
137
|
+
Then the "Add" button should NOT exist
|
|
138
|
+
And there should be no way to access the create form
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Security Verification:** Editor has no `customers.create` permission.
|
|
142
|
+
|
|
143
|
+
</td>
|
|
144
|
+
<td>
|
|
145
|
+
|
|
146
|
+
```gherkin
|
|
147
|
+
Scenario: Boton crear esta oculto para rol Editor
|
|
148
|
+
|
|
149
|
+
Given estoy logueado como Editor
|
|
150
|
+
When navego a la pagina de lista de Clientes
|
|
151
|
+
And la lista de clientes carga exitosamente
|
|
152
|
+
Then el boton "Agregar" NO deberia existir
|
|
153
|
+
And no deberia haber forma de acceder al formulario de creacion
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Verificacion de Seguridad:** Editor no tiene permiso `customers.create`.
|
|
157
|
+
|
|
158
|
+
</td>
|
|
159
|
+
</tr>
|
|
160
|
+
</table>
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### EDIT_ROLE_003: Edit/Delete buttons not visible for Editor
|
|
165
|
+
|
|
166
|
+
<table>
|
|
167
|
+
<tr>
|
|
168
|
+
<th width="50%">English</th>
|
|
169
|
+
<th width="50%">Español</th>
|
|
170
|
+
</tr>
|
|
171
|
+
<tr>
|
|
172
|
+
<td>
|
|
173
|
+
|
|
174
|
+
```gherkin
|
|
175
|
+
Scenario: Edit and Delete buttons are hidden in list view
|
|
176
|
+
|
|
177
|
+
Given I am logged in as an Editor
|
|
178
|
+
When I navigate to the Customers list page
|
|
179
|
+
And the customer list loads successfully
|
|
180
|
+
And there are customers in the list
|
|
181
|
+
Then edit action buttons should NOT exist in table rows
|
|
182
|
+
And delete action buttons should NOT exist in table rows
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Note:** Editor only has `customers.list` and `customers.read` permissions.
|
|
186
|
+
|
|
187
|
+
</td>
|
|
188
|
+
<td>
|
|
189
|
+
|
|
190
|
+
```gherkin
|
|
191
|
+
Scenario: Botones editar y eliminar estan ocultos en vista de lista
|
|
192
|
+
|
|
193
|
+
Given estoy logueado como Editor
|
|
194
|
+
When navego a la pagina de lista de Clientes
|
|
195
|
+
And la lista de clientes carga exitosamente
|
|
196
|
+
And hay clientes en la lista
|
|
197
|
+
Then los botones de accion editar NO deberian existir en las filas
|
|
198
|
+
And los botones de accion eliminar NO deberian existir en las filas
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Nota:** Editor solo tiene permisos `customers.list` y `customers.read`.
|
|
202
|
+
|
|
203
|
+
</td>
|
|
204
|
+
</tr>
|
|
205
|
+
</table>
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
### EDIT_ROLE_004: Editor has no row actions menu
|
|
210
|
+
|
|
211
|
+
<table>
|
|
212
|
+
<tr>
|
|
213
|
+
<th width="50%">English</th>
|
|
214
|
+
<th width="50%">Español</th>
|
|
215
|
+
</tr>
|
|
216
|
+
<tr>
|
|
217
|
+
<td>
|
|
218
|
+
|
|
219
|
+
```gherkin
|
|
220
|
+
Scenario: Row actions menu hidden for Editor (no edit/delete permissions)
|
|
221
|
+
|
|
222
|
+
Given I am logged in as an Editor
|
|
223
|
+
When I navigate to the Customers list page
|
|
224
|
+
And the customer list loads successfully
|
|
225
|
+
And there are customers in the list
|
|
226
|
+
Then the row actions menu should NOT exist
|
|
227
|
+
Because Editor has no canUpdate or canDelete permissions
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Note:** EntityList component only renders the actions menu if user has edit or delete permissions.
|
|
231
|
+
|
|
232
|
+
</td>
|
|
233
|
+
<td>
|
|
234
|
+
|
|
235
|
+
```gherkin
|
|
236
|
+
Scenario: Menu de acciones de fila oculto para Editor (sin permisos edit/delete)
|
|
237
|
+
|
|
238
|
+
Given estoy logueado como Editor
|
|
239
|
+
When navego a la pagina de lista de Clientes
|
|
240
|
+
And la lista de clientes carga exitosamente
|
|
241
|
+
And hay clientes en la lista
|
|
242
|
+
Then el menu de acciones de fila NO deberia existir
|
|
243
|
+
Because Editor no tiene permisos canUpdate o canDelete
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Nota:** El componente EntityList solo renderiza el menu de acciones si el usuario tiene permisos de editar o eliminar.
|
|
247
|
+
|
|
248
|
+
</td>
|
|
249
|
+
</tr>
|
|
250
|
+
</table>
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## URL Access Restrictions - Permission Denied
|
|
255
|
+
|
|
256
|
+
### EDIT_ROLE_005: Direct URL to /customers/create shows Permission Denied
|
|
257
|
+
|
|
258
|
+
<table>
|
|
259
|
+
<tr>
|
|
260
|
+
<th width="50%">English</th>
|
|
261
|
+
<th width="50%">Español</th>
|
|
262
|
+
</tr>
|
|
263
|
+
<tr>
|
|
264
|
+
<td>
|
|
265
|
+
|
|
266
|
+
```gherkin
|
|
267
|
+
Scenario: Direct URL access to create is blocked
|
|
268
|
+
|
|
269
|
+
Given I am logged in as an Editor
|
|
270
|
+
When I navigate directly to /dashboard/customers/create
|
|
271
|
+
Then I should see a "Permission Denied" component
|
|
272
|
+
Or I should be redirected to a permission-denied page
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Verification:** Either `[data-cy="permission-denied"]` is visible or URL contains "permission-denied".
|
|
276
|
+
|
|
277
|
+
</td>
|
|
278
|
+
<td>
|
|
279
|
+
|
|
280
|
+
```gherkin
|
|
281
|
+
Scenario: Acceso directo por URL a crear esta bloqueado
|
|
282
|
+
|
|
283
|
+
Given estoy logueado como Editor
|
|
284
|
+
When navego directamente a /dashboard/customers/create
|
|
285
|
+
Then deberia ver un componente de "Permiso Denegado"
|
|
286
|
+
Or deberia ser redirigido a una pagina de permiso-denegado
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Verificacion:** O bien `[data-cy="permission-denied"]` es visible o la URL contiene "permission-denied".
|
|
290
|
+
|
|
291
|
+
</td>
|
|
292
|
+
</tr>
|
|
293
|
+
</table>
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
### EDIT_ROLE_006: Direct URL to /customers/[id]/edit shows Permission Denied
|
|
298
|
+
|
|
299
|
+
<table>
|
|
300
|
+
<tr>
|
|
301
|
+
<th width="50%">English</th>
|
|
302
|
+
<th width="50%">Español</th>
|
|
303
|
+
</tr>
|
|
304
|
+
<tr>
|
|
305
|
+
<td>
|
|
306
|
+
|
|
307
|
+
```gherkin
|
|
308
|
+
Scenario: Direct URL access to edit is blocked
|
|
309
|
+
|
|
310
|
+
Given I am logged in as an Editor
|
|
311
|
+
And there is at least one customer in the list
|
|
312
|
+
When I extract a customer ID from the list
|
|
313
|
+
And I navigate directly to /dashboard/customers/{id}/edit
|
|
314
|
+
Then I should see a "Permission Denied" component
|
|
315
|
+
Or I should be redirected away from /edit
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
</td>
|
|
319
|
+
<td>
|
|
320
|
+
|
|
321
|
+
```gherkin
|
|
322
|
+
Scenario: Acceso directo por URL a editar esta bloqueado
|
|
323
|
+
|
|
324
|
+
Given estoy logueado como Editor
|
|
325
|
+
And existe al menos un cliente en la lista
|
|
326
|
+
When extraigo un ID de cliente de la lista
|
|
327
|
+
And navego directamente a /dashboard/customers/{id}/edit
|
|
328
|
+
Then deberia ver un componente de "Permiso Denegado"
|
|
329
|
+
Or deberia ser redirigido fuera de /edit
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
</td>
|
|
333
|
+
</tr>
|
|
334
|
+
</table>
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Restricted Zones - Access Denied
|
|
339
|
+
|
|
340
|
+
### EDIT_ROLE_007: Editor cannot access Sector7
|
|
341
|
+
|
|
342
|
+
<table>
|
|
343
|
+
<tr>
|
|
344
|
+
<th width="50%">English</th>
|
|
345
|
+
<th width="50%">Español</th>
|
|
346
|
+
</tr>
|
|
347
|
+
<tr>
|
|
348
|
+
<td>
|
|
349
|
+
|
|
350
|
+
```gherkin
|
|
351
|
+
Scenario: Sector7 access is blocked for Editor
|
|
352
|
+
|
|
353
|
+
Given I am logged in as an Editor
|
|
354
|
+
When I navigate directly to /sector7
|
|
355
|
+
Then I should be redirected to /dashboard
|
|
356
|
+
And the URL should include "error=access_denied"
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**Severity:** Blocker - Sector7 is superadmin-only area.
|
|
360
|
+
|
|
361
|
+
</td>
|
|
362
|
+
<td>
|
|
363
|
+
|
|
364
|
+
```gherkin
|
|
365
|
+
Scenario: Acceso a Sector7 esta bloqueado para Editor
|
|
366
|
+
|
|
367
|
+
Given estoy logueado como Editor
|
|
368
|
+
When navego directamente a /sector7
|
|
369
|
+
Then deberia ser redirigido a /dashboard
|
|
370
|
+
And la URL deberia incluir "error=access_denied"
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Severidad:** Bloqueante - Sector7 es area solo para superadmin.
|
|
374
|
+
|
|
375
|
+
</td>
|
|
376
|
+
</tr>
|
|
377
|
+
</table>
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
### EDIT_ROLE_008: Editor cannot access Dev Zone
|
|
382
|
+
|
|
383
|
+
<table>
|
|
384
|
+
<tr>
|
|
385
|
+
<th width="50%">English</th>
|
|
386
|
+
<th width="50%">Español</th>
|
|
387
|
+
</tr>
|
|
388
|
+
<tr>
|
|
389
|
+
<td>
|
|
390
|
+
|
|
391
|
+
```gherkin
|
|
392
|
+
Scenario: Dev Zone access is blocked for Editor
|
|
393
|
+
|
|
394
|
+
Given I am logged in as an Editor
|
|
395
|
+
When I navigate directly to /dev
|
|
396
|
+
Then I should be redirected to /dashboard
|
|
397
|
+
And the URL should include "error=access_denied"
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**Severity:** Blocker - Dev Zone is a restricted development area.
|
|
401
|
+
|
|
402
|
+
</td>
|
|
403
|
+
<td>
|
|
404
|
+
|
|
405
|
+
```gherkin
|
|
406
|
+
Scenario: Acceso a Dev Zone esta bloqueado para Editor
|
|
407
|
+
|
|
408
|
+
Given estoy logueado como Editor
|
|
409
|
+
When navego directamente a /dev
|
|
410
|
+
Then deberia ser redirigido a /dashboard
|
|
411
|
+
And la URL deberia incluir "error=access_denied"
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
**Severidad:** Bloqueante - Dev Zone es un area de desarrollo restringida.
|
|
415
|
+
|
|
416
|
+
</td>
|
|
417
|
+
</tr>
|
|
418
|
+
</table>
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
### EDIT_ROLE_009: Editor UI does not show Sector7 button
|
|
423
|
+
|
|
424
|
+
<table>
|
|
425
|
+
<tr>
|
|
426
|
+
<th width="50%">English</th>
|
|
427
|
+
<th width="50%">Español</th>
|
|
428
|
+
</tr>
|
|
429
|
+
<tr>
|
|
430
|
+
<td>
|
|
431
|
+
|
|
432
|
+
```gherkin
|
|
433
|
+
Scenario: Sector7 button is hidden from Editor UI
|
|
434
|
+
|
|
435
|
+
Given I am logged in as an Editor
|
|
436
|
+
When I navigate to /dashboard
|
|
437
|
+
Then the Sector7 button should NOT exist
|
|
438
|
+
And the admin toolbar should NOT exist
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
</td>
|
|
442
|
+
<td>
|
|
443
|
+
|
|
444
|
+
```gherkin
|
|
445
|
+
Scenario: Boton Sector7 esta oculto de la UI de Editor
|
|
446
|
+
|
|
447
|
+
Given estoy logueado como Editor
|
|
448
|
+
When navego a /dashboard
|
|
449
|
+
Then el boton Sector7 NO deberia existir
|
|
450
|
+
And la barra de herramientas de admin NO deberia existir
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
</td>
|
|
454
|
+
</tr>
|
|
455
|
+
</table>
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
### EDIT_ROLE_010: Editor UI does not show Dev Zone button
|
|
460
|
+
|
|
461
|
+
<table>
|
|
462
|
+
<tr>
|
|
463
|
+
<th width="50%">English</th>
|
|
464
|
+
<th width="50%">Español</th>
|
|
465
|
+
</tr>
|
|
466
|
+
<tr>
|
|
467
|
+
<td>
|
|
468
|
+
|
|
469
|
+
```gherkin
|
|
470
|
+
Scenario: Dev Zone button is hidden from Editor UI
|
|
471
|
+
|
|
472
|
+
Given I am logged in as an Editor
|
|
473
|
+
When I navigate to /dashboard
|
|
474
|
+
Then the Dev Zone button should NOT exist
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
</td>
|
|
478
|
+
<td>
|
|
479
|
+
|
|
480
|
+
```gherkin
|
|
481
|
+
Scenario: Boton Dev Zone esta oculto de la UI de Editor
|
|
482
|
+
|
|
483
|
+
Given estoy logueado como Editor
|
|
484
|
+
When navego a /dashboard
|
|
485
|
+
Then el boton Dev Zone NO deberia existir
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
</td>
|
|
489
|
+
</tr>
|
|
490
|
+
</table>
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## Permission Matrix / Matriz de Permisos
|
|
495
|
+
|
|
496
|
+
| Entity / Entidad | Operation / Operación | Editor | Member | Owner | Admin |
|
|
497
|
+
|------------------|----------------------|:------:|:------:|:-----:|:-----:|
|
|
498
|
+
| **Customers** | CREATE | **No** | **No** | Yes | Yes |
|
|
499
|
+
| **Customers** | READ | Yes | Yes | Yes | Yes |
|
|
500
|
+
| **Customers** | LIST | Yes | Yes | Yes | Yes |
|
|
501
|
+
| **Customers** | UPDATE | **No** | **No** | Yes | Yes |
|
|
502
|
+
| **Customers** | DELETE | **No** | **No** | Yes | Yes |
|
|
503
|
+
| **Sector7** | ACCESS | **No** | **No** | **No** | **No** |
|
|
504
|
+
| **Dev Zone** | ACCESS | **No** | **No** | **No** | **No** |
|
|
505
|
+
|
|
506
|
+
**Note:** Sector7 and Dev Zone require superadmin access, not regular roles.
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## UI Elements / Elementos UI
|
|
511
|
+
|
|
512
|
+
### Permission Components
|
|
513
|
+
|
|
514
|
+
| Element | Selector | Description / Descripción |
|
|
515
|
+
|---------|----------|---------------------------|
|
|
516
|
+
| Permission Denied | `[data-cy="permission-denied"]` | Permission denied component |
|
|
517
|
+
| Add Button | `[data-cy="customers-add"]` | Create button (should not exist) |
|
|
518
|
+
| Row Action View | `[data-cy="row-action-view"]` | View option in row menu |
|
|
519
|
+
| Row Action Edit | `[data-cy="row-action-edit"]` | Edit option (should not exist) |
|
|
520
|
+
| Row Action Delete | `[data-cy="row-action-delete"]` | Delete option (should not exist) |
|
|
521
|
+
| Sector7 Button | `[data-cy="sector7-button"]` | Sector7 access button |
|
|
522
|
+
| Dev Zone Button | `[data-cy="dev-zone-button"]` | Dev Zone access button |
|
|
523
|
+
| Admin Toolbar | `[data-cy="admin-toolbar"]` | Admin-only toolbar |
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## Role Hierarchy / Jerarquia de Roles
|
|
528
|
+
|
|
529
|
+
| Role / Rol | Level / Nivel | Description / Descripción |
|
|
530
|
+
|------------|:-------------:|---------------------------|
|
|
531
|
+
| Owner | 100 | Full access, protected role |
|
|
532
|
+
| Admin | 50 | Administrative access |
|
|
533
|
+
| Member | 10 | Standard team member |
|
|
534
|
+
| **Editor** | **5** | **Custom read-only role** |
|
|
535
|
+
| Viewer | 1 | View-only access |
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
## Summary / Resumen
|
|
540
|
+
|
|
541
|
+
| Test ID | Block | Description / Descripción | Tags |
|
|
542
|
+
|---------|-------|---------------------------|------|
|
|
543
|
+
| EDIT_ROLE_001 | UI Restrictions | Editor can view list | `@smoke` |
|
|
544
|
+
| EDIT_ROLE_002 | UI Restrictions | Create button hidden | `@smoke` |
|
|
545
|
+
| EDIT_ROLE_003 | UI Restrictions | Edit/Delete buttons hidden | |
|
|
546
|
+
| EDIT_ROLE_004 | UI Restrictions | Row menu only shows View | |
|
|
547
|
+
| EDIT_ROLE_005 | URL Access | /create blocked | |
|
|
548
|
+
| EDIT_ROLE_006 | URL Access | /edit blocked | |
|
|
549
|
+
| EDIT_ROLE_007 | Restricted Zones | Sector7 blocked | |
|
|
550
|
+
| EDIT_ROLE_008 | Restricted Zones | Dev Zone blocked | |
|
|
551
|
+
| EDIT_ROLE_009 | Restricted Zones | Sector7 button hidden | |
|
|
552
|
+
| EDIT_ROLE_010 | Restricted Zones | Dev Zone button hidden | |
|