@nextsparkjs/theme-default 0.1.0-beta.17 → 0.1.0-beta.171

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 (332) hide show
  1. package/api/ai/chat/stream/route.ts +4 -1
  2. package/api/ai/orchestrator/route.ts +10 -3
  3. package/api/ai/single-agent/route.ts +10 -3
  4. package/api/ai/usage/route.ts +4 -1
  5. package/blocks/benefits/component.tsx +4 -4
  6. package/blocks/cta-section/component.tsx +4 -4
  7. package/blocks/faq-accordion/component.tsx +2 -2
  8. package/blocks/features-grid/component.tsx +5 -5
  9. package/blocks/hero/component.tsx +2 -2
  10. package/blocks/hero/fields.ts +1 -1
  11. package/blocks/hero-with-form/component.tsx +7 -7
  12. package/blocks/hero-with-form/fields.ts +1 -1
  13. package/blocks/jumbotron/component.tsx +7 -7
  14. package/blocks/jumbotron/fields.ts +1 -1
  15. package/blocks/logo-cloud/component.tsx +6 -6
  16. package/blocks/logo-cloud/fields.ts +1 -1
  17. package/blocks/post-content/component.tsx +2 -2
  18. package/blocks/pricing-table/component.tsx +5 -5
  19. package/blocks/split-content/component.tsx +5 -5
  20. package/blocks/split-content/fields.ts +1 -1
  21. package/blocks/stats-counter/component.tsx +9 -9
  22. package/blocks/testimonials/component.tsx +4 -4
  23. package/blocks/testimonials/fields.ts +1 -1
  24. package/blocks/text-content/component.tsx +12 -10
  25. package/blocks/timeline/component.tsx +12 -12
  26. package/blocks/video-hero/component.tsx +7 -7
  27. package/blocks/video-hero/fields.ts +1 -1
  28. package/components/ai-chat/ChatPanel.tsx +7 -7
  29. package/components/ai-chat/Message.tsx +2 -2
  30. package/components/ai-chat/MessageInput.tsx +3 -3
  31. package/components/ai-chat/MessageList.tsx +3 -3
  32. package/components/ai-chat/TypingIndicator.tsx +2 -2
  33. package/config/app.config.ts +90 -62
  34. package/config/billing.config.ts +5 -10
  35. package/config/dashboard.config.ts +14 -0
  36. package/config/features.config.ts +10 -0
  37. package/config/permissions.config.ts +22 -23
  38. package/docs/{01-overview → public/01-overview}/01-introduction.md +5 -0
  39. package/docs/{01-overview → public/01-overview}/02-customization.md +5 -0
  40. package/docs/{02-features → public/02-features}/03-tasks-entity.md +5 -0
  41. package/docs/{03-ai → public/03-ai}/01-overview.md +5 -0
  42. package/docs/{03-ai → public/03-ai}/02-customization.md +5 -0
  43. package/docs/superadmin/01-setup/01-configuration.md +79 -0
  44. package/docs/superadmin/01-setup/02-deployment.md +82 -0
  45. package/docs/superadmin/02-management/01-users.md +83 -0
  46. package/docs/superadmin/03-integrations/01-langchain.md +139 -0
  47. package/emails/verify-email.ts +33 -0
  48. package/entities/customers/api/docs.md +107 -0
  49. package/entities/customers/api/presets.ts +80 -0
  50. package/entities/pages/api/docs.md +114 -0
  51. package/entities/pages/api/presets.ts +72 -0
  52. package/entities/posts/api/docs.md +120 -0
  53. package/entities/posts/api/presets.ts +74 -0
  54. package/entities/tasks/api/docs.md +126 -0
  55. package/entities/tasks/api/presets.ts +84 -0
  56. package/lib/selectors.ts +7 -4
  57. package/messages/de/admin.json +45 -0
  58. package/messages/en/admin.json +56 -0
  59. package/messages/en/navigation.json +2 -1
  60. package/messages/es/admin.json +56 -0
  61. package/messages/es/navigation.json +2 -1
  62. package/messages/fr/admin.json +45 -0
  63. package/messages/it/admin.json +45 -0
  64. package/messages/pt/admin.json +45 -0
  65. package/migrations/089_add_editor_team_role.sql +15 -23
  66. package/migrations/090_demo_users_teams.sql +11 -11
  67. package/migrations/091_greek_teams_billing.sql +15 -15
  68. package/migrations/093_pages_sample_data.sql +7 -7
  69. package/migrations/098_patterns_sample_data.sql +234 -0
  70. package/nextsparkjs-theme-default-0.1.0-beta.137.tgz +0 -0
  71. package/package.json +4 -3
  72. package/styles/globals.css +42 -0
  73. package/templates/(public)/page.tsx +1 -1
  74. package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
  75. package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
  76. package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
  77. package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
  78. package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
  79. package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
  80. package/tests/cypress/e2e/_utils/docs/README.md +215 -0
  81. package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
  82. package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
  83. package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
  84. package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
  85. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
  86. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
  87. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  88. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
  89. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
  90. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
  91. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
  92. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
  93. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
  94. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
  95. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
  96. package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
  97. package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
  98. package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
  99. package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
  100. package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
  101. package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
  102. package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
  103. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
  104. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
  105. package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
  106. package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
  107. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
  108. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
  109. package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
  110. package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
  111. package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
  112. package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
  113. package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
  114. package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
  115. package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
  116. package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
  117. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
  118. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
  119. package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
  120. package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
  121. package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
  122. package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
  123. package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
  124. package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
  125. package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
  126. package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
  127. package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
  128. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
  129. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
  130. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  131. package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
  132. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  133. package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
  134. package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
  135. package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
  136. package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
  137. package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
  138. package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
  139. package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
  140. package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
  141. package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
  142. package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
  143. package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
  144. package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
  145. package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
  146. package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
  147. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
  148. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
  149. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  150. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  151. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
  152. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
  153. package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
  154. package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
  155. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  156. package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
  157. package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
  158. package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
  159. package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
  160. package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
  161. package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
  162. package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
  163. package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
  164. package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
  165. package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
  166. package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
  167. package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
  168. package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
  169. package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
  170. package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
  171. package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
  172. package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
  173. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
  174. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
  175. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
  176. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
  177. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
  178. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
  179. package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
  180. package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
  181. package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
  182. package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
  183. package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
  184. package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
  185. package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
  186. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
  187. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
  188. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
  189. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
  190. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
  191. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
  192. package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
  193. package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
  194. package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
  195. package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
  196. package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
  197. package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
  198. package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
  199. package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
  200. package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
  201. package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
  202. package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
  203. package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
  204. package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
  205. package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
  206. package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
  207. package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
  208. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
  209. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
  210. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  211. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
  212. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
  213. package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
  214. package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
  215. package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
  216. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  217. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  218. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  219. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  220. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  221. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  222. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  223. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  224. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  225. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  226. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  227. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  228. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  229. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  230. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  231. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  232. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  233. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  234. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  235. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  236. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  237. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  238. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  239. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  240. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  241. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  242. package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
  243. package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
  244. package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
  245. package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
  246. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
  247. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
  248. package/tests/cypress/fixtures/blocks.json +218 -0
  249. package/tests/cypress/fixtures/entities.json +87 -0
  250. package/tests/cypress/fixtures/page-builder.json +21 -0
  251. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  252. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  253. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  254. package/tests/cypress/src/components/EntityForm.ts +375 -0
  255. package/tests/cypress/src/components/EntityList.ts +389 -0
  256. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  257. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  258. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  259. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  260. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  261. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  262. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  263. package/tests/cypress/src/components/index.ts +21 -0
  264. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  265. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  266. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  267. package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
  268. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  269. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  270. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  271. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  272. package/tests/cypress/src/controllers/index.js +25 -0
  273. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  274. package/tests/cypress/src/core/BasePOM.ts +33 -0
  275. package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
  276. package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
  277. package/tests/cypress/src/core/index.ts +14 -0
  278. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  279. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  280. package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
  281. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  282. package/tests/cypress/src/entities/TasksPOM.ts +246 -0
  283. package/tests/cypress/src/entities/index.ts +16 -0
  284. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  285. package/tests/cypress/src/features/DashboardPOM.ts +271 -0
  286. package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
  287. package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
  288. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  289. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  290. package/tests/cypress/src/features/SettingsPOM.ts +707 -0
  291. package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
  292. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  293. package/tests/cypress/src/features/index.ts +28 -0
  294. package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
  295. package/tests/cypress/src/index.ts +101 -0
  296. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  297. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  298. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  299. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  300. package/tests/cypress/src/pages/index.js +5 -0
  301. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  302. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  303. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  304. package/tests/cypress/src/pages/public/index.js +6 -0
  305. package/tests/cypress/src/selectors.ts +46 -0
  306. package/tests/cypress/src/session-helpers.ts +518 -0
  307. package/tests/cypress/support/doc-commands.ts +260 -0
  308. package/tests/cypress/support/e2e.ts +90 -0
  309. package/tests/cypress.config.ts +178 -0
  310. package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
  311. package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
  312. package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
  313. package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
  314. package/tests/jest/__mocks__/jose.js +22 -0
  315. package/tests/jest/__mocks__/next/image.js +15 -0
  316. package/tests/jest/__mocks__/next-server.js +56 -0
  317. package/tests/jest/components/post-header.test.tsx +377 -0
  318. package/tests/jest/jest.config.cjs +154 -0
  319. package/tests/jest/langchain/COVERAGE.md +372 -0
  320. package/tests/jest/langchain/guardrails.test.ts +465 -0
  321. package/tests/jest/langchain/streaming.test.ts +370 -0
  322. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  323. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  324. package/tests/jest/langchain/tracer.test.ts +823 -0
  325. package/tests/jest/services/tasks.service.test.ts +707 -0
  326. package/tests/jest/setup.ts +170 -0
  327. package/tests/jest/tsconfig.jest.json +6 -0
  328. package/tests/jest/validation/categories.test.ts +429 -0
  329. package/tests/jest/validation/posts.test.ts +546 -0
  330. package/tests/tsconfig.json +21 -0
  331. /package/docs/{02-features → public/02-features}/01-components.md +0 -0
  332. /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
