@nextsparkjs/theme-default 0.1.0-beta.20 → 0.1.0-beta.21

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.
Files changed (220) hide show
  1. package/package.json +1 -1
  2. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  3. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  4. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  5. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  6. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  7. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  8. package/tests/cypress/e2e/_docs/README.md +215 -0
  9. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  11. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  13. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  14. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  15. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  19. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  20. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  21. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  22. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  23. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  24. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  25. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  26. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  27. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  28. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  29. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  30. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  31. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  32. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  33. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  34. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  36. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  38. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  40. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  42. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  43. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  44. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  45. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  46. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  47. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  48. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  49. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  50. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  51. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  52. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  53. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  54. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  55. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  56. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  57. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  58. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  59. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  60. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  61. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  62. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  63. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  64. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  65. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  66. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  67. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  68. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  69. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  70. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  71. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  72. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  78. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  79. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  83. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  85. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  87. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  89. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  95. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  96. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  97. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  99. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  100. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  101. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  102. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  103. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  105. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  106. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  107. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  109. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  110. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  112. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  114. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  118. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  120. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  122. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  126. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  128. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  130. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  132. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  136. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  138. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  140. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  142. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  144. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  146. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  148. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  149. package/tests/cypress/fixtures/blocks.json +218 -0
  150. package/tests/cypress/fixtures/entities.json +78 -0
  151. package/tests/cypress/fixtures/page-builder.json +21 -0
  152. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  153. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  154. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  155. package/tests/cypress/src/components/EntityForm.ts +375 -0
  156. package/tests/cypress/src/components/EntityList.ts +389 -0
  157. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  158. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  159. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  160. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  161. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  162. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  163. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  164. package/tests/cypress/src/components/index.ts +21 -0
  165. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  166. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  167. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  168. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  169. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  170. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  171. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  172. package/tests/cypress/src/controllers/index.js +25 -0
  173. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  174. package/tests/cypress/src/core/BasePOM.ts +86 -0
  175. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  176. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  177. package/tests/cypress/src/core/index.ts +14 -0
  178. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  179. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  180. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  181. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  182. package/tests/cypress/src/entities/index.ts +14 -0
  183. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  184. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  185. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  186. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  187. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  188. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  189. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  190. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  191. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  192. package/tests/cypress/src/features/index.ts +28 -0
  193. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  194. package/tests/cypress/src/index.ts +101 -0
  195. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  196. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  198. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  199. package/tests/cypress/src/pages/index.js +5 -0
  200. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  201. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  202. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  203. package/tests/cypress/src/pages/public/index.js +6 -0
  204. package/tests/cypress/src/selectors.ts +46 -0
  205. package/tests/cypress/src/session-helpers.ts +500 -0
  206. package/tests/cypress/support/doc-commands.ts +260 -0
  207. package/tests/cypress.config.ts +150 -0
  208. package/tests/jest/components/post-header.test.tsx +377 -0
  209. package/tests/jest/config/role-config.test.ts +529 -0
  210. package/tests/jest/jest.config.ts +81 -0
  211. package/tests/jest/langchain/COVERAGE.md +372 -0
  212. package/tests/jest/langchain/guardrails.test.ts +465 -0
  213. package/tests/jest/langchain/streaming.test.ts +367 -0
  214. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  215. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  216. package/tests/jest/langchain/tracer.test.ts +823 -0
  217. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  218. package/tests/jest/validation/categories.test.ts +429 -0
  219. package/tests/jest/validation/posts.test.ts +546 -0
  220. package/tests/tsconfig.json +15 -0
