@nextsparkjs/theme-default 0.1.0-beta.2 → 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 (222) hide show
  1. package/package.json +8 -4
  2. package/templates/(public)/page.tsx +1 -1
  3. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  4. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  5. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  6. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  7. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  8. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  9. package/tests/cypress/e2e/_docs/README.md +215 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  11. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  13. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  14. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  15. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  19. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  20. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  21. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  22. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  23. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  24. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  25. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  26. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  27. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  28. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  29. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  30. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  31. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  32. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  33. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  34. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  36. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  38. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  40. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  42. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  43. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  44. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  45. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  46. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  47. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  48. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  49. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  50. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  51. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  52. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  53. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  54. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  55. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  56. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  57. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  58. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  59. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  60. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  61. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  62. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  63. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  64. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  65. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  66. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  67. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  68. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  69. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  70. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  71. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  72. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  78. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  79. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  83. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  85. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  87. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  89. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  95. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  96. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  97. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  99. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  100. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  101. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  102. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  103. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  105. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  106. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  107. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  109. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  110. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  112. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  114. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  118. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  120. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  122. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  126. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  128. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  130. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  132. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  136. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  138. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  140. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  142. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  144. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  146. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  148. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  149. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  150. package/tests/cypress/fixtures/blocks.json +218 -0
  151. package/tests/cypress/fixtures/entities.json +78 -0
  152. package/tests/cypress/fixtures/page-builder.json +21 -0
  153. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  154. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  155. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  156. package/tests/cypress/src/components/EntityForm.ts +375 -0
  157. package/tests/cypress/src/components/EntityList.ts +389 -0
  158. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  159. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  160. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  161. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  162. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  163. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  164. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  165. package/tests/cypress/src/components/index.ts +21 -0
  166. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  167. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  168. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  169. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  170. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  171. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  172. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  173. package/tests/cypress/src/controllers/index.js +25 -0
  174. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  175. package/tests/cypress/src/core/BasePOM.ts +86 -0
  176. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  177. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  178. package/tests/cypress/src/core/index.ts +14 -0
  179. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  180. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  181. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  182. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  183. package/tests/cypress/src/entities/index.ts +14 -0
  184. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  185. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  186. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  187. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  188. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  189. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  190. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  191. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  192. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  193. package/tests/cypress/src/features/index.ts +28 -0
  194. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  195. package/tests/cypress/src/index.ts +101 -0
  196. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  198. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  199. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  200. package/tests/cypress/src/pages/index.js +5 -0
  201. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  202. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  203. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  204. package/tests/cypress/src/pages/public/index.js +6 -0
  205. package/tests/cypress/src/selectors.ts +46 -0
  206. package/tests/cypress/src/session-helpers.ts +500 -0
  207. package/tests/cypress/support/doc-commands.ts +260 -0
  208. package/tests/cypress.config.ts +150 -0
  209. package/tests/jest/components/post-header.test.tsx +377 -0
  210. package/tests/jest/config/role-config.test.ts +529 -0
  211. package/tests/jest/jest.config.ts +81 -0
  212. package/tests/jest/langchain/COVERAGE.md +372 -0
  213. package/tests/jest/langchain/guardrails.test.ts +465 -0
  214. package/tests/jest/langchain/streaming.test.ts +367 -0
  215. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  216. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  217. package/tests/jest/langchain/tracer.test.ts +823 -0
  218. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  219. package/tests/jest/validation/categories.test.ts +429 -0
  220. package/tests/jest/validation/posts.test.ts +546 -0
  221. package/tests/tsconfig.json +15 -0
  222. package/LICENSE +0 -21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextsparkjs/theme-default",
3
- "version": "0.1.0-beta.2",
3
+ "version": "0.1.0-beta.21",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./config/theme.config.ts",
@@ -9,6 +9,7 @@
9
9
  ],
10
10
  "dependencies": {},
11
11
  "peerDependencies": {
12
+ "@nextsparkjs/core": "workspace:*",
12
13
  "@tanstack/react-query": "^5.0.0",
13
14
  "lucide-react": "^0.539.0",
14
15
  "next": "^15.0.0",
@@ -16,7 +17,10 @@
16
17
  "react": "^19.0.0",
17
18
  "react-dom": "^19.0.0",
18
19
  "react-markdown": "^10.1.0",
19
- "zod": "^4.0.0",
20
- "@nextsparkjs/core": "0.1.0-beta.6"
20
+ "zod": "^4.0.0"
21
+ },
22
+ "nextspark": {
23
+ "type": "theme",
24
+ "name": "default"
21
25
  }