@@ -0,0 +1,144 @@
1
+ /// <reference types="cypress" />
2
+
3
+ /**
4
+ * Developer App Role Login Tests
5
+ *
6
+ * Tests the Developer app role login and specific access:
7
+ * - Login as developer@nextspark.dev
8
+ * - Access to /dev zone
9
+ * - Access to /superadmin (inherited)
10
+ * - No team context required (global role)
11
+ *
12
+ * Tags: @uat, @feat-auth, @app-role, @developer
13
+ */
14
+
15
+ import * as allure from 'allure-cypress'
16
+
17
+ import { loginAsDefaultDeveloper, CORE_USERS } from '../../../../src/session-helpers'
18
+
19
+ describe('Authentication - Developer App Role', {
20
+ tags: ['@uat', '@feat-auth', '@app-role', '@developer']
21
+ }, () => {
22
+ beforeEach(() => {
23
+ allure.epic('Authentication')
24
+ allure.feature('App Roles')
25
+ allure.story('Developer Login')
26
+ })
27
+
28
+ describe('DEV-LOGIN-001: Developer Login and Dev Zone Access', { tags: '@smoke' }, () => {
29
+ it('should login as developer and access /dev zone', { tags: '@smoke' }, () => {
30
+ allure.severity('critical')
31
+
32
+ // 1. Login as Developer
33
+ loginAsDefaultDeveloper()
34
+
35
+ // 2. Visit Dev Zone
36
+ cy.visit('/dev', { timeout: 60000 })
37
+
38
+ // 3. Validate access to Dev Zone
39
+ cy.url().should('include', '/dev')
40
+ cy.get('[data-cy="dev-home-page"]').should('be.visible')
41
+
42
+ cy.log(`✅ Developer login successful (${CORE_USERS.DEVELOPER})`)
43
+ cy.log('✅ Dev Zone access granted')
44
+ })
45
+ })
46
+
47
+ describe('DEV-LOGIN-002: Developer Access to Style Gallery', { tags: '@smoke' }, () => {
48
+ it('should access /dev/style page', { tags: '@smoke' }, () => {
49
+ allure.severity('normal')
50
+
51
+ // 1. Login as Developer
52
+ loginAsDefaultDeveloper()
53
+
54
+ // 2. Visit Style Gallery
55
+ cy.visit('/dev/style', { timeout: 60000 })
56
+
57
+ // 3. Validate access
58
+ cy.url().should('include', '/dev/style')
59
+ cy.get('[data-cy="dev-style-page"]').should('be.visible')
60
+
61
+ cy.log('✅ Style Gallery access granted')
62
+ })
63
+ })
64
+
65
+ describe('DEV-LOGIN-003: Developer Access to Test Cases', { tags: '@smoke' }, () => {
66
+ it('should access /dev/tests page', { tags: '@smoke' }, () => {
67
+ allure.severity('normal')
68
+
69
+ // 1. Login as Developer
70
+ loginAsDefaultDeveloper()
71
+
72
+ // 2. Visit Test Cases viewer
73
+ cy.visit('/dev/tests', { timeout: 60000 })
74
+
75
+ // 3. Validate access
76
+ cy.url().should('include', '/dev/tests')
77
+ cy.get('[data-cy="dev-tests-page"]').should('be.visible')
78
+
79
+ cy.log('✅ Test Cases viewer access granted')
80
+ })
81
+ })
82
+
83
+ describe('DEV-LOGIN-004: Developer Access to Config Viewer', { tags: '@smoke' }, () => {
84
+ it('should access /dev/config page', { tags: '@smoke' }, () => {
85
+ allure.severity('normal')
86
+
87
+ // 1. Login as Developer
88
+ loginAsDefaultDeveloper()
89
+
90
+ // 2. Visit Config Viewer
91
+ cy.visit('/dev/config', { timeout: 60000 })
92
+
93
+ // 3. Validate access
94
+ cy.url().should('include', '/dev/config')
95
+ cy.get('[data-cy="dev-config-page"]').should('be.visible')
96
+
97
+ cy.log('✅ Config Viewer access granted')
98
+ })
99
+ })
100
+
101
+ describe('DEV-LOGIN-005: Developer Inherited Superadmin Access', () => {
102
+ it('should have access to /superadmin (inherited from superadmin)', () => {
103
+ allure.severity('high')
104
+
105
+ // 1. Login as Developer
106
+ loginAsDefaultDeveloper()
107
+
108
+ // 2. Visit Superadmin
109
+ cy.visit('/superadmin', { timeout: 60000 })
110
+
111
+ // 3. Validate access to Superadmin
112
+ cy.url().should('include', '/superadmin')
113
+ cy.get('[data-cy="sector7-container"]').should('be.visible')
114
+
115
+ cy.log('✅ Superadmin access granted (inherited privilege)')
116
+ })
117
+ })
118
+
119
+ describe('DEV-LOGIN-006: Developer Logout Flow', () => {
120
+ it('should logout successfully and redirect to login', () => {
121
+ allure.severity('normal')
122
+
123
+ // 1. Login as Developer
124
+ loginAsDefaultDeveloper()
125
+
126
+ // 2. Visit dashboard
127
+ cy.visit('/dashboard', { timeout: 60000 })
128
+ cy.url().should('include', '/dashboard')
129
+
130
+ // 3. Logout via user menu
131
+ cy.get('[data-cy="topnav-user-menu-trigger"]').click()
132
+ cy.get('[data-cy="topnav-menu-signOut"]').should('be.visible').click()
133
+
134
+ // 4. Validate redirected to login
135
+ cy.url().should('include', '/login')
136
+
137
+ cy.log('✅ Developer logout successful')
138
+ })
139
+ })
140
+
141
+ after(() => {
142
+ cy.log('✅ Developer app role tests completed')
143
+ })
144
+ })
@@ -0,0 +1,118 @@
1
+ ---
2
+ feature: SuperAdmin Authentication Flow
3
+ priority: critical
4
+ tags: [authentication, superadmin, sector7, security]
5
+ grepTags: [uat, feat-auth, security, regression]
6
+ coverage: 1
7
+ ---
8
+
9
+ # SuperAdmin Authentication Flow
10
+
11
+ > Complete authentication flow for SuperAdmin users including Sector7 access, user/team management navigation, and logout.
12
+
13
+ ## @test SUPERADMIN_001: SuperAdmin complete login and Sector7 flow
14
+
15
+ ### Metadata
16
+ - **Priority:** Critical
17
+ - **Type:** Smoke
18
+ - **Tags:** auth, sector7, security
19
+ - **Grep:** `@smoke`, `@security`
20
+
21
+ ```gherkin:en
22
+ Scenario: SuperAdmin complete flow - login, Sector7 access, navigate tables, logout
23
+
24
+ Given I am logged in as SuperAdmin (superadmin@nextspark.dev)
25
+ And I am on the dashboard
26
+
27
+ # Sector7 Access
28
+ When I verify the Sector7 icon is visible in TopNavbar
29
+ And I click the Sector7 icon
30
+ Then the URL should include /sector7
31
+ And "Super Administrator Control Panel" should be visible
32
+
33
+ # Users Management
34
+ When I click the Users navigation link
35
+ Then the URL should include /sector7/users
36
+ And "User Management" should be visible
37
+ And a table should be visible
38
+
39
+ # Teams Management
40
+ When I click the Teams navigation link
41
+ Then the URL should include /sector7/teams
42
+ And "Team Management" should be visible
43
+ And a table should be visible
44
+
45
+ # Exit Sector7
46
+ When I click the "Exit to Dashboard" button
47
+ Then the URL should include /dashboard
48
+ And the URL should not include /sector7
49
+
50
+ # Logout
51
+ When I click the user menu trigger
52
+ And I click the Sign Out option
53
+ Then I should be redirected to /login
54
+ ```
55
+
56
+ ```gherkin:es
57
+ Scenario: Flujo completo SuperAdmin - login, acceso Sector7, navegar tablas, logout
58
+
59
+ Given estoy logueado como SuperAdmin (superadmin@nextspark.dev)
60
+ And estoy en el dashboard
61
+
62
+ # Acceso a Sector7
63
+ When verifico que el icono de Sector7 esta visible en TopNavbar
64
+ And hago clic en el icono de Sector7
65
+ Then la URL deberia incluir /sector7
66
+ And "Super Administrator Control Panel" deberia estar visible
67
+
68
+ # Gestion de Usuarios
69
+ When hago clic en el enlace de navegacion Users
70
+ Then la URL deberia incluir /sector7/users
71
+ And "User Management" deberia estar visible
72
+ And una tabla deberia estar visible
73
+
74
+ # Gestion de Equipos
75
+ When hago clic en el enlace de navegacion Teams
76
+ Then la URL deberia incluir /sector7/teams
77
+ And "Team Management" deberia estar visible
78
+ And una tabla deberia estar visible
79
+
80
+ # Salir de Sector7
81
+ When hago clic en el boton "Exit to Dashboard"
82
+ Then la URL deberia incluir /dashboard
83
+ And la URL no deberia incluir /sector7
84
+
85
+ # Cerrar Sesion
86
+ When hago clic en el trigger del menu de usuario
87
+ And hago clic en la opcion Sign Out
88
+ Then deberia ser redirigido a /login
89
+ ```
90
+
91
+ ### Expected Results
92
+ - SuperAdmin can access dashboard after login
93
+ - Sector7 icon visible in TopNavbar (superadmin only)
94
+ - Sector7 control panel accessible
95
+ - Users and Teams management tables visible
96
+ - Exit to dashboard works correctly
97
+ - Logout redirects to login page
98
+
99
+ ---
100
+
101
+ ## UI Elements
102
+
103
+ | Element | Selector | Description |
104
+ |---------|----------|-------------|
105
+ | Sector7 Icon | `[data-cy="topnav-sector7"]` | Sector7 access (SuperAdmin/Developer only) |
106
+ | Users Nav | `[data-cy="sector7-nav-users"]` | Navigate to Users management |
107
+ | Teams Nav | `[data-cy="sector7-nav-teams"]` | Navigate to Teams management |
108
+ | Exit Button | `[data-cy="sector7-sidebar-exit-to-dashboard"]` | Exit Sector7 to dashboard |
109
+ | User Menu | `[data-cy="topnav-user-menu-trigger"]` | User dropdown menu trigger |
110
+ | Sign Out | `[data-cy="topnav-menu-signOut"]` | Logout option |
111
+
112
+ ---
113
+
114
+ ## Summary
115
+
116
+ | Test ID | Block | Description | Tags |
117
+ |---------|-------|-------------|------|
118
+ | SUPERADMIN_001 | Complete Flow | Login, Sector7 access, Users/Teams navigation, Logout | `@smoke`, `@security`, `@critical` |
@@ -0,0 +1,84 @@
1
+ /// <reference types="cypress" />
2
+
3
+ import * as allure from 'allure-cypress'
4
+
5
+ import { loginAsDefaultSuperadmin, CORE_USERS } from '../../../../src/session-helpers'
6
+
7
+ /**
8
+ * SuperAdmin Login Test
9
+ *
10
+ * Tests the complete SuperAdmin flow:
11
+ * 1. Login via API (using session helper)
12
+ * 2. Access Superadmin panel
13
+ * 3. Navigate through Users and Teams management
14
+ * 4. Logout
15
+ *
16
+ * Uses: loginAsDefaultSuperadmin() from session-helpers
17
+ * User: superadmin@nextspark.dev (core system user with global superadmin role)
18
+ */
19
+
20
+ describe('Authentication - SuperAdmin Flow', {
21
+ tags: ['@uat', '@feat-auth', '@security', '@regression']
22
+ }, () => {
23
+ beforeEach(() => {
24
+ allure.epic('UAT')
25
+ allure.feature('Authentication')
26
+ allure.story('SuperAdmin Access')
27
+ loginAsDefaultSuperadmin()
28
+ })
29
+
30
+ describe('SUPERADMIN_001: SuperAdmin Login and Panel Access', () => {
31
+ it('should login as superadmin, access panel, view tables, and logout', () => {
32
+ allure.severity('critical')
33
+
34
+ // 1. Visit dashboard (session already established)
35
+ cy.visit('/dashboard', { timeout: 60000 })
36
+ cy.url().should('include', '/dashboard')
37
+ cy.log(`✅ SuperAdmin login successful (${CORE_USERS.SUPERADMIN})`)
38
+
39
+ // 2. Validate Superadmin icon is visible (superadmin only)
40
+ cy.get('[data-cy="topnav-superadmin"]').should('be.visible')
41
+ cy.log('✅ Superadmin icon visible in TopNavbar')
42
+
43
+ // 3. Navigate to Superadmin panel
44
+ cy.get('[data-cy="topnav-superadmin"]').click()
45
+ cy.url().should('include', '/superadmin')
46
+ cy.contains('Super Administrator Control Panel').should('be.visible')
47
+ cy.log('✅ Navigated to Superadmin dashboard')
48
+
49
+ // 4. Navigate to Users table and validate
50
+ cy.get('[data-cy="superadmin-nav-users"]').click()
51
+ cy.url().should('include', '/superadmin/users')
52
+ cy.contains('User Management').should('be.visible')
53
+ cy.get('table').should('be.visible')
54
+ cy.log('✅ Users table loaded and visible')
55
+
56
+ // 5. Navigate to Teams table and validate
57
+ cy.get('[data-cy="superadmin-nav-teams"]').click()
58
+ cy.url().should('include', '/superadmin/teams')
59
+ cy.contains('Team Management').should('be.visible')
60
+ cy.get('table').should('be.visible')
61
+ cy.log('✅ Teams table loaded and visible')
62
+
63
+ // 6. Exit Superadmin back to dashboard
64
+ cy.get('[data-cy="superadmin-sidebar-exit-to-dashboard"]').click()
65
+ cy.url().should('include', '/dashboard')
66
+ cy.url().should('not.include', '/superadmin')
67
+ cy.log('✅ Exited Superadmin')
68
+
69
+ // 7. Logout from the main dashboard
70
+ cy.get('[data-cy="topnav-user-menu-trigger"]').click()
71
+ cy.get('[data-cy="topnav-menu-signOut"]').should('be.visible').click()
72
+
73
+ // Verify redirected to login
74
+ cy.url().should('include', '/login')
75
+ cy.log('✅ Logout successful')
76
+
77
+ cy.log('✅ SuperAdmin flow completed successfully')
78
+ })
79
+ })
80
+
81
+ after(() => {
82
+ cy.log('✅ SuperAdmin authentication tests completed')
83
+ })
84
+ })
@@ -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 | |