@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,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', '@area-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
+ })
@@ -0,0 +1,261 @@
1
+ ---
2
+ feature: DevTools Navigation
3
+ priority: high
4
+ tags: [dev-area, navigation, sidebar]
5
+ grepTags: [uat, feat-dev-area, regression]
6
+ coverage: 7
7
+ ---
8
+
9
+ # DevTools Navigation
10
+
11
+ > Navigation functionality tests within the /devtools area. Validates sidebar navigation items, clickable links, and exit navigation to Dashboard and Admin.
12
+
13
+ ## @test NAV-001: Sidebar navigation works
14
+
15
+ ### Metadata
16
+ - **Priority:** High
17
+ - **Type:** Smoke
18
+ - **Tags:** sidebar, navigation, display
19
+ - **Grep:** `@smoke`
20
+
21
+ ```gherkin:en
22
+ Scenario: All sidebar navigation items are displayed
23
+
24
+ Given I am logged in as Developer (developer@nextspark.dev)
25
+ When I visit /devtools home
26
+ Then all navigation items should be visible in sidebar
27
+ And exit links (Dashboard, Admin) should be visible
28
+ ```
29
+
30
+ ```gherkin:es
31
+ Scenario: Todos los items de navegacion del sidebar estan visibles
32
+
33
+ Given estoy logueado como Developer (developer@nextspark.dev)
34
+ When visito /devtools home
35
+ Then todos los items de navegacion deberian estar visibles en el sidebar
36
+ And los enlaces de salida (Dashboard, Admin) deberian estar visibles
37
+ ```
38
+
39
+ ### Expected Results
40
+ - Home, Style Gallery, Test Cases, Config links visible
41
+ - Exit to Dashboard link visible
42
+ - Go to Admin link visible
43
+
44
+ ---
45
+
46
+ ## @test NAV-002a: Navigate to Style Gallery via sidebar
47
+
48
+ ### Metadata
49
+ - **Priority:** High
50
+ - **Type:** Smoke
51
+ - **Tags:** navigate, style-gallery
52
+
53
+ ```gherkin:en
54
+ Scenario: Navigate to Style Gallery via sidebar
55
+
56
+ Given I am on /devtools home
57
+ When I click Style Gallery nav item
58
+ Then the URL should include /devtools/style
59
+ And the style page should be visible
60
+ ```
61
+
62
+ ```gherkin:es
63
+ Scenario: Navegar a Style Gallery via sidebar
64
+
65
+ Given estoy en /devtools home
66
+ When hago clic en el item de navegacion Style Gallery
67
+ Then la URL deberia incluir /devtools/style
68
+ And la pagina de estilos deberia estar visible
69
+ ```
70
+
71
+ ### Expected Results
72
+ - Navigation completes successfully
73
+ - Style Gallery page loads
74
+
75
+ ---
76
+
77
+ ## @test NAV-002b: Navigate to Test Cases via sidebar
78
+
79
+ ### Metadata
80
+ - **Priority:** High
81
+ - **Type:** Smoke
82
+ - **Tags:** navigate, test-cases
83
+
84
+ ```gherkin:en
85
+ Scenario: Navigate to Test Cases via sidebar
86
+
87
+ Given I am on /devtools home
88
+ When I click Test Cases nav item
89
+ Then the URL should include /devtools/tests
90
+ And the tests page should be visible
91
+ ```
92
+
93
+ ```gherkin:es
94
+ Scenario: Navegar a Test Cases via sidebar
95
+
96
+ Given estoy en /devtools home
97
+ When hago clic en el item de navegacion Test Cases
98
+ Then la URL deberia incluir /devtools/tests
99
+ And la pagina de tests deberia estar visible
100
+ ```
101
+
102
+ ### Expected Results
103
+ - Navigation completes successfully
104
+ - Test Cases viewer page loads
105
+
106
+ ---
107
+
108
+ ## @test NAV-002c: Navigate to Config Viewer via sidebar
109
+
110
+ ### Metadata
111
+ - **Priority:** High
112
+ - **Type:** Smoke
113
+ - **Tags:** navigate, config
114
+
115
+ ```gherkin:en
116
+ Scenario: Navigate to Config Viewer via sidebar
117
+
118
+ Given I am on /devtools home
119
+ When I click Config nav item
120
+ Then the URL should include /devtools/config
121
+ And the config page should be visible
122
+ ```
123
+
124
+ ```gherkin:es
125
+ Scenario: Navegar a Config Viewer via sidebar
126
+
127
+ Given estoy en /devtools home
128
+ When hago clic en el item de navegacion Config
129
+ Then la URL deberia incluir /devtools/config
130
+ And la pagina de config deberia estar visible
131
+ ```
132
+
133
+ ### Expected Results
134
+ - Navigation completes successfully
135
+ - Config Viewer page loads
136
+
137
+ ---
138
+
139
+ ## @test NAV-002d: Navigate back to Home via sidebar
140
+
141
+ ### Metadata
142
+ - **Priority:** High
143
+ - **Type:** Smoke
144
+ - **Tags:** navigate, home
145
+
146
+ ```gherkin:en
147
+ Scenario: Navigate back to Home via sidebar
148
+
149
+ Given I am on /devtools/style
150
+ When I click Home nav item
151
+ Then the URL should be /devtools
152
+ And the home page should be visible
153
+ ```
154
+
155
+ ```gherkin:es
156
+ Scenario: Navegar de vuelta a Home via sidebar
157
+
158
+ Given estoy en /devtools/style
159
+ When hago clic en el item de navegacion Home
160
+ Then la URL deberia ser /devtools
161
+ And la pagina home deberia estar visible
162
+ ```
163
+
164
+ ### Expected Results
165
+ - Navigation completes successfully
166
+ - Home page loads
167
+
168
+ ---
169
+
170
+ ## @test NAV-003: Back to Dashboard link works
171
+
172
+ ### Metadata
173
+ - **Priority:** High
174
+ - **Type:** Smoke
175
+ - **Tags:** exit, dashboard
176
+
177
+ ```gherkin:en
178
+ Scenario: Navigate to Dashboard when clicking exit link
179
+
180
+ Given I am on /devtools home
181
+ When I click "Exit to Dashboard" link
182
+ Then the URL should include /dashboard
183
+ And the URL should not include /devtools
184
+ And the dashboard container should be visible
185
+ ```
186
+
187
+ ```gherkin:es
188
+ Scenario: Navegar a Dashboard al hacer clic en enlace de salida
189
+
190
+ Given estoy en /devtools home
191
+ When hago clic en el enlace "Exit to Dashboard"
192
+ Then la URL deberia incluir /dashboard
193
+ And la URL no deberia incluir /devtools
194
+ And el contenedor del dashboard deberia estar visible
195
+ ```
196
+
197
+ ### Expected Results
198
+ - Exit navigation works correctly
199
+ - User lands on main dashboard
200
+ - No /devtools in URL
201
+
202
+ ---
203
+
204
+ ## @test NAV-004: Go to Admin link works
205
+
206
+ ### Metadata
207
+ - **Priority:** High
208
+ - **Type:** Smoke
209
+ - **Tags:** exit, admin
210
+
211
+ ```gherkin:en
212
+ Scenario: Navigate to Admin when clicking exit link
213
+
214
+ Given I am on /devtools home
215
+ When I click "Go to Admin" link
216
+ Then the URL should include /admin
217
+ And the Admin container should be visible
218
+ ```
219
+
220
+ ```gherkin:es
221
+ Scenario: Navegar a Admin al hacer clic en enlace de salida
222
+
223
+ Given estoy en /devtools home
224
+ When hago clic en el enlace "Go to Admin"
225
+ Then la URL deberia incluir /admin
226
+ And el contenedor de Admin deberia estar visible
227
+ ```
228
+
229
+ ### Expected Results
230
+ - Exit to Admin works correctly
231
+ - Developer can access Admin (inherited privileges)
232
+ - Admin control panel visible
233
+
234
+ ---
235
+
236
+ ## UI Elements
237
+
238
+ | Element | Selector | Description |
239
+ |---------|----------|-------------|
240
+ | Nav Home | `[data-cy="dev-nav-home"]` | Home navigation item |
241
+ | Nav Style Gallery | `[data-cy="dev-nav-stylegallery"]` | Style Gallery navigation item |
242
+ | Nav Test Cases | `[data-cy="dev-nav-testcases"]` | Test Cases navigation item |
243
+ | Nav Config | `[data-cy="dev-nav-config"]` | Config navigation item |
244
+ | Exit to Dashboard | `[data-cy="dev-sidebar-exit-to-dashboard"]` | Exit to dashboard link |
245
+ | Go to Admin | `[data-cy="dev-sidebar-go-to-admin"]` | Go to Admin link |
246
+ | Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
247
+ | Admin Container | `[data-cy="admin-container"]` | Admin main container |
248
+
249
+ ---
250
+
251
+ ## Summary
252
+
253
+ | Test ID | Block | Description | Tags |
254
+ |---------|-------|-------------|------|
255
+ | NAV-001 | Sidebar Display | All navigation items visible | `@smoke` |
256
+ | NAV-002a | Navigate | Style Gallery via sidebar | |
257
+ | NAV-002b | Navigate | Test Cases via sidebar | |
258
+ | NAV-002c | Navigate | Config Viewer via sidebar | |
259
+ | NAV-002d | Navigate | Back to Home via sidebar | |
260
+ | NAV-003 | Exit Links | Back to Dashboard works | |
261
+ | NAV-004 | Exit Links | Go to Admin works | |
@@ -0,0 +1,157 @@
1
+ /// <reference types="cypress" />
2
+
3
+ import * as allure from 'allure-cypress'
4
+ import { DevtoolsPOM } from '../../../src/features/DevtoolsPOM'
5
+ import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
6
+
7
+ /**
8
+ * DevTools Navigation Tests
9
+ *
10
+ * Tests the navigation functionality within the /devtools area:
11
+ * - Sidebar navigation items work correctly
12
+ * - All nav links are clickable and navigate to correct pages
13
+ * - Exit links (Dashboard, Admin) work
14
+ * - URL changes reflect navigation
15
+ *
16
+ * Test User:
17
+ * - Developer: developer@nextspark.dev (via loginAsDefaultDeveloper)
18
+ */
19
+
20
+ describe('DevTools - Navigation', {
21
+ tags: ['@uat', '@area-devtools', '@regression']
22
+ }, () => {
23
+ const devtools = DevtoolsPOM.create()
24
+
25
+ beforeEach(() => {
26
+ allure.epic('UAT')
27
+ allure.feature('DevTools')
28
+ allure.story('Navigation')
29
+
30
+ // Login as developer before each test
31
+ loginAsDefaultDeveloper()
32
+ })
33
+
34
+ describe('NAV-001: Sidebar navigation works', () => {
35
+ it('should display all sidebar navigation items', () => {
36
+ allure.severity('high')
37
+
38
+ // 1. Visit /devtools home
39
+ devtools.visitHome()
40
+
41
+ // 2. Verify all navigation items are visible
42
+ devtools.assertSidebarNavigationVisible()
43
+
44
+ // 3. Verify exit links are visible
45
+ devtools.assertExitLinksVisible()
46
+
47
+ cy.log(`✅ Sidebar navigation displayed correctly`)
48
+ })
49
+ })
50
+
51
+ describe('NAV-002: All nav links are clickable', () => {
52
+ it('should navigate to Style Gallery via sidebar', () => {
53
+ allure.severity('high')
54
+
55
+ // 1. Start at /devtools home
56
+ devtools.visitHome()
57
+
58
+ // 2. Click Style Gallery nav item
59
+ devtools.clickNavStyleGallery()
60
+
61
+ // 3. Verify navigation to /devtools/style
62
+ devtools.assertOnStyleGallery()
63
+ devtools.assertStylePageVisible()
64
+
65
+ cy.log(`✅ Style Gallery navigation works`)
66
+ })
67
+
68
+ it('should navigate to Test Cases via sidebar', () => {
69
+ allure.severity('high')
70
+
71
+ // 1. Start at /devtools home
72
+ devtools.visitHome()
73
+
74
+ // 2. Click Test Cases nav item
75
+ devtools.clickNavTestCases()
76
+
77
+ // 3. Verify navigation to /devtools/tests
78
+ devtools.assertOnTestCases()
79
+ devtools.assertTestsPageVisible()
80
+
81
+ cy.log(`✅ Test Cases navigation works`)
82
+ })
83
+
84
+ it('should navigate to Config Viewer via sidebar', () => {
85
+ allure.severity('high')
86
+
87
+ // 1. Start at /devtools home
88
+ devtools.visitHome()
89
+
90
+ // 2. Click Config nav item
91
+ devtools.clickNavConfig()
92
+
93
+ // 3. Verify navigation to /devtools/config
94
+ devtools.assertOnConfig()
95
+ devtools.assertConfigPageVisible()
96
+
97
+ cy.log(`✅ Config Viewer navigation works`)
98
+ })
99
+
100
+ it('should navigate back to Home via sidebar', () => {
101
+ allure.severity('high')
102
+
103
+ // 1. Start at /devtools/style
104
+ devtools.visitStyleGallery()
105
+
106
+ // 2. Click Home nav item
107
+ devtools.clickNavHome()
108
+
109
+ // 3. Verify navigation to /devtools
110
+ devtools.assertOnDevtoolsHome()
111
+ devtools.assertHomePageVisible()
112
+
113
+ cy.log(`✅ Home navigation works`)
114
+ })
115
+ })
116
+
117
+ describe('NAV-003: Back to Dashboard link works', () => {
118
+ it('should navigate to Dashboard when clicking exit link', () => {
119
+ allure.severity('high')
120
+
121
+ // 1. Start at /devtools home
122
+ devtools.visitHome()
123
+
124
+ // 2. Click "Exit to Dashboard" link
125
+ devtools.clickExitToDashboard()
126
+
127
+ // 3. Verify navigation to /dashboard
128
+ cy.url().should('include', '/dashboard')
129
+ cy.url().should('not.include', '/devtools')
130
+ cy.get('[data-cy="dashboard-container"]').should('be.visible')
131
+
132
+ cy.log(`✅ Exit to Dashboard works`)
133
+ })
134
+ })
135
+
136
+ describe('NAV-004: Go to Admin link works', () => {
137
+ it('should navigate to Admin when clicking exit link', () => {
138
+ allure.severity('high')
139
+
140
+ // 1. Start at /devtools home
141
+ devtools.visitHome()
142
+
143
+ // 2. Click "Go to Admin" link
144
+ devtools.clickGoToAdmin()
145
+
146
+ // 3. Verify navigation to /admin
147
+ devtools.assertOnAdmin()
148
+ cy.get('[data-cy="admin-container"]').should('be.visible')
149
+
150
+ cy.log(`✅ Go to Admin works`)
151
+ })
152
+ })
153
+
154
+ after(() => {
155
+ cy.log('✅ DevTools navigation tests completed')
156
+ })
157
+ })