22
- }
26
+ }
@@ -69,7 +69,7 @@ function Home() {
69
69
  <span className="text-sm font-medium">{t('auth.authenticated')}</span>
70
70
  </div>
71
71
  <p className="text-lg">
72
- {t('auth.welcomeBack', { email: user.email })}
72
+ {t('auth.welcomeBack', { email: user.email || '' })}
73
73
  </p>
74
74
  <Link href="/dashboard">
75
75
  <Button size="lg" className="gap-2">
@@ -0,0 +1,262 @@
1
+ ---
2
+ feature: DevTools Access Control
3
+ priority: critical
4
+ tags: [dev-area, access-control, security, roles]
5
+ grepTags: [uat, feat-dev-area, smoke, regression]
6
+ coverage: 7
7
+ ---
8
+
9
+ # DevTools Access Control
10
+
11
+ > Role-based access control tests for the /devtools area. Validates that Developer users can access all /devtools routes and /admin, while Superadmin and Member users are blocked.
12
+
13
+ ## @test ACCESS-001: Developer can access /devtools
14
+
15
+ ### Metadata
16
+ - **Priority:** Critical
17
+ - **Type:** Smoke
18
+ - **Tags:** developer, access, home
19
+ - **Grep:** `@smoke`
20
+
21
+ ```gherkin:en
22
+ Scenario: Developer can access /devtools home page
23
+
24
+ Given I am logged in as Developer (developer@nextspark.dev)
25
+ When I visit /devtools
26
+ Then I should be on /devtools home page
27
+ And the home page container should be visible
28
+ ```
29
+
30
+ ```gherkin:es
31
+ Scenario: Developer puede acceder a /devtools home page
32
+
33
+ Given estoy logueado como Developer (developer@nextspark.dev)
34
+ When visito /devtools
35
+ Then deberia estar en /devtools home page
36
+ And el contenedor de home page deberia estar visible
37
+ ```
38
+
39
+ ### Expected Results
40
+ - Developer successfully accesses /devtools
41
+ - Home page renders correctly
42
+ - No access denied errors
43
+
44
+ ---
45
+
46
+ ## @test ACCESS-002: Developer can access /devtools/style
47
+
48
+ ### Metadata
49
+ - **Priority:** Critical
50
+ - **Type:** Smoke
51
+ - **Tags:** developer, access, style-gallery
52
+ - **Grep:** `@smoke`
53
+
54
+ ```gherkin:en
55
+ Scenario: Developer can access Style Gallery
56
+
57
+ Given I am logged in as Developer (developer@nextspark.dev)
58
+ When I visit /devtools/style
59
+ Then the URL should include /devtools/style
60
+ And the style page should be visible
61
+ ```
62
+
63
+ ```gherkin:es
64
+ Scenario: Developer puede acceder a Style Gallery
65
+
66
+ Given estoy logueado como Developer (developer@nextspark.dev)
67
+ When visito /devtools/style
68
+ Then la URL deberia incluir /devtools/style
69
+ And la pagina de estilos deberia estar visible
70
+ ```
71
+
72
+ ### Expected Results
73
+ - Style Gallery page loads successfully
74
+ - All component sections available
75
+
76
+ ---
77
+
78
+ ## @test ACCESS-003: Developer can access /devtools/tests
79
+
80
+ ### Metadata
81
+ - **Priority:** Critical
82
+ - **Type:** Smoke
83
+ - **Tags:** developer, access, test-cases
84
+ - **Grep:** `@smoke`
85
+
86
+ ```gherkin:en
87
+ Scenario: Developer can access Test Cases viewer
88
+
89
+ Given I am logged in as Developer (developer@nextspark.dev)
90
+ When I visit /devtools/tests
91
+ Then the URL should include /devtools/tests
92
+ And the tests page should be visible
93
+ ```
94
+
95
+ ```gherkin:es
96
+ Scenario: Developer puede acceder al visor de Test Cases
97
+
98
+ Given estoy logueado como Developer (developer@nextspark.dev)
99
+ When visito /devtools/tests
100
+ Then la URL deberia incluir /devtools/tests
101
+ And la pagina de tests deberia estar visible
102
+ ```
103
+
104
+ ### Expected Results
105
+ - Test Cases viewer loads successfully
106
+ - File tree or empty state visible
107
+
108
+ ---
109
+
110
+ ## @test ACCESS-004: Developer can access /devtools/config
111
+
112
+ ### Metadata
113
+ - **Priority:** Critical
114
+ - **Type:** Smoke
115
+ - **Tags:** developer, access, config
116
+ - **Grep:** `@smoke`
117
+
118
+ ```gherkin:en
119
+ Scenario: Developer can access Config Viewer
120
+
121
+ Given I am logged in as Developer (developer@nextspark.dev)
122
+ When I visit /devtools/config
123
+ Then the URL should include /devtools/config
124
+ And the config page should be visible
125
+ ```
126
+
127
+ ```gherkin:es
128
+ Scenario: Developer puede acceder al Config Viewer
129
+
130
+ Given estoy logueado como Developer (developer@nextspark.dev)
131
+ When visito /devtools/config
132
+ Then la URL deberia incluir /devtools/config
133
+ And la pagina de config deberia estar visible
134
+ ```
135
+
136
+ ### Expected Results
137
+ - Config Viewer loads successfully
138
+ - Theme and Entities tabs available
139
+
140
+ ---
141
+
142
+ ## @test ACCESS-005: Developer can access /admin (inherited)
143
+
144
+ ### Metadata
145
+ - **Priority:** High
146
+ - **Type:** Regression
147
+ - **Tags:** developer, admin, inherited
148
+
149
+ ```gherkin:en
150
+ Scenario: Developer can access Admin area
151
+
152
+ Given I am logged in as Developer (developer@nextspark.dev)
153
+ When I visit /admin
154
+ Then the URL should include /admin
155
+ And the Admin container should be visible
156
+ ```
157
+
158
+ ```gherkin:es
159
+ Scenario: Developer puede acceder al area Admin
160
+
161
+ Given estoy logueado como Developer (developer@nextspark.dev)
162
+ When visito /admin
163
+ Then la URL deberia incluir /admin
164
+ And el contenedor de Admin deberia estar visible
165
+ ```
166
+
167
+ ### Expected Results
168
+ - Developer inherits superadmin privileges for Admin
169
+ - Admin control panel accessible
170
+ - No access denied redirect
171
+
172
+ ---
173
+
174
+ ## @test ACCESS-006: Superadmin is BLOCKED from /devtools
175
+
176
+ ### Metadata
177
+ - **Priority:** Critical
178
+ - **Type:** Smoke
179
+ - **Tags:** superadmin, blocked, security
180
+ - **Grep:** `@smoke`
181
+
182
+ ```gherkin:en
183
+ Scenario: Superadmin is redirected when attempting to access /devtools
184
+
185
+ Given I am logged in as Superadmin (superadmin@nextspark.dev)
186
+ When I attempt to visit /devtools
187
+ Then I should be redirected to /dashboard
188
+ And the URL should include error=access_denied
189
+ ```
190
+
191
+ ```gherkin:es
192
+ Scenario: Superadmin es redirigido al intentar acceder a /devtools
193
+
194
+ Given estoy logueado como Superadmin (superadmin@nextspark.dev)
195
+ When intento visitar /devtools
196
+ Then deberia ser redirigido a /dashboard
197
+ And la URL deberia incluir error=access_denied
198
+ ```
199
+
200
+ ### Expected Results
201
+ - Superadmin cannot access /devtools area
202
+ - Redirect to dashboard with error parameter
203
+ - Access control working correctly
204
+
205
+ ---
206
+
207
+ ## @test ACCESS-007: Member is BLOCKED from /devtools
208
+
209
+ ### Metadata
210
+ - **Priority:** Critical
211
+ - **Type:** Smoke
212
+ - **Tags:** member, blocked, security
213
+ - **Grep:** `@smoke`
214
+
215
+ ```gherkin:en
216
+ Scenario: Member is redirected when attempting to access /devtools
217
+
218
+ Given I am logged in as Member (emily.johnson@nextspark.dev)
219
+ When I attempt to visit /devtools
220
+ Then I should be redirected to /dashboard
221
+ And the URL should include error=access_denied
222
+ ```
223
+
224
+ ```gherkin:es
225
+ Scenario: Member es redirigido al intentar acceder a /devtools
226
+
227
+ Given estoy logueado como Member (emily.johnson@nextspark.dev)
228
+ When intento visitar /devtools
229
+ Then deberia ser redirigido a /dashboard
230
+ And la URL deberia incluir error=access_denied
231
+ ```
232
+
233
+ ### Expected Results
234
+ - Member cannot access /devtools area
235
+ - Redirect to dashboard with error parameter
236
+ - Access control working correctly
237
+
238
+ ---
239
+
240
+ ## UI Elements
241
+
242
+ | Element | Selector | Description |
243
+ |---------|----------|-------------|
244
+ | Home Page | `[data-cy="dev-home-page"]` | Dev area home page container |
245
+ | Style Page | `[data-cy="dev-style-page"]` | Style Gallery page container |
246
+ | Tests Page | `[data-cy="dev-tests-page"]` | Test Cases viewer container |
247
+ | Config Page | `[data-cy="dev-config-page"]` | Config Viewer page container |
248
+ | Admin Container | `[data-cy="admin-container"]` | Admin main container |
249
+
250
+ ---
251
+
252
+ ## Summary
253
+
254
+ | Test ID | Block | Description | Tags |
255
+ |---------|-------|-------------|------|
256
+ | ACCESS-001 | Developer Access | Developer can access /devtools home | `@smoke` |
257
+ | ACCESS-002 | Developer Access | Developer can access /devtools/style | `@smoke` |
258
+ | ACCESS-003 | Developer Access | Developer can access /devtools/tests | `@smoke` |
259
+ | ACCESS-004 | Developer Access | Developer can access /devtools/config | `@smoke` |
260
+ | ACCESS-005 | Inherited Access | Developer can access /admin | |
261
+ | ACCESS-006 | Blocked Access | Superadmin BLOCKED from /devtools | `@smoke` |
262
+ | ACCESS-007 | Blocked Access | Member BLOCKED from /devtools | `@smoke` |
@@ -0,0 +1,171 @@
1
+ /// <reference types="cypress" />
2
+
3
+ import * as allure from 'allure-cypress'
4
+ import { DevtoolsPOM } from '../../src/features/DevtoolsPOM'
5
+ import {
6
+ loginAsDefaultDeveloper,
7
+ loginAsDefaultSuperadmin,
8
+ loginAsDefaultMember,
9
+ CORE_USERS
10
+ } from '../../src/session-helpers'
11
+
12
+ /**
13
+ * DevTools Access Control Tests
14
+ *
15
+ * Tests the role-based access control for the /devtools area:
16
+ * - Developer users can access all /devtools routes
17
+ * - Developer users can access /admin (inherited privileges)
18
+ * - Superadmin users are BLOCKED from /devtools
19
+ * - Member users are BLOCKED from /devtools
20
+ *
21
+ * Test Users (from session-helpers):
22
+ * - Developer: developer@nextspark.dev (CORE_USERS.DEVELOPER)
23
+ * - Superadmin: superadmin@nextspark.dev (CORE_USERS.SUPERADMIN)
24
+ * - Member: emily.johnson@nextspark.dev (DEFAULT_THEME_USERS.MEMBER)
25
+ */
26
+
27
+ describe('DevTools - Access Control', {
28
+ tags: ['@uat', '@feat-devtools', '@smoke', '@regression']
29
+ }, () => {
30
+ const devtools = DevtoolsPOM.create()
31
+
32
+ beforeEach(() => {
33
+ allure.epic('UAT')
34
+ allure.feature('DevTools')
35
+ allure.story('Access Control')
36
+ })
37
+
38
+ describe('ACCESS-001: Developer can access /devtools', { tags: '@smoke' }, () => {
39
+ it('should allow developer to access /devtools home page', { tags: '@smoke' }, () => {
40
+ allure.severity('critical')
41
+
42
+ // 1. Login as developer
43
+ loginAsDefaultDeveloper()
44
+
45
+ // 2. Visit /devtools
46
+ devtools.visitHome()
47
+
48
+ // 3. Verify access granted
49
+ devtools.assertOnDevtoolsHome()
50
+ devtools.assertHomePageVisible()
51
+
52
+ cy.log(`✅ Developer (${CORE_USERS.DEVELOPER}) can access /devtools home page`)
53
+ })
54
+ })
55
+
56
+ describe('ACCESS-002: Developer can access /devtools/style', { tags: '@smoke' }, () => {
57
+ it('should allow developer to access Style Gallery', { tags: '@smoke' }, () => {
58
+ allure.severity('critical')
59
+
60
+ // 1. Login as developer
61
+ loginAsDefaultDeveloper()
62
+
63
+ // 2. Visit /devtools/style
64
+ devtools.visitStyleGallery()
65
+
66
+ // 3. Verify access granted
67
+ devtools.assertOnStyleGallery()
68
+ devtools.assertStylePageVisible()
69
+
70
+ cy.log(`✅ Developer can access /devtools/style`)
71
+ })
72
+ })
73
+
74
+ describe('ACCESS-003: Developer can access /devtools/tests', { tags: '@smoke' }, () => {
75
+ it('should allow developer to access Test Cases viewer', { tags: '@smoke' }, () => {
76
+ allure.severity('critical')
77
+
78
+ // 1. Login as developer
79
+ loginAsDefaultDeveloper()
80
+
81
+ // 2. Visit /devtools/tests
82
+ devtools.visitTestCases()
83
+
84
+ // 3. Verify access granted
85
+ devtools.assertOnTestCases()
86
+ devtools.assertTestsPageVisible()
87
+
88
+ cy.log(`✅ Developer can access /devtools/tests`)
89
+ })
90
+ })
91
+
92
+ describe('ACCESS-004: Developer can access /devtools/config', { tags: '@smoke' }, () => {
93
+ it('should allow developer to access Config Viewer', { tags: '@smoke' }, () => {
94
+ allure.severity('critical')
95
+
96
+ // 1. Login as developer
97
+ loginAsDefaultDeveloper()
98
+
99
+ // 2. Visit /devtools/config
100
+ devtools.visitConfig()
101
+
102
+ // 3. Verify access granted
103
+ devtools.assertOnConfig()
104
+ devtools.assertConfigPageVisible()
105
+
106
+ cy.log(`✅ Developer can access /devtools/config`)
107
+ })
108
+ })
109
+
110
+ describe('ACCESS-005: Developer can access /superadmin (inherited)', () => {
111
+ it('should allow developer to access Superadmin area', () => {
112
+ allure.severity('high')
113
+
114
+ // 1. Login as developer
115
+ loginAsDefaultDeveloper()
116
+
117
+ // 2. Visit /superadmin
118
+ cy.visit('/superadmin')
119
+
120
+ // 3. Verify access granted (developer inherits superadmin privileges)
121
+ devtools.assertOnSuperadmin()
122
+ cy.get('[data-cy="superadmin-container"]').should('be.visible')
123
+
124
+ cy.log(`✅ Developer can access /superadmin (inherited superadmin privileges)`)
125
+ })
126
+ })
127
+
128
+ describe('ACCESS-006: Superadmin is BLOCKED from /devtools', { tags: '@smoke' }, () => {
129
+ it('should redirect superadmin to /dashboard when attempting to access /devtools', { tags: '@smoke' }, () => {
130
+ allure.severity('critical')
131
+
132
+ // 1. Login as superadmin
133
+ loginAsDefaultSuperadmin()
134
+
135
+ // 2. Attempt to visit /devtools (should be blocked)
136
+ cy.visit('/devtools', { failOnStatusCode: false })
137
+
138
+ // 3. Verify redirected to /dashboard (access denied)
139
+ devtools.assertRedirectedToDashboard()
140
+
141
+ // 4. Should show access_denied error in URL
142
+ cy.url().should('include', 'error=access_denied')
143
+
144
+ cy.log(`✅ Superadmin (${CORE_USERS.SUPERADMIN}) correctly blocked from /devtools`)
145
+ })
146
+ })
147
+
148
+ describe('ACCESS-007: Member is BLOCKED from /devtools', { tags: '@smoke' }, () => {
149
+ it('should redirect member to /dashboard when attempting to access /devtools', { tags: '@smoke' }, () => {
150
+ allure.severity('critical')
151
+
152
+ // 1. Login as member
153
+ loginAsDefaultMember()
154
+
155
+ // 2. Attempt to visit /devtools (should be blocked)
156
+ cy.visit('/devtools', { failOnStatusCode: false })
157
+
158
+ // 3. Verify redirected to /dashboard (access denied)
159
+ devtools.assertRedirectedToDashboard()
160
+
161
+ // 4. Should show access_denied error in URL
162
+ cy.url().should('include', 'error=access_denied')
163
+
164
+ cy.log(`✅ Member correctly blocked from /devtools`)
165
+ })
166
+ })
167
+
168
+ after(() => {
169
+ cy.log('✅ DevTools access control tests completed')
170
+ })
171
+ })