@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,251 @@
1
+ ---
2
+ feature: Member Team Role Restrictions
3
+ priority: critical
4
+ tags: [auth, team-role, member, permissions, security, restrictions]
5
+ grepTags: [uat, feat-auth, team-role, member]
6
+ coverage: 7
7
+ ---
8
+
9
+ # Member Team Role Restrictions
10
+
11
+ > Tests for Member team role restrictions. Member is the most restricted team role with read-only access to entities, no create/update/delete permissions, and no access to settings, billing, or app-role areas.
12
+
13
+ ## @test MEMBER-PERM-001: Member Dashboard Access
14
+
15
+ ### Metadata
16
+ - **Priority:** Critical
17
+ - **Type:** Smoke
18
+ - **Tags:** member, dashboard
19
+ - **Grep:** `@smoke`
20
+
21
+ ```gherkin:en
22
+ Scenario: Member can access dashboard
23
+
24
+ Given I am logged in as Member (emily.johnson@nextspark.dev)
25
+ When I visit /dashboard
26
+ Then the dashboard container should be visible
27
+ ```
28
+
29
+ ```gherkin:es
30
+ Scenario: Member puede acceder al dashboard
31
+
32
+ Given estoy logueado como Member (emily.johnson@nextspark.dev)
33
+ When visito /dashboard
34
+ Then el contenedor del dashboard deberia estar visible
35
+ ```
36
+
37
+ ### Expected Results
38
+ - Dashboard loads
39
+ - Limited navigation visible
40
+
41
+ ---
42
+
43
+ ## @test MEMBER-PERM-002: Member Read-Only Entity Access
44
+
45
+ ### Metadata
46
+ - **Priority:** Critical
47
+ - **Type:** Smoke
48
+ - **Tags:** member, customers, read-only
49
+ - **Grep:** `@smoke`
50
+
51
+ ```gherkin:en
52
+ Scenario: Member has read-only access to customers
53
+
54
+ Given I am logged in as Member (emily.johnson@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: Member tiene acceso solo lectura a customers
62
+
63
+ Given estoy logueado como Member (emily.johnson@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 entity list
71
+ - Cannot create new entities
72
+ - No action buttons visible
73
+
74
+ ---
75
+
76
+ ## @test MEMBER-PERM-003: Member Cannot Create Entities
77
+
78
+ ### Metadata
79
+ - **Priority:** High
80
+ - **Type:** Security
81
+ - **Tags:** member, create, blocked
82
+
83
+ ```gherkin:en
84
+ Scenario: Member cannot see create button on entity pages
85
+
86
+ Given I am logged in as Member (emily.johnson@nextspark.dev)
87
+ When I visit /customers
88
+ Then the create button should not exist
89
+ When I visit /tasks
90
+ Then the create button should not exist
91
+ ```
92
+
93
+ ```gherkin:es
94
+ Scenario: Member no puede ver boton crear en paginas de entidades
95
+
96
+ Given estoy logueado como Member (emily.johnson@nextspark.dev)
97
+ When visito /customers
98
+ Then el boton crear no deberia existir
99
+ When visito /tasks
100
+ Then el boton crear no deberia existir
101
+ ```
102
+
103
+ ### Expected Results
104
+ - No create buttons on any entity page
105
+ - Read-only experience
106
+
107
+ ---
108
+
109
+ ## @test MEMBER-PERM-004: Member Settings Restricted
110
+
111
+ ### Metadata
112
+ - **Priority:** High
113
+ - **Type:** Security
114
+ - **Tags:** member, settings, restricted
115
+
116
+ ```gherkin:en
117
+ Scenario: Member has limited or no settings access
118
+
119
+ Given I am logged in as Member (emily.johnson@nextspark.dev)
120
+ When I visit /settings
121
+ Then I should see only profile tab or be redirected
122
+ And the team settings tab should not exist
123
+ ```
124
+
125
+ ```gherkin:es
126
+ Scenario: Member tiene acceso limitado o sin acceso a settings
127
+
128
+ Given estoy logueado como Member (emily.johnson@nextspark.dev)
129
+ When visito /settings
130
+ Then deberia ver solo pestana de perfil o ser redirigido
131
+ And la pestana de team settings no deberia existir
132
+ ```
133
+
134
+ ### Expected Results
135
+ - Profile tab only (if accessible)
136
+ - No team settings access
137
+ - No danger zone access
138
+
139
+ ---
140
+
141
+ ## @test MEMBER-PERM-005: Member Billing Blocked
142
+
143
+ ### Metadata
144
+ - **Priority:** High
145
+ - **Type:** Security
146
+ - **Tags:** member, billing, blocked
147
+
148
+ ```gherkin:en
149
+ Scenario: Member cannot access billing
150
+
151
+ Given I am logged in as Member (emily.johnson@nextspark.dev)
152
+ When I visit /billing
153
+ Then I should be redirected away from /billing
154
+ ```
155
+
156
+ ```gherkin:es
157
+ Scenario: Member no puede acceder a billing
158
+
159
+ Given estoy logueado como Member (emily.johnson@nextspark.dev)
160
+ When visito /billing
161
+ Then deberia ser redirigido fuera de /billing
162
+ ```
163
+
164
+ ### Expected Results
165
+ - No billing access
166
+ - Redirect to dashboard
167
+
168
+ ---
169
+
170
+ ## @test MEMBER-PERM-006: Member Cannot Access Sector7
171
+
172
+ ### Metadata
173
+ - **Priority:** High
174
+ - **Type:** Security
175
+ - **Tags:** member, sector7, blocked
176
+
177
+ ```gherkin:en
178
+ Scenario: Member is blocked from Sector7
179
+
180
+ Given I am logged in as Member (emily.johnson@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: Member no puede acceder a Sector7
187
+
188
+ Given estoy logueado como Member (emily.johnson@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 MEMBER-PERM-007: Member Cannot Access Dev Zone
200
+
201
+ ### Metadata
202
+ - **Priority:** High
203
+ - **Type:** Security
204
+ - **Tags:** member, dev-zone, blocked
205
+
206
+ ```gherkin:en
207
+ Scenario: Member is blocked from Dev Zone
208
+
209
+ Given I am logged in as Member (emily.johnson@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: Member no puede acceder a Dev Zone
216
+
217
+ Given estoy logueado como Member (emily.johnson@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
+ ## UI Elements
229
+
230
+ | Element | Selector | Description |
231
+ |---------|----------|-------------|
232
+ | Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
233
+ | Create Button | `[data-cy="entity-create-button"]` | Entity create button (should not exist) |
234
+ | Entity List | `[data-cy="entity-list-container"]` | Entity list container |
235
+ | Settings Container | `[data-cy="settings-container"]` | Settings page container |
236
+ | Profile Tab | `[data-cy="settings-tab-profile"]` | Profile settings tab |
237
+ | Team Tab | `[data-cy="settings-tab-team"]` | Team settings tab (should not exist) |
238
+
239
+ ---
240
+
241
+ ## Summary
242
+
243
+ | Test ID | Block | Description | Tags |
244
+ |---------|-------|-------------|------|
245
+ | MEMBER-PERM-001 | Access | Dashboard access | `@smoke` |
246
+ | MEMBER-PERM-002 | Read-Only | Read-only entity access | `@smoke` |
247
+ | MEMBER-PERM-003 | Blocked | Cannot create entities | |
248
+ | MEMBER-PERM-004 | Restricted | Settings limited/blocked | |
249
+ | MEMBER-PERM-005 | Blocked | Billing blocked | |
250
+ | MEMBER-PERM-006 | Blocked | Sector7 blocked | |
251
+ | MEMBER-PERM-007 | Blocked | Dev Zone blocked | |
@@ -0,0 +1,163 @@
1
+ /// <reference types="cypress" />
2
+
3
+ /**
4
+ * Member Team Role Login Tests
5
+ *
6
+ * Tests the Member team role login and specific restrictions:
7
+ * - Read-only access to most entities
8
+ * - Cannot create/update/delete (restricted)
9
+ * - Limited navigation
10
+ * - No settings or billing access
11
+ * - Cannot access /dev or /superadmin (app roles only)
12
+ *
13
+ * Note: Basic login is tested in login-logout.cy.ts
14
+ * This file focuses on Member-specific restrictions.
15
+ *
16
+ * Tags: @uat, @feat-auth, @team-role, @member
17
+ */
18
+
19
+ import * as allure from 'allure-cypress'
20
+
21
+ import { loginAsDefaultMember, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
22
+ import { DashboardPOM } from '../../../../src/features/DashboardPOM'
23
+ import { SettingsPOM } from '../../../../src/features/SettingsPOM'
24
+ import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
25
+ import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
26
+
27
+ describe('Authentication - Member Team Role Restrictions', {
28
+ tags: ['@uat', '@feat-auth', '@team-role', '@member']
29
+ }, () => {
30
+ const dashboard = DashboardPOM.create()
31
+ const settings = SettingsPOM.create()
32
+ const sector7 = SuperadminPOM.create()
33
+ const devArea = DevAreaPOM.create()
34
+
35
+ beforeEach(() => {
36
+ allure.epic('Authentication')
37
+ allure.feature('Team Roles')
38
+ allure.story('Member Restrictions')
39
+ loginAsDefaultMember()
40
+ })
41
+
42
+ describe('MEMBER-PERM-001: Member Dashboard Access', { tags: '@smoke' }, () => {
43
+ it('should access dashboard with limited navigation', { tags: '@smoke' }, () => {
44
+ allure.severity('critical')
45
+
46
+ // 1. Visit dashboard and wait for load
47
+ dashboard.visitDashboard()
48
+ dashboard.waitForDashboard()
49
+
50
+ // 2. Validate dashboard is accessible
51
+ dashboard.assertDashboardVisible()
52
+
53
+ cy.log(`✅ Member dashboard access verified (${DEFAULT_THEME_USERS.MEMBER})`)
54
+ })
55
+ })
56
+
57
+ describe('MEMBER-PERM-002: Member Read-Only Entity Access', { tags: '@smoke' }, () => {
58
+ it('should have read-only access to customers', { tags: '@smoke' }, () => {
59
+ allure.severity('critical')
60
+
61
+ // 1. Navigate to customers
62
+ dashboard.visitEntity('customers')
63
+ dashboard.waitForEntityPage('customers')
64
+
65
+ // 2. Validate table is visible (Member can read)
66
+ dashboard.assertEntityPageVisible('customers')
67
+
68
+ // 3. Create button should NOT be visible for Member
69
+ dashboard.assertEntityAddButtonNotVisible('customers')
70
+
71
+ cy.log('✅ Member has read-only access to customers')
72
+ })
73
+ })
74
+
75
+ describe('MEMBER-PERM-003: Member Create Permissions per Entity', () => {
76
+ it('should have entity-specific create permissions', () => {
77
+ allure.severity('high')
78
+
79
+ // 1. Check customers page - Member CANNOT create customers
80
+ // (customers.create roles: ['owner', 'admin'])
81
+ dashboard.visitEntity('customers')
82
+ dashboard.waitForEntityPage('customers')
83
+ dashboard.assertEntityAddButtonNotVisible('customers')
84
+
85
+ // 2. Check tasks page - Member CAN create tasks
86
+ // (tasks.create roles: ['owner', 'admin', 'member'])
87
+ dashboard.visitEntity('tasks')
88
+ dashboard.waitForEntityPage('tasks')
89
+ dashboard.assertEntityAddButtonVisible('tasks')
90
+
91
+ cy.log('✅ Member has correct entity-specific create permissions')
92
+ })
93
+ })
94
+
95
+ describe('MEMBER-PERM-004: Member Settings Restricted', () => {
96
+ it('should have limited or no settings access', () => {
97
+ allure.severity('high')
98
+
99
+ // 1. Navigate to settings
100
+ settings.visitSettings()
101
+
102
+ // 2. Check access
103
+ cy.url().then((url) => {
104
+ if (url.includes('/settings')) {
105
+ // If accessible, should only see profile
106
+ settings.assertSettingsVisible()
107
+ settings.assertNavItemVisible('profile')
108
+ // Team nav should not be visible
109
+ settings.assertNavItemNotVisible('team')
110
+ cy.log('✅ Member has limited settings access (profile only)')
111
+ } else {
112
+ cy.log('✅ Member redirected from settings')
113
+ }
114
+ })
115
+ })
116
+ })
117
+
118
+ describe('MEMBER-PERM-005: Member Billing Blocked', () => {
119
+ it('should not have access to billing', () => {
120
+ allure.severity('high')
121
+
122
+ // 1. Navigate to billing
123
+ cy.visit('/dashboard/settings/billing', { timeout: 60000, failOnStatusCode: false })
124
+
125
+ // 2. Should be redirected or access denied
126
+ cy.url().should('not.include', '/billing')
127
+
128
+ cy.log('✅ Member correctly blocked from billing')
129
+ })
130
+ })
131
+
132
+ describe('MEMBER-PERM-006: Member Cannot Access Superadmin', () => {
133
+ it('should be redirected when trying to access /superadmin', () => {
134
+ allure.severity('high')
135
+
136
+ // 1. Attempt to visit Superadmin
137
+ cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
138
+
139
+ // 2. Should be redirected
140
+ sector7.assertAccessDenied()
141
+
142
+ cy.log('✅ Member correctly blocked from Superadmin')
143
+ })
144
+ })
145
+
146
+ describe('MEMBER-PERM-007: Member Cannot Access Dev Zone', () => {
147
+ it('should be redirected when trying to access /dev', () => {
148
+ allure.severity('high')
149
+
150
+ // 1. Attempt to visit Dev Zone
151
+ devArea.attemptToVisitDev()
152
+
153
+ // 2. Should be redirected
154
+ devArea.assertRedirectedToDashboard()
155
+
156
+ cy.log('✅ Member correctly blocked from Dev Zone')
157
+ })
158
+ })
159
+
160
+ after(() => {
161
+ cy.log('✅ Member team role tests completed')
162
+ })
163
+ })
@@ -0,0 +1,231 @@
1
+ ---
2
+ feature: Owner Team Role Permissions
3
+ priority: critical
4
+ tags: [auth, team-role, owner, permissions, security]
5
+ grepTags: [uat, feat-auth, team-role, owner]
6
+ coverage: 6
7
+ ---
8
+
9
+ # Owner Team Role Permissions
10
+
11
+ > Tests for Owner team role permissions and access control. Owner is the highest team-based role with full CRUD access to all entities, team settings, and billing. Does not have access to app-role areas like /dev or /sector7.
12
+
13
+ ## @test OWNER-PERM-001: Owner Dashboard Access
14
+
15
+ ### Metadata
16
+ - **Priority:** Critical
17
+ - **Type:** Smoke
18
+ - **Tags:** owner, dashboard, navigation
19
+ - **Grep:** `@smoke`
20
+
21
+ ```gherkin:en
22
+ Scenario: Owner can access dashboard with full navigation
23
+
24
+ Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
25
+ When I visit /dashboard
26
+ Then the dashboard container should be visible
27
+ And I should see navigation for customers
28
+ And I should see navigation for tasks
29
+ ```
30
+
31
+ ```gherkin:es
32
+ Scenario: Owner puede acceder al dashboard con navegacion completa
33
+
34
+ Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
35
+ When visito /dashboard
36
+ Then el contenedor del dashboard deberia estar visible
37
+ And deberia ver navegacion a customers
38
+ And deberia ver navegacion a tasks
39
+ ```
40
+
41
+ ### Expected Results
42
+ - Dashboard loads correctly
43
+ - All navigation items visible
44
+ - No restrictions on sidebar
45
+
46
+ ---
47
+
48
+ ## @test OWNER-PERM-002: Owner Full Entity Access
49
+
50
+ ### Metadata
51
+ - **Priority:** Critical
52
+ - **Type:** Smoke
53
+ - **Tags:** owner, customers, crud
54
+ - **Grep:** `@smoke`
55
+
56
+ ```gherkin:en
57
+ Scenario: Owner has full CRUD access to customers
58
+
59
+ Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
60
+ When I visit /customers
61
+ Then the create button should be visible
62
+ And the entity list should be visible
63
+ ```
64
+
65
+ ```gherkin:es
66
+ Scenario: Owner tiene acceso CRUD completo a customers
67
+
68
+ Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
69
+ When visito /customers
70
+ Then el boton de crear deberia estar visible
71
+ And la lista de entidades deberia estar visible
72
+ ```
73
+
74
+ ### Expected Results
75
+ - Create button is visible (can create)
76
+ - List is visible (can read)
77
+ - Edit/Delete buttons available on items
78
+
79
+ ---
80
+
81
+ ## @test OWNER-PERM-003: Owner Team Settings Access
82
+
83
+ ### Metadata
84
+ - **Priority:** High
85
+ - **Type:** Regression
86
+ - **Tags:** owner, settings, team
87
+
88
+ ```gherkin:en
89
+ Scenario: Owner can access team settings
90
+
91
+ Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
92
+ When I visit /settings
93
+ Then the settings container should be visible
94
+ And the team settings tab should be visible
95
+ ```
96
+
97
+ ```gherkin:es
98
+ Scenario: Owner puede acceder a configuracion de equipo
99
+
100
+ Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
101
+ When visito /settings
102
+ Then el contenedor de settings deberia estar visible
103
+ And la pestana de team settings deberia estar visible
104
+ ```
105
+
106
+ ### Expected Results
107
+ - Settings page loads
108
+ - Team settings tab accessible
109
+ - Can manage team configuration
110
+
111
+ ---
112
+
113
+ ## @test OWNER-PERM-004: Owner Billing Access
114
+
115
+ ### Metadata
116
+ - **Priority:** High
117
+ - **Type:** Regression
118
+ - **Tags:** owner, billing
119
+
120
+ ```gherkin:en
121
+ Scenario: Owner can access billing
122
+
123
+ Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
124
+ When I visit /billing
125
+ Then the billing container should be visible
126
+ ```
127
+
128
+ ```gherkin:es
129
+ Scenario: Owner puede acceder a billing
130
+
131
+ Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
132
+ When visito /billing
133
+ Then el contenedor de billing deberia estar visible
134
+ ```
135
+
136
+ ### Expected Results
137
+ - Billing page loads
138
+ - Plan information visible
139
+ - Upgrade options available
140
+
141
+ ---
142
+
143
+ ## @test OWNER-PERM-005: Owner Cannot Access Sector7
144
+
145
+ ### Metadata
146
+ - **Priority:** High
147
+ - **Type:** Security
148
+ - **Tags:** owner, sector7, blocked
149
+
150
+ ```gherkin:en
151
+ Scenario: Owner is blocked from Sector7
152
+
153
+ Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
154
+ When I attempt to visit /sector7
155
+ Then I should be redirected away from /sector7
156
+ And the URL should include /dashboard or error=access_denied
157
+ ```
158
+
159
+ ```gherkin:es
160
+ Scenario: Owner no puede acceder a Sector7
161
+
162
+ Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
163
+ When intento visitar /sector7
164
+ Then deberia ser redirigido fuera de /sector7
165
+ And la URL deberia incluir /dashboard o error=access_denied
166
+ ```
167
+
168
+ ### Expected Results
169
+ - Access denied to Sector7
170
+ - Redirect to dashboard with error
171
+ - Security control working
172
+
173
+ ---
174
+
175
+ ## @test OWNER-PERM-006: Owner Cannot Access Dev Zone
176
+
177
+ ### Metadata
178
+ - **Priority:** High
179
+ - **Type:** Security
180
+ - **Tags:** owner, dev-zone, blocked
181
+
182
+ ```gherkin:en
183
+ Scenario: Owner is blocked from Dev Zone
184
+
185
+ Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
186
+ When I attempt to visit /dev
187
+ Then I should be redirected away from /dev
188
+ And the URL should include /dashboard or error=access_denied
189
+ ```
190
+
191
+ ```gherkin:es
192
+ Scenario: Owner no puede acceder a Dev Zone
193
+
194
+ Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
195
+ When intento visitar /dev
196
+ Then deberia ser redirigido fuera de /dev
197
+ And la URL deberia incluir /dashboard o error=access_denied
198
+ ```
199
+
200
+ ### Expected Results
201
+ - Access denied to Dev Zone
202
+ - Redirect to dashboard with error
203
+ - Security control working
204
+
205
+ ---
206
+
207
+ ## UI Elements
208
+
209
+ | Element | Selector | Description |
210
+ |---------|----------|-------------|
211
+ | Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
212
+ | Customers Nav | `[data-cy="sidebar-nav-customers"]` | Customers navigation item |
213
+ | Tasks Nav | `[data-cy="sidebar-nav-tasks"]` | Tasks navigation item |
214
+ | Create Button | `[data-cy="entity-create-button"]` | Entity create button |
215
+ | Entity List | `[data-cy="entity-list-container"]` | Entity list container |
216
+ | Settings Container | `[data-cy="settings-container"]` | Settings page container |
217
+ | Team Settings Tab | `[data-cy="settings-tab-team"]` | Team settings tab |
218
+ | Billing Container | `[data-cy="billing-container"]` | Billing page container |
219
+
220
+ ---
221
+
222
+ ## Summary
223
+
224
+ | Test ID | Block | Description | Tags |
225
+ |---------|-------|-------------|------|
226
+ | OWNER-PERM-001 | Access | Dashboard with full navigation | `@smoke` |
227
+ | OWNER-PERM-002 | Access | Full CRUD access to customers | `@smoke` |
228
+ | OWNER-PERM-003 | Access | Team settings access | |
229
+ | OWNER-PERM-004 | Access | Billing access | |
230
+ | OWNER-PERM-005 | Blocked | Cannot access Sector7 | |
231
+ | OWNER-PERM-006 | Blocked | Cannot access Dev Zone | |