@@ -0,0 +1,288 @@
1
+ ---
2
+ feature: Editor Custom Role Permissions
3
+ priority: high
4
+ tags: [auth, custom-role, editor, permissions, security, theme]
5
+ grepTags: [uat, feat-auth, custom-role, editor]
6
+ coverage: 8
7
+ ---
8
+
9
+ # Editor Custom Role Permissions
10
+
11
+ > Tests for Editor custom role permissions. Editor is a theme-defined custom role with view-only access to entities. Cannot create, update, or delete. Cannot access Sector7 or Dev Zone.
12
+
13
+ ## @test EDITOR-PERM-001: Editor Dashboard Access
14
+
15
+ ### Metadata
16
+ - **Priority:** Critical
17
+ - **Type:** Smoke
18
+ - **Tags:** editor, dashboard
19
+ - **Grep:** `@smoke`
20
+
21
+ ```gherkin:en
22
+ Scenario: Editor can access dashboard
23
+
24
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
25
+ When I visit /dashboard
26
+ Then the dashboard container should be visible
27
+ ```
28
+
29
+ ```gherkin:es
30
+ Scenario: Editor puede acceder al dashboard
31
+
32
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
33
+ When visito /dashboard
34
+ Then el contenedor del dashboard deberia estar visible
35
+ ```
36
+
37
+ ### Expected Results
38
+ - Dashboard loads correctly
39
+ - Limited navigation based on permissions
40
+
41
+ ---
42
+
43
+ ## @test EDITOR-PERM-002: Editor View-Only Customer Access
44
+
45
+ ### Metadata
46
+ - **Priority:** Critical
47
+ - **Type:** Smoke
48
+ - **Tags:** editor, customers, view-only
49
+ - **Grep:** `@smoke`
50
+
51
+ ```gherkin:en
52
+ Scenario: Editor has view-only access to customers list
53
+
54
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
55
+ When I visit /customers
56
+ Then the entity list should be visible
57
+ And the create button should NOT exist
58
+ ```
59
+
60
+ ```gherkin:es
61
+ Scenario: Editor tiene acceso solo lectura a lista de customers
62
+
63
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
64
+ When visito /customers
65
+ Then la lista de entidades deberia estar visible
66
+ And el boton de crear NO deberia existir
67
+ ```
68
+
69
+ ### Expected Results
70
+ - Can view customer list
71
+ - No create button
72
+ - Read-only experience
73
+
74
+ ---
75
+
76
+ ## @test EDITOR-PERM-003: Editor Cannot Edit Customers
77
+
78
+ ### Metadata
79
+ - **Priority:** High
80
+ - **Type:** Security
81
+ - **Tags:** editor, customers, no-edit
82
+
83
+ ```gherkin:en
84
+ Scenario: Editor cannot see edit buttons on customers
85
+
86
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
87
+ When I visit /customers
88
+ Then the entity list should be visible
89
+ And edit buttons should not exist on items
90
+ And delete buttons should not exist on items
91
+ ```
92
+
93
+ ```gherkin:es
94
+ Scenario: Editor no puede ver botones de editar en customers
95
+
96
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
97
+ When visito /customers
98
+ Then la lista de entidades deberia estar visible
99
+ And los botones de editar no deberian existir en items
100
+ And los botones de eliminar no deberian existir en items
101
+ ```
102
+
103
+ ### Expected Results
104
+ - No edit action buttons
105
+ - No delete action buttons
106
+ - Pure read-only interface
107
+
108
+ ---
109
+
110
+ ## @test EDITOR-PERM-004: Editor Tasks Access
111
+
112
+ ### Metadata
113
+ - **Priority:** High
114
+ - **Type:** Regression
115
+ - **Tags:** editor, tasks, read-only
116
+
117
+ ```gherkin:en
118
+ Scenario: Editor has read-only access to tasks
119
+
120
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
121
+ When I visit /tasks
122
+ Then the entity list should be visible
123
+ And the create button should NOT exist
124
+ ```
125
+
126
+ ```gherkin:es
127
+ Scenario: Editor tiene acceso solo lectura a tasks
128
+
129
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
130
+ When visito /tasks
131
+ Then la lista de entidades deberia estar visible
132
+ And el boton de crear NO deberia existir
133
+ ```
134
+
135
+ ### Expected Results
136
+ - Can view task list
137
+ - No create functionality
138
+
139
+ ---
140
+
141
+ ## @test EDITOR-PERM-005: Editor Settings Access
142
+
143
+ ### Metadata
144
+ - **Priority:** Normal
145
+ - **Type:** Regression
146
+ - **Tags:** editor, settings
147
+
148
+ ```gherkin:en
149
+ Scenario: Editor has profile-only settings access
150
+
151
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
152
+ When I visit /settings
153
+ Then I should see profile tab or be redirected
154
+ ```
155
+
156
+ ```gherkin:es
157
+ Scenario: Editor tiene acceso solo a perfil en settings
158
+
159
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
160
+ When visito /settings
161
+ Then deberia ver pestana de perfil o ser redirigido
162
+ ```
163
+
164
+ ### Expected Results
165
+ - Profile settings accessible
166
+ - No team settings access
167
+
168
+ ---
169
+
170
+ ## @test EDITOR-PERM-006: Editor Cannot Access Sector7
171
+
172
+ ### Metadata
173
+ - **Priority:** High
174
+ - **Type:** Security
175
+ - **Tags:** editor, sector7, blocked
176
+
177
+ ```gherkin:en
178
+ Scenario: Editor is blocked from Sector7
179
+
180
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
181
+ When I attempt to visit /sector7
182
+ Then I should be redirected away from /sector7
183
+ ```
184
+
185
+ ```gherkin:es
186
+ Scenario: Editor no puede acceder a Sector7
187
+
188
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
189
+ When intento visitar /sector7
190
+ Then deberia ser redirigido fuera de /sector7
191
+ ```
192
+
193
+ ### Expected Results
194
+ - Access denied
195
+ - Redirect to dashboard
196
+
197
+ ---
198
+
199
+ ## @test EDITOR-PERM-007: Editor Cannot Access Dev Zone
200
+
201
+ ### Metadata
202
+ - **Priority:** High
203
+ - **Type:** Security
204
+ - **Tags:** editor, dev-zone, blocked
205
+
206
+ ```gherkin:en
207
+ Scenario: Editor is blocked from Dev Zone
208
+
209
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
210
+ When I attempt to visit /dev
211
+ Then I should be redirected away from /dev
212
+ ```
213
+
214
+ ```gherkin:es
215
+ Scenario: Editor no puede acceder a Dev Zone
216
+
217
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
218
+ When intento visitar /dev
219
+ Then deberia ser redirigido fuera de /dev
220
+ ```
221
+
222
+ ### Expected Results
223
+ - Access denied
224
+ - Redirect to dashboard
225
+
226
+ ---
227
+
228
+ ## @test EDITOR-PERM-008: Editor Logout Flow
229
+
230
+ ### Metadata
231
+ - **Priority:** Normal
232
+ - **Type:** Regression
233
+ - **Tags:** editor, logout
234
+
235
+ ```gherkin:en
236
+ Scenario: Editor can logout successfully
237
+
238
+ Given I am logged in as Editor (diego.ramirez@nextspark.dev)
239
+ And I am on the dashboard
240
+ When I click on user menu
241
+ And I click on Sign Out
242
+ Then I should be redirected to /login
243
+ ```
244
+
245
+ ```gherkin:es
246
+ Scenario: Editor puede cerrar sesion correctamente
247
+
248
+ Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
249
+ And estoy en el dashboard
250
+ When hago click en el menu de usuario
251
+ And hago click en Sign Out
252
+ Then deberia ser redirigido a /login
253
+ ```
254
+
255
+ ### Expected Results
256
+ - Logout works correctly
257
+ - Redirect to login page
258
+
259
+ ---
260
+
261
+ ## UI Elements
262
+
263
+ | Element | Selector | Description |
264
+ |---------|----------|-------------|
265
+ | Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
266
+ | Create Button | `[data-cy="entity-create-button"]` | Entity create button (should not exist) |
267
+ | Entity List | `[data-cy="entity-list-container"]` | Entity list container |
268
+ | Row Edit | `[data-cy="entity-row-edit"]` | Row edit button (should not exist) |
269
+ | Row Delete | `[data-cy="entity-row-delete"]` | Row delete button (should not exist) |
270
+ | Settings Container | `[data-cy="settings-container"]` | Settings page container |
271
+ | Profile Tab | `[data-cy="settings-tab-profile"]` | Profile settings tab |
272
+ | User Menu | `[data-cy="topnav-user-menu-trigger"]` | User menu trigger |
273
+ | Sign Out | `[data-cy="topnav-menu-signOut"]` | Sign out button |
274
+
275
+ ---
276
+
277
+ ## Summary
278
+
279
+ | Test ID | Block | Description | Tags |
280
+ |---------|-------|-------------|------|
281
+ | EDITOR-PERM-001 | Access | Dashboard access | `@smoke` |
282
+ | EDITOR-PERM-002 | View-Only | View-only customers | `@smoke` |
283
+ | EDITOR-PERM-003 | Blocked | Cannot edit customers | |
284
+ | EDITOR-PERM-004 | View-Only | Read-only tasks | |
285
+ | EDITOR-PERM-005 | Access | Profile-only settings | |
286
+ | EDITOR-PERM-006 | Blocked | Sector7 blocked | |
287
+ | EDITOR-PERM-007 | Blocked | Dev Zone blocked | |
288
+ | EDITOR-PERM-008 | Logout | Logout flow | |
@@ -0,0 +1,188 @@
1
+ /// <reference types="cypress" />
2
+
3
+ /**
4
+ * Editor Custom Role Login Tests
5
+ *
6
+ * Tests the Editor custom role (theme-defined) login and specific permissions:
7
+ * - Editor is a custom role defined in the Default theme
8
+ * - Can view/list customers but cannot create/update/delete
9
+ * - Limited navigation and entity access
10
+ * - Cannot access Superadmin or Dev Zone
11
+ *
12
+ * Note: Editor role is team-based (not a global app role)
13
+ * This file tests Editor-specific permissions as defined in the theme.
14
+ *
15
+ * Tags: @uat, @feat-auth, @custom-role, @editor
16
+ */
17
+
18
+ import * as allure from 'allure-cypress'
19
+
20
+ import { loginAsDefaultEditor, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
21
+ import { DashboardPOM } from '../../../../src/features/DashboardPOM'
22
+ import { SettingsPOM } from '../../../../src/features/SettingsPOM'
23
+ import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
24
+ import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
25
+ import { AuthPOM } from '../../../../src/core/AuthPOM'
26
+
27
+ describe('Authentication - Editor Custom Role Permissions', {
28
+ tags: ['@uat', '@feat-auth', '@custom-role', '@editor']
29
+ }, () => {
30
+ const dashboard = DashboardPOM.create()
31
+ const settings = SettingsPOM.create()
32
+ const sector7 = SuperadminPOM.create()
33
+ const devArea = DevAreaPOM.create()
34
+ const auth = new AuthPOM()
35
+
36
+ beforeEach(() => {
37
+ allure.epic('Authentication')
38
+ allure.feature('Custom Roles')
39
+ allure.story('Editor Permissions')
40
+ loginAsDefaultEditor()
41
+ })
42
+
43
+ describe('EDITOR-PERM-001: Editor Dashboard Access', { tags: '@smoke' }, () => {
44
+ it('should access dashboard with limited navigation', { tags: '@smoke' }, () => {
45
+ allure.severity('critical')
46
+
47
+ // 1. Visit dashboard and wait for load
48
+ dashboard.visitDashboard()
49
+ dashboard.waitForDashboard()
50
+
51
+ // 2. Validate dashboard is accessible
52
+ dashboard.assertDashboardVisible()
53
+
54
+ cy.log(`✅ Editor dashboard access verified (${DEFAULT_THEME_USERS.EDITOR})`)
55
+ })
56
+ })
57
+
58
+ describe('EDITOR-PERM-002: Editor View-Only Customer Access', { tags: '@smoke' }, () => {
59
+ it('should have view-only access to customers list', { tags: '@smoke' }, () => {
60
+ allure.severity('critical')
61
+
62
+ // 1. Navigate to customers
63
+ dashboard.visitEntity('customers')
64
+ dashboard.waitForEntityPage('customers')
65
+
66
+ // 2. Validate table is visible (Editor can read)
67
+ dashboard.assertEntityPageVisible('customers')
68
+
69
+ // 3. Create button should NOT be visible for Editor
70
+ dashboard.assertEntityAddButtonNotVisible('customers')
71
+
72
+ cy.log('✅ Editor has view-only access to customers')
73
+ })
74
+ })
75
+
76
+ describe('EDITOR-PERM-003: Editor Cannot Edit Customers', () => {
77
+ it('should not see edit buttons on customer items', () => {
78
+ allure.severity('high')
79
+
80
+ // 1. Navigate to customers
81
+ dashboard.visitEntity('customers')
82
+ dashboard.waitForEntityPage('customers')
83
+
84
+ // 2. Validate table is visible
85
+ dashboard.assertEntityPageVisible('customers')
86
+
87
+ // 3. If there are items, check they don't have edit buttons
88
+ cy.get('body').then(($body) => {
89
+ if ($body.find('[data-cy^="customers-row-"]').length > 0) {
90
+ // Check first row doesn't have edit action
91
+ cy.get('[data-cy^="customers-row-"]').first().within(() => {
92
+ cy.get('[data-cy*="edit"]').should('not.exist')
93
+ cy.get('[data-cy*="delete"]').should('not.exist')
94
+ })
95
+ cy.log('✅ Editor cannot see edit/delete actions')
96
+ } else {
97
+ cy.log('✅ No items to verify, but create button is hidden')
98
+ }
99
+ })
100
+ })
101
+ })
102
+
103
+ describe('EDITOR-PERM-004: Editor Tasks Access', { tags: '@in-develop' }, () => {
104
+ it('should NOT have access to tasks (permission denied)', { tags: '@in-develop' }, () => {
105
+ allure.severity('high')
106
+
107
+ // 1. Navigate to tasks - Editor does NOT have tasks.list permission
108
+ cy.visit('/dashboard/tasks', { failOnStatusCode: false })
109
+
110
+ // 2. Should be redirected to permission denied page
111
+ cy.url().should('include', 'permission-denied')
112
+ cy.contains('Acceso denegado').should('be.visible')
113
+
114
+ cy.log('✅ Editor correctly blocked from tasks')
115
+ })
116
+ })
117
+
118
+ describe('EDITOR-PERM-005: Editor Settings Access', () => {
119
+ it('should have profile-only settings access', () => {
120
+ allure.severity('normal')
121
+
122
+ // 1. Navigate to settings
123
+ settings.visitSettings()
124
+
125
+ // 2. Check access
126
+ cy.url().then((url) => {
127
+ if (url.includes('/settings')) {
128
+ settings.assertSettingsVisible()
129
+ // Should only see profile, not team settings
130
+ settings.assertNavItemVisible('profile')
131
+ cy.log('✅ Editor has profile settings access')
132
+ } else {
133
+ cy.log('✅ Editor redirected from settings')
134
+ }
135
+ })
136
+ })
137
+ })
138
+
139
+ describe('EDITOR-PERM-006: Editor Cannot Access Superadmin', () => {
140
+ it('should be redirected when trying to access /superadmin', () => {
141
+ allure.severity('high')
142
+
143
+ // 1. Attempt to visit Superadmin
144
+ cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
145
+
146
+ // 2. Should be redirected
147
+ sector7.assertAccessDenied()
148
+
149
+ cy.log('✅ Editor correctly blocked from Superadmin')
150
+ })
151
+ })
152
+
153
+ describe('EDITOR-PERM-007: Editor Cannot Access Dev Zone', () => {
154
+ it('should be redirected when trying to access /dev', () => {
155
+ allure.severity('high')
156
+
157
+ // 1. Attempt to visit Dev Zone
158
+ devArea.attemptToVisitDev()
159
+
160
+ // 2. Should be redirected
161
+ devArea.assertRedirectedToDashboard()
162
+
163
+ cy.log('✅ Editor correctly blocked from Dev Zone')
164
+ })
165
+ })
166
+
167
+ describe('EDITOR-PERM-008: Editor Logout Flow', () => {
168
+ it('should logout successfully', () => {
169
+ allure.severity('normal')
170
+
171
+ // 1. Visit dashboard
172
+ dashboard.visitDashboard()
173
+ dashboard.waitForDashboard()
174
+
175
+ // 2. Logout using AuthPOM
176
+ auth.logout()
177
+
178
+ // 3. Validate redirected to login
179
+ auth.assertOnLoginPage()
180
+
181
+ cy.log('✅ Editor logout successful')
182
+ })
183
+ })
184
+
185
+ after(() => {
186
+ cy.log('✅ Editor custom role tests completed')
187
+ })
188
+ })
@@ -0,0 +1,160 @@
1
+ ---
2
+ feature: Authentication via DevKeyring
3
+ priority: critical
4
+ tags: [auth, login, logout, devkeyring]
5
+ grepTags: [uat, feat-auth, smoke, critical]
6
+ coverage: 4
7
+ ---
8
+
9
+ # Authentication via DevKeyring
10
+
11
+ > Test suite for user authentication using DevKeyring development tool. Covers login flows for Owner, Member, and Admin roles, plus logout functionality.
12
+
13
+ ## @test LOGIN-001: Owner Login via DevKeyring
14
+
15
+ ### Metadata
16
+ - **Priority:** Critical
17
+ - **Type:** Smoke
18
+ - **Tags:** login, owner, devkeyring
19
+ - **Grep:** `@smoke` `@critical`
20
+
21
+ ```gherkin:en
22
+ Scenario: Owner can login and access dashboard
23
+
24
+ Given I am on the login page
25
+ And the DevKeyring component is visible
26
+ When I select the Owner user (owner@nextspark.dev)
27
+ And I click to login
28
+ Then I should be redirected to the dashboard
29
+ And the dashboard container should be visible
30
+ ```
31
+
32
+ ```gherkin:es
33
+ Scenario: Owner puede loguearse y acceder al dashboard
34
+
35
+ Given estoy en la pagina de login
36
+ And el componente DevKeyring esta visible
37
+ When selecciono el usuario Owner (owner@nextspark.dev)
38
+ And hago clic para iniciar sesion
39
+ Then deberia ser redirigido al dashboard
40
+ And el contenedor del dashboard deberia estar visible
41
+ ```
42
+
43
+ ### Expected Results
44
+ - DevKeyring component displays user selector
45
+ - Owner user (owner@nextspark.dev) is selectable
46
+ - Login redirects to /dashboard
47
+ - Dashboard container is visible after login
48
+
49
+ ---
50
+
51
+ ## @test LOGIN-002: Member Login via DevKeyring
52
+
53
+ ### Metadata
54
+ - **Priority:** Critical
55
+ - **Type:** Smoke
56
+ - **Tags:** login, member, devkeyring
57
+ - **Grep:** `@smoke` `@critical`
58
+
59
+ ```gherkin:en
60
+ Scenario: Member can login and access dashboard
61
+
62
+ Given I am on the login page
63
+ And the DevKeyring component is visible
64
+ When I select the Member user (member@nextspark.dev)
65
+ And I click to login
66
+ Then I should be redirected to the dashboard
67
+ And the dashboard container should be visible
68
+ ```
69
+
70
+ ```gherkin:es
71
+ Scenario: Member puede loguearse y acceder al dashboard
72
+
73
+ Given estoy en la pagina de login
74
+ And el componente DevKeyring esta visible
75
+ When selecciono el usuario Member (member@nextspark.dev)
76
+ And hago clic para iniciar sesion
77
+ Then deberia ser redirigido al dashboard
78
+ And el contenedor del dashboard deberia estar visible
79
+ ```
80
+
81
+ ### Expected Results
82
+ - Member user (member@nextspark.dev) is selectable
83
+ - Login redirects to /dashboard
84
+ - Dashboard container is visible after login
85
+ - Member has read-only access to most entities
86
+
87
+ ---
88
+
89
+ ## @test LOGIN-003: Admin Login via DevKeyring
90
+
91
+ ### Metadata
92
+ - **Priority:** High
93
+ - **Type:** Regression
94
+ - **Tags:** login, admin, devkeyring
95
+
96
+ ```gherkin:en
97
+ Scenario: Admin can login and access dashboard
98
+
99
+ Given I am on the login page
100
+ And the DevKeyring component is visible
101
+ When I select the Admin user (admin@nextspark.dev)
102
+ And I click to login
103
+ Then I should be redirected to the dashboard
104
+ And the dashboard container should be visible
105
+ ```
106
+
107
+ ```gherkin:es
108
+ Scenario: Admin puede loguearse y acceder al dashboard
109
+
110
+ Given estoy en la pagina de login
111
+ And el componente DevKeyring esta visible
112
+ When selecciono el usuario Admin (admin@nextspark.dev)
113
+ And hago clic para iniciar sesion
114
+ Then deberia ser redirigido al dashboard
115
+ And el contenedor del dashboard deberia estar visible
116
+ ```
117
+
118
+ ### Expected Results
119
+ - Admin user (admin@nextspark.dev) is selectable
120
+ - Login redirects to /dashboard
121
+ - Dashboard container is visible after login
122
+ - Admin has delegated full CRUD access
123
+
124
+ ---
125
+
126
+ ## @test LOGOUT-001: User Logout Flow
127
+
128
+ ### Metadata
129
+ - **Priority:** High
130
+ - **Type:** Regression
131
+ - **Tags:** logout, signout, navigation
132
+
133
+ ```gherkin:en
134
+ Scenario: User can logout successfully
135
+
136
+ Given I am logged in as Owner
137
+ And I am on the dashboard
138
+ When I click on the user menu in the top navigation
139
+ And I click "Sign Out"
140
+ Then I should be redirected to the login page
141
+ And the DevKeyring component should be visible again
142
+ ```
143
+
144
+ ```gherkin:es
145
+ Scenario: Usuario puede cerrar sesion exitosamente
146
+
147
+ Given estoy logueado como Owner
148
+ And estoy en el dashboard
149
+ When hago clic en el menu de usuario en la navegacion superior
150
+ And hago clic en "Cerrar Sesion"
151
+ Then deberia ser redirigido a la pagina de login
152
+ And el componente DevKeyring deberia estar visible nuevamente
153
+ ```
154
+
155
+ ### Expected Results
156
+ - User menu is accessible in top navigation
157
+ - Sign Out option is visible in menu
158
+ - Clicking Sign Out clears session
159
+ - User is redirected to login page
160
+ - DevKeyring component is visible for re-login