@nextsparkjs/theme-default 0.1.0-beta.1 → 0.1.0-beta.101

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 (330) hide show
  1. package/LICENSE +21 -0
  2. package/api/ai/chat/stream/route.ts +4 -1
  3. package/api/ai/orchestrator/route.ts +10 -3
  4. package/api/ai/single-agent/route.ts +10 -3
  5. package/api/ai/usage/route.ts +4 -1
  6. package/blocks/benefits/component.tsx +4 -4
  7. package/blocks/cta-section/component.tsx +4 -4
  8. package/blocks/faq-accordion/component.tsx +2 -2
  9. package/blocks/features-grid/component.tsx +5 -5
  10. package/blocks/hero/component.tsx +2 -2
  11. package/blocks/hero/fields.ts +1 -1
  12. package/blocks/hero-with-form/component.tsx +7 -7
  13. package/blocks/hero-with-form/fields.ts +1 -1
  14. package/blocks/jumbotron/component.tsx +7 -7
  15. package/blocks/jumbotron/fields.ts +1 -1
  16. package/blocks/logo-cloud/component.tsx +6 -6
  17. package/blocks/logo-cloud/fields.ts +1 -1
  18. package/blocks/post-content/component.tsx +2 -2
  19. package/blocks/pricing-table/component.tsx +5 -5
  20. package/blocks/split-content/component.tsx +5 -5
  21. package/blocks/split-content/fields.ts +1 -1
  22. package/blocks/stats-counter/component.tsx +9 -9
  23. package/blocks/testimonials/component.tsx +4 -4
  24. package/blocks/testimonials/fields.ts +1 -1
  25. package/blocks/text-content/component.tsx +12 -10
  26. package/blocks/timeline/component.tsx +12 -12
  27. package/blocks/video-hero/component.tsx +7 -7
  28. package/blocks/video-hero/fields.ts +1 -1
  29. package/components/ai-chat/ChatPanel.tsx +7 -7
  30. package/components/ai-chat/Message.tsx +2 -2
  31. package/components/ai-chat/MessageInput.tsx +3 -3
  32. package/components/ai-chat/MessageList.tsx +3 -3
  33. package/components/ai-chat/TypingIndicator.tsx +2 -2
  34. package/config/app.config.ts +75 -62
  35. package/config/dashboard.config.ts +14 -0
  36. package/config/features.config.ts +10 -0
  37. package/config/permissions.config.ts +26 -1
  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/entities/customers/api/docs.md +107 -0
  48. package/entities/customers/api/presets.ts +80 -0
  49. package/entities/pages/api/docs.md +114 -0
  50. package/entities/pages/api/presets.ts +72 -0
  51. package/entities/posts/api/docs.md +120 -0
  52. package/entities/posts/api/presets.ts +74 -0
  53. package/entities/tasks/api/docs.md +126 -0
  54. package/entities/tasks/api/presets.ts +84 -0
  55. package/lib/selectors.ts +7 -4
  56. package/messages/de/admin.json +45 -0
  57. package/messages/en/admin.json +56 -0
  58. package/messages/en/navigation.json +2 -1
  59. package/messages/es/admin.json +56 -0
  60. package/messages/es/navigation.json +2 -1
  61. package/messages/fr/admin.json +45 -0
  62. package/messages/it/admin.json +45 -0
  63. package/messages/pt/admin.json +45 -0
  64. package/migrations/090_demo_users_teams.sql +11 -11
  65. package/migrations/091_greek_teams_billing.sql +15 -15
  66. package/migrations/093_pages_sample_data.sql +7 -7
  67. package/migrations/098_patterns_sample_data.sql +234 -0
  68. package/package.json +8 -3
  69. package/styles/globals.css +42 -0
  70. package/templates/(public)/blog/[slug]/page.tsx +1 -1
  71. package/templates/(public)/page.tsx +1 -1
  72. package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
  73. package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
  74. package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
  75. package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
  76. package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
  77. package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
  78. package/tests/cypress/e2e/_utils/docs/README.md +215 -0
  79. package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
  80. package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
  81. package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
  82. package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
  83. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
  84. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
  85. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  86. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
  87. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
  88. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
  89. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
  90. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
  91. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
  92. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
  93. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
  94. package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
  95. package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
  96. package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
  97. package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
  98. package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
  99. package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
  100. package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
  101. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
  102. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
  103. package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
  104. package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
  105. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
  106. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
  107. package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
  108. package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
  109. package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
  110. package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
  111. package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
  112. package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
  113. package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
  114. package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
  115. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
  116. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
  117. package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
  118. package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
  119. package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
  120. package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
  121. package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
  122. package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
  123. package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
  124. package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
  125. package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
  126. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
  127. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
  128. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  129. package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
  130. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  131. package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
  132. package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
  133. package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
  134. package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
  135. package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
  136. package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
  137. package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
  138. package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
  139. package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
  140. package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
  141. package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
  142. package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
  143. package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
  144. package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
  145. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
  146. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
  147. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  148. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  149. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
  150. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
  151. package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
  152. package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
  153. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  154. package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
  155. package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
  156. package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
  157. package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
  158. package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
  159. package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
  160. package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
  161. package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
  162. package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
  163. package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
  164. package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
  165. package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
  166. package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
  167. package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
  168. package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
  169. package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
  170. package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
  171. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
  172. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
  173. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
  174. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
  175. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
  176. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
  177. package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
  178. package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
  179. package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
  180. package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
  181. package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
  182. package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
  183. package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
  184. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
  185. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
  186. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
  187. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
  188. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
  189. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
  190. package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
  191. package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
  192. package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
  193. package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
  194. package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
  195. package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
  196. package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
  197. package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
  198. package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
  199. package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
  200. package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
  201. package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
  202. package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
  203. package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
  204. package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
  205. package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
  206. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
  207. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
  208. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  209. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
  210. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
  211. package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
  212. package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
  213. package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
  214. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  215. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  216. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  217. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  218. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  219. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  220. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  221. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  222. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  223. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  224. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  225. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  226. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  227. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  228. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  229. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  230. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  231. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  232. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  233. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  234. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  235. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  236. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  237. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  238. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  239. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  240. package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
  241. package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
  242. package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
  243. package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
  244. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
  245. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
  246. package/tests/cypress/fixtures/blocks.json +218 -0
  247. package/tests/cypress/fixtures/entities.json +87 -0
  248. package/tests/cypress/fixtures/page-builder.json +21 -0
  249. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  250. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  251. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  252. package/tests/cypress/src/components/EntityForm.ts +375 -0
  253. package/tests/cypress/src/components/EntityList.ts +389 -0
  254. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  255. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  256. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  257. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  258. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  259. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  260. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  261. package/tests/cypress/src/components/index.ts +21 -0
  262. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  263. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  264. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  265. package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
  266. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  267. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  268. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  269. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  270. package/tests/cypress/src/controllers/index.js +25 -0
  271. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  272. package/tests/cypress/src/core/BasePOM.ts +33 -0
  273. package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
  274. package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
  275. package/tests/cypress/src/core/index.ts +14 -0
  276. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  277. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  278. package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
  279. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  280. package/tests/cypress/src/entities/TasksPOM.ts +246 -0
  281. package/tests/cypress/src/entities/index.ts +16 -0
  282. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  283. package/tests/cypress/src/features/DashboardPOM.ts +271 -0
  284. package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
  285. package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
  286. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  287. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  288. package/tests/cypress/src/features/SettingsPOM.ts +707 -0
  289. package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
  290. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  291. package/tests/cypress/src/features/index.ts +28 -0
  292. package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
  293. package/tests/cypress/src/index.ts +101 -0
  294. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  295. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  296. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  297. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  298. package/tests/cypress/src/pages/index.js +5 -0
  299. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  300. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  301. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  302. package/tests/cypress/src/pages/public/index.js +6 -0
  303. package/tests/cypress/src/selectors.ts +46 -0
  304. package/tests/cypress/src/session-helpers.ts +518 -0
  305. package/tests/cypress/support/doc-commands.ts +260 -0
  306. package/tests/cypress/support/e2e.ts +90 -0
  307. package/tests/cypress.config.ts +178 -0
  308. package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
  309. package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
  310. package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
  311. package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
  312. package/tests/jest/__mocks__/jose.js +22 -0
  313. package/tests/jest/__mocks__/next/image.js +15 -0
  314. package/tests/jest/__mocks__/next-server.js +56 -0
  315. package/tests/jest/components/post-header.test.tsx +377 -0
  316. package/tests/jest/jest.config.cjs +154 -0
  317. package/tests/jest/langchain/COVERAGE.md +372 -0
  318. package/tests/jest/langchain/guardrails.test.ts +465 -0
  319. package/tests/jest/langchain/streaming.test.ts +370 -0
  320. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  321. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  322. package/tests/jest/langchain/tracer.test.ts +823 -0
  323. package/tests/jest/services/tasks.service.test.ts +707 -0
  324. package/tests/jest/setup.ts +170 -0
  325. package/tests/jest/tsconfig.jest.json +6 -0
  326. package/tests/jest/validation/categories.test.ts +429 -0
  327. package/tests/jest/validation/posts.test.ts +546 -0
  328. package/tests/tsconfig.json +21 -0
  329. /package/docs/{02-features → public/02-features}/01-components.md +0 -0
  330. /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
@@ -0,0 +1,306 @@
1
+ ---
2
+ feature: DevTools UI Selectors Validation
3
+ priority: medium
4
+ tags: [selectors, devtools, developer, ui-validation]
5
+ grepTags: [ui-selectors, devtools, SEL_DEVT_001, SEL_DEVT_002, SEL_DEVT_003, SEL_DEVT_004, SEL_DEVT_005, SEL_DEVT_006]
6
+ coverage: 6
7
+ ---
8
+
9
+ # DevTools UI Selectors Validation
10
+
11
+ > Validates that DevTools (devzone) component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality.
12
+
13
+ **IMPORTANT:** DevTools is only accessible to users with 'developer' app role. All tests use `loginAsDefaultDeveloper()`.
14
+
15
+ ## @test SEL_DEVT_001: Navigation Structure
16
+
17
+ ### Metadata
18
+ - **Priority:** High
19
+ - **Type:** Selector Validation
20
+ - **Tags:** devtools, navigation, sidebar
21
+ - **Grep:** `@ui-selectors` `@SEL_DEVT_001`
22
+ - **Status:** Active - 8 tests
23
+
24
+ ```gherkin:en
25
+ Scenario: DevTools navigation has complete structure
26
+
27
+ Given I am logged in as a developer user
28
+ And I navigate to /devtools
29
+ Then I should find the sidebar container
30
+ And I should find the sidebar collapse toggle
31
+ And I should find the nav home item
32
+ And I should find the nav style gallery item
33
+ And I should find the nav test cases item
34
+ And I should find the nav config item
35
+ And I should find the exit to dashboard link
36
+ And I should find the go to admin link
37
+ ```
38
+
39
+ ```gherkin:es
40
+ Scenario: Navegacion de DevTools tiene estructura completa
41
+
42
+ Given estoy logueado como usuario developer
43
+ And navego a /devtools
44
+ Then deberia encontrar el contenedor del sidebar
45
+ And deberia encontrar el toggle de colapso del sidebar
46
+ And deberia encontrar el item de navegacion home
47
+ And deberia encontrar el item de navegacion style gallery
48
+ And deberia encontrar el item de navegacion test cases
49
+ And deberia encontrar el item de navegacion config
50
+ And deberia encontrar el link de salir al dashboard
51
+ And deberia encontrar el link de ir a admin
52
+ ```
53
+
54
+ ### Expected Results
55
+ - `devtools-sidebar` selector exists
56
+ - `devtools-sidebar-collapse` selector exists
57
+ - `devtools-nav-home` selector exists
58
+ - `devtools-nav-style` selector exists
59
+ - `devtools-nav-tests` selector exists
60
+ - `devtools-nav-config` selector exists
61
+ - `devtools-exit-dashboard` selector exists
62
+ - `devtools-go-admin` selector exists
63
+
64
+ ---
65
+
66
+ ## @test SEL_DEVT_002: Home Page
67
+
68
+ ### Metadata
69
+ - **Priority:** Medium
70
+ - **Type:** Selector Validation
71
+ - **Tags:** devtools, home, quicklinks
72
+ - **Grep:** `@ui-selectors` `@SEL_DEVT_002`
73
+ - **Status:** Active - 4 tests
74
+
75
+ ```gherkin:en
76
+ Scenario: DevTools home page has quick links
77
+
78
+ Given I am logged in as a developer user
79
+ And I navigate to /devtools
80
+ Then I should find the home page container
81
+ And I should find the style gallery quick link
82
+ And I should find the tests quick link
83
+ And I should find the config quick link
84
+ ```
85
+
86
+ ```gherkin:es
87
+ Scenario: Pagina home de DevTools tiene links rapidos
88
+
89
+ Given estoy logueado como usuario developer
90
+ And navego a /devtools
91
+ Then deberia encontrar el contenedor de la pagina home
92
+ And deberia encontrar el link rapido a style gallery
93
+ And deberia encontrar el link rapido a tests
94
+ And deberia encontrar el link rapido a config
95
+ ```
96
+
97
+ ### Expected Results
98
+ - `devtools-home-page` selector exists
99
+ - `devtools-home-style-link` selector exists
100
+ - `devtools-home-tests-link` selector exists
101
+ - `devtools-home-config-link` selector exists
102
+
103
+ ---
104
+
105
+ ## @test SEL_DEVT_003: Style Gallery Page
106
+
107
+ ### Metadata
108
+ - **Priority:** Medium
109
+ - **Type:** Selector Validation
110
+ - **Tags:** devtools, style, gallery, tabs
111
+ - **Grep:** `@ui-selectors` `@SEL_DEVT_003`
112
+ - **Status:** Active - 8 tests
113
+
114
+ ```gherkin:en
115
+ Scenario: DevTools style gallery has all tabs and content
116
+
117
+ Given I am logged in as a developer user
118
+ And I navigate to /devtools/style
119
+ Then I should find the style page container
120
+ And I should find the components tab
121
+ And I should find the field types tab
122
+ And I should find the theme tab
123
+ And I should find the guidelines tab
124
+ And I should find the component gallery (default tab)
125
+ When I click the field types tab
126
+ Then I should find the field types content
127
+ When I click the theme tab
128
+ Then I should find the theme preview
129
+ ```
130
+
131
+ ```gherkin:es
132
+ Scenario: Style gallery de DevTools tiene todas las tabs y contenido
133
+
134
+ Given estoy logueado como usuario developer
135
+ And navego a /devtools/style
136
+ Then deberia encontrar el contenedor de la pagina style
137
+ And deberia encontrar la tab de components
138
+ And deberia encontrar la tab de field types
139
+ And deberia encontrar la tab de theme
140
+ And deberia encontrar la tab de guidelines
141
+ And deberia encontrar la galeria de componentes (tab por defecto)
142
+ When hago click en la tab de field types
143
+ Then deberia encontrar el contenido de field types
144
+ When hago click en la tab de theme
145
+ Then deberia encontrar el preview del tema
146
+ ```
147
+
148
+ ### Expected Results
149
+ - `devtools-style-page` selector exists
150
+ - `devtools-style-tab-components` selector exists
151
+ - `devtools-style-tab-fieldtypes` selector exists
152
+ - `devtools-style-tab-theme` selector exists
153
+ - `devtools-style-tab-guidelines` selector exists
154
+ - `devtools-style-component-gallery` selector exists
155
+ - `devtools-style-fieldtypes` selector exists (when tab clicked)
156
+ - `devtools-style-theme-preview` selector exists (when tab clicked)
157
+
158
+ ---
159
+
160
+ ## @test SEL_DEVT_004: Config Viewer Page
161
+
162
+ ### Metadata
163
+ - **Priority:** Medium
164
+ - **Type:** Selector Validation
165
+ - **Tags:** devtools, config, viewer, tabs
166
+ - **Grep:** `@ui-selectors` `@SEL_DEVT_004`
167
+ - **Status:** Active - 8 tests
168
+
169
+ ```gherkin:en
170
+ Scenario: DevTools config viewer has all tabs and actions
171
+
172
+ Given I am logged in as a developer user
173
+ And I navigate to /devtools/config
174
+ Then I should find the config page container
175
+ And I should find the config viewer container
176
+ And I should find the theme tab
177
+ And I should find the entities tab
178
+ And I should find the theme content (default tab)
179
+ And I should find the copy theme button
180
+ When I click the entities tab
181
+ Then I should find the entities content
182
+ And I should find the copy entities button
183
+ ```
184
+
185
+ ```gherkin:es
186
+ Scenario: Config viewer de DevTools tiene todas las tabs y acciones
187
+
188
+ Given estoy logueado como usuario developer
189
+ And navego a /devtools/config
190
+ Then deberia encontrar el contenedor de la pagina config
191
+ And deberia encontrar el contenedor del config viewer
192
+ And deberia encontrar la tab de theme
193
+ And deberia encontrar la tab de entities
194
+ And deberia encontrar el contenido de theme (tab por defecto)
195
+ And deberia encontrar el boton de copiar theme
196
+ When hago click en la tab de entities
197
+ Then deberia encontrar el contenido de entities
198
+ And deberia encontrar el boton de copiar entities
199
+ ```
200
+
201
+ ### Expected Results
202
+ - `devtools-config-page` selector exists
203
+ - `devtools-config-viewer` selector exists
204
+ - `devtools-config-tab-theme` selector exists
205
+ - `devtools-config-tab-entities` selector exists
206
+ - `devtools-config-theme-content` selector exists
207
+ - `devtools-config-copy-theme` selector exists
208
+ - `devtools-config-entities-content` selector exists (when tab clicked)
209
+ - `devtools-config-copy-entities` selector exists (when tab clicked)
210
+
211
+ ---
212
+
213
+ ## @test SEL_DEVT_005: Test Cases Page
214
+
215
+ ### Metadata
216
+ - **Priority:** Medium
217
+ - **Type:** Selector Validation
218
+ - **Tags:** devtools, tests, viewer
219
+ - **Grep:** `@ui-selectors` `@SEL_DEVT_005`
220
+ - **Status:** Active - 3 tests
221
+
222
+ ```gherkin:en
223
+ Scenario: DevTools test cases page has viewer components
224
+
225
+ Given I am logged in as a developer user
226
+ And I navigate to /devtools/tests
227
+ Then I should find the tests page container
228
+ And I should find the tests viewer container
229
+ And I should find the tests tree
230
+ ```
231
+
232
+ ```gherkin:es
233
+ Scenario: Pagina test cases de DevTools tiene componentes del viewer
234
+
235
+ Given estoy logueado como usuario developer
236
+ And navego a /devtools/tests
237
+ Then deberia encontrar el contenedor de la pagina tests
238
+ And deberia encontrar el contenedor del tests viewer
239
+ And deberia encontrar el arbol de tests
240
+ ```
241
+
242
+ ### Expected Results
243
+ - `devtools-tests-page` selector exists
244
+ - `devtools-tests-viewer` selector exists
245
+ - `devtools-tests-tree` selector exists
246
+
247
+ ### Notes
248
+ Conditional states (loading, empty, error) are not tested in selector validation.
249
+
250
+ ---
251
+
252
+ ## @test SEL_DEVT_006: Test Coverage Dashboard
253
+
254
+ ### Metadata
255
+ - **Priority:** Medium
256
+ - **Type:** Selector Validation
257
+ - **Tags:** devtools, tests, dashboard, coverage
258
+ - **Grep:** `@ui-selectors` `@SEL_DEVT_006`
259
+ - **Status:** Active - 9 tests
260
+
261
+ ```gherkin:en
262
+ Scenario: DevTools test coverage dashboard has all components
263
+
264
+ Given I am logged in as a developer user
265
+ And I navigate to /devtools/tests
266
+ Then I should find the dashboard container
267
+ And I should find the dashboard stats container
268
+ And I should find the features stat card
269
+ And I should find the flows stat card
270
+ And I should find the files stat card
271
+ And I should find the tags stat card
272
+ And I should find the coverage gaps container
273
+ When I select a test file from the tree
274
+ Then I should find the dashboard button in sidebar
275
+ When I click the dashboard button
276
+ Then I should see the dashboard again
277
+ ```
278
+
279
+ ```gherkin:es
280
+ Scenario: Dashboard de cobertura de DevTools tiene todos los componentes
281
+
282
+ Given estoy logueado como usuario developer
283
+ And navego a /devtools/tests
284
+ Then deberia encontrar el contenedor del dashboard
285
+ And deberia encontrar el contenedor de estadisticas
286
+ And deberia encontrar la tarjeta de estadisticas de features
287
+ And deberia encontrar la tarjeta de estadisticas de flows
288
+ And deberia encontrar la tarjeta de estadisticas de files
289
+ And deberia encontrar la tarjeta de estadisticas de tags
290
+ And deberia encontrar el contenedor de gaps de cobertura
291
+ When selecciono un archivo de test del arbol
292
+ Then deberia encontrar el boton de dashboard en el sidebar
293
+ When hago click en el boton de dashboard
294
+ Then deberia ver el dashboard nuevamente
295
+ ```
296
+
297
+ ### Expected Results
298
+ - `devtools-tests-dashboard` selector exists (when no file selected)
299
+ - `devtools-tests-dashboard-stats` selector exists
300
+ - `devtools-tests-dashboard-stat-features` selector exists
301
+ - `devtools-tests-dashboard-stat-flows` selector exists
302
+ - `devtools-tests-dashboard-stat-files` selector exists
303
+ - `devtools-tests-dashboard-stat-tags` selector exists
304
+ - `devtools-tests-dashboard-gaps` selector exists
305
+ - `devtools-tests-dashboard-button` selector exists (when file selected)
306
+ - Dashboard button returns to dashboard view
@@ -0,0 +1,273 @@
1
+ /**
2
+ * UI Selectors Validation: DevTools (DevTools)
3
+ *
4
+ * This test validates that devtools selectors exist in the DOM.
5
+ * This is a lightweight test that ONLY checks selector presence, not functionality.
6
+ *
7
+ * Purpose:
8
+ * - Validate DevtoolsPOM selectors work correctly
9
+ * - Ensure all dev.* selectors are implemented
10
+ * - Run as Phase 12 sub-gate before functional tests
11
+ *
12
+ * Scope:
13
+ * - Navigate to /devtools pages (requires developer role)
14
+ * - Assert elements exist in DOM (no form submissions)
15
+ * - Fast execution (< 30 seconds per describe block)
16
+ *
17
+ * Test IDs:
18
+ * - SEL_DEVT_001: Navigation Structure
19
+ * - SEL_DEVT_002: Home Page
20
+ * - SEL_DEVT_003: Style Gallery Page
21
+ * - SEL_DEVT_004: Config Viewer Page
22
+ * - SEL_DEVT_005: Test Cases Page
23
+ *
24
+ * IMPORTANT: DevTools is only accessible to users with 'developer' app role.
25
+ */
26
+
27
+ import { DevtoolsPOM } from '../../../src/features/DevtoolsPOM'
28
+ import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
29
+
30
+ describe('DevTools Selectors Validation', { tags: ['@ui-selectors', '@devtools'] }, () => {
31
+ const dev = DevtoolsPOM.create()
32
+
33
+ beforeEach(() => {
34
+ loginAsDefaultDeveloper()
35
+ })
36
+
37
+ // ============================================
38
+ // SEL_DEVT_001: NAVIGATION STRUCTURE (8 selectors)
39
+ // ============================================
40
+ describe('SEL_DEVT_001: Navigation Structure', { tags: '@SEL_DEVT_001' }, () => {
41
+ beforeEach(() => {
42
+ cy.visit('/devtools', { timeout: 60000, failOnStatusCode: false })
43
+ cy.url().should('include', '/devtools')
44
+ })
45
+
46
+ it('should find sidebar container', () => {
47
+ cy.get(dev.selectors.sidebar).should('exist')
48
+ })
49
+
50
+ it('should find sidebar collapse toggle', () => {
51
+ cy.get(dev.selectors.sidebarCollapseToggle).should('exist')
52
+ })
53
+
54
+ it('should find nav home item', () => {
55
+ cy.get(dev.selectors.navHome).should('exist')
56
+ })
57
+
58
+ it('should find nav style gallery item', () => {
59
+ cy.get(dev.selectors.navStyleGallery).should('exist')
60
+ })
61
+
62
+ it('should find nav test cases item', () => {
63
+ cy.get(dev.selectors.navTestCases).should('exist')
64
+ })
65
+
66
+ it('should find nav config item', () => {
67
+ cy.get(dev.selectors.navConfig).should('exist')
68
+ })
69
+
70
+ it('should find exit to dashboard link', () => {
71
+ cy.get(dev.selectors.exitToDashboard).should('exist')
72
+ })
73
+
74
+ it('should find go to admin link', () => {
75
+ cy.get(dev.selectors.goToAdmin).should('exist')
76
+ })
77
+ })
78
+
79
+ // ============================================
80
+ // SEL_DEVT_002: HOME PAGE (4 selectors)
81
+ // ============================================
82
+ describe('SEL_DEVT_002: Home Page', { tags: '@SEL_DEVT_002' }, () => {
83
+ beforeEach(() => {
84
+ cy.visit('/devtools', { timeout: 60000, failOnStatusCode: false })
85
+ cy.url().should('include', '/devtools')
86
+ })
87
+
88
+ it('should find home page container', () => {
89
+ cy.get(dev.selectors.homePage).should('exist')
90
+ })
91
+
92
+ it('should find style gallery quick link', () => {
93
+ cy.get(dev.selectors.homeStyleLink).should('exist')
94
+ })
95
+
96
+ it('should find tests quick link', () => {
97
+ cy.get(dev.selectors.homeTestsLink).should('exist')
98
+ })
99
+
100
+ it('should find config quick link', () => {
101
+ cy.get(dev.selectors.homeConfigLink).should('exist')
102
+ })
103
+ })
104
+
105
+ // ============================================
106
+ // SEL_DEVT_003: STYLE GALLERY PAGE (8 selectors)
107
+ // ============================================
108
+ describe('SEL_DEVT_003: Style Gallery Page', { tags: '@SEL_DEVT_003' }, () => {
109
+ beforeEach(() => {
110
+ cy.visit('/devtools/style', { timeout: 60000, failOnStatusCode: false })
111
+ cy.url().should('include', '/devtools/style')
112
+ })
113
+
114
+ it('should find style page container', () => {
115
+ cy.get(dev.selectors.stylePage).should('exist')
116
+ })
117
+
118
+ it('should find components tab', () => {
119
+ cy.get(dev.selectors.styleTabComponents).should('exist')
120
+ })
121
+
122
+ it('should find field types tab', () => {
123
+ cy.get(dev.selectors.styleTabFieldTypes).should('exist')
124
+ })
125
+
126
+ it('should find theme tab', () => {
127
+ cy.get(dev.selectors.styleTabTheme).should('exist')
128
+ })
129
+
130
+ it('should find guidelines tab', () => {
131
+ cy.get(dev.selectors.styleTabGuidelines).should('exist')
132
+ })
133
+
134
+ it('should find component gallery (default tab content)', () => {
135
+ cy.get(dev.selectors.styleComponentGallery).should('exist')
136
+ })
137
+
138
+ it('should find field types content when tab clicked', () => {
139
+ cy.get(dev.selectors.styleTabFieldTypes).click()
140
+ cy.get(dev.selectors.styleFieldTypes).should('exist')
141
+ })
142
+
143
+ it('should find theme preview when tab clicked', () => {
144
+ cy.get(dev.selectors.styleTabTheme).click()
145
+ cy.get(dev.selectors.styleThemePreview).should('exist')
146
+ })
147
+ })
148
+
149
+ // ============================================
150
+ // SEL_DEVT_004: CONFIG VIEWER PAGE (8 selectors)
151
+ // ============================================
152
+ describe('SEL_DEVT_004: Config Viewer Page', { tags: '@SEL_DEVT_004' }, () => {
153
+ beforeEach(() => {
154
+ cy.visit('/devtools/config', { timeout: 60000, failOnStatusCode: false })
155
+ cy.url().should('include', '/devtools/config')
156
+ })
157
+
158
+ it('should find config page container', () => {
159
+ cy.get(dev.selectors.configPage).should('exist')
160
+ })
161
+
162
+ it('should find config viewer container', () => {
163
+ cy.get(dev.selectors.configViewer).should('exist')
164
+ })
165
+
166
+ it('should find theme tab', () => {
167
+ cy.get(dev.selectors.configTabTheme).should('exist')
168
+ })
169
+
170
+ it('should find entities tab', () => {
171
+ cy.get(dev.selectors.configTabEntities).should('exist')
172
+ })
173
+
174
+ it('should find theme content (default tab)', () => {
175
+ cy.get(dev.selectors.configThemeContent).should('exist')
176
+ })
177
+
178
+ it('should find entities content when tab clicked', () => {
179
+ cy.get(dev.selectors.configTabEntities).click()
180
+ cy.get(dev.selectors.configEntitiesContent).should('exist')
181
+ })
182
+
183
+ it('should find copy theme button', () => {
184
+ cy.get(dev.selectors.configCopyTheme).should('exist')
185
+ })
186
+
187
+ it('should find copy entities button when on entities tab', () => {
188
+ cy.get(dev.selectors.configTabEntities).click()
189
+ // Wait for entities to load before checking button
190
+ cy.get(dev.selectors.configEntitiesContent, { timeout: 10000 }).should('exist')
191
+ cy.get(dev.selectors.configCopyEntities).should('exist')
192
+ })
193
+ })
194
+
195
+ // ============================================
196
+ // SEL_DEVT_005: TEST CASES PAGE (3 selectors)
197
+ // NOTE: Tests page components may not implement all data-cy selectors
198
+ // ============================================
199
+ describe('SEL_DEVT_005: Test Cases Page', { tags: '@SEL_DEVT_005' }, () => {
200
+ beforeEach(() => {
201
+ cy.visit('/devtools/tests', { timeout: 60000, failOnStatusCode: false })
202
+ cy.url().should('include', '/devtools/tests')
203
+ })
204
+
205
+ it('should find tests page container', () => {
206
+ cy.get(dev.selectors.testsPage).should('exist')
207
+ })
208
+
209
+ it('should find tests viewer container', () => {
210
+ cy.get(dev.selectors.testsViewer).should('exist')
211
+ })
212
+
213
+ it('should find tests tree', () => {
214
+ cy.get(dev.selectors.testsTree).should('exist')
215
+ })
216
+ })
217
+
218
+ // ============================================
219
+ // SEL_DEVT_006: TEST COVERAGE DASHBOARD (9 selectors)
220
+ // ============================================
221
+ describe('SEL_DEVT_006: Test Coverage Dashboard', { tags: '@SEL_DEVT_006' }, () => {
222
+ beforeEach(() => {
223
+ cy.visit('/devtools/tests', { timeout: 60000, failOnStatusCode: false })
224
+ cy.url().should('include', '/devtools/tests')
225
+ })
226
+
227
+ it('should find dashboard container (no file selected)', () => {
228
+ cy.get(dev.selectors.testsDashboard).should('exist')
229
+ })
230
+
231
+ it('should find dashboard stats container', () => {
232
+ cy.get(dev.selectors.testsDashboardStats).should('exist')
233
+ })
234
+
235
+ it('should find features stat card', () => {
236
+ cy.get(dev.selectors.testsDashboardStatFeatures).should('exist')
237
+ })
238
+
239
+ it('should find flows stat card', () => {
240
+ cy.get(dev.selectors.testsDashboardStatFlows).should('exist')
241
+ })
242
+
243
+ it('should find files stat card', () => {
244
+ cy.get(dev.selectors.testsDashboardStatFiles).should('exist')
245
+ })
246
+
247
+ it('should find tags stat card', () => {
248
+ cy.get(dev.selectors.testsDashboardStatTags).should('exist')
249
+ })
250
+
251
+ it('should find coverage gaps container', () => {
252
+ cy.get(dev.selectors.testsDashboardGaps).should('exist')
253
+ })
254
+
255
+ it('should find dashboard button when file selected', () => {
256
+ // First expand a folder to reveal files
257
+ cy.get(dev.selectors.testsTree).find('[data-cy*="folder"]').first().click()
258
+ // Then select a file
259
+ cy.get(dev.selectors.testsTree).find('[data-cy*="file"]').first().click()
260
+ cy.get(dev.selectors.testsDashboardButton).should('exist')
261
+ })
262
+
263
+ it('should return to dashboard when button clicked', () => {
264
+ // Expand folder and select a file
265
+ cy.get(dev.selectors.testsTree).find('[data-cy*="folder"]').first().click()
266
+ cy.get(dev.selectors.testsTree).find('[data-cy*="file"]').first().click()
267
+ // Click dashboard button
268
+ cy.get(dev.selectors.testsDashboardButton).click()
269
+ // Dashboard should be visible again
270
+ cy.get(dev.selectors.testsDashboard).should('exist')
271
+ })
272
+ })
273
+ })
@@ -0,0 +1,115 @@
1
+ ---
2
+ feature: Global Search UI Selectors Validation
3
+ priority: medium
4
+ tags: [selectors, search, modal, ui-validation]
5
+ grepTags: [ui-selectors, search, SEL_GSRCH_001, SEL_GSRCH_002, SEL_GSRCH_003]
6
+ coverage: 3
7
+ ---
8
+
9
+ # Global Search UI Selectors Validation
10
+
11
+ > Validates that global search component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Most selectors require the search modal to be open.
12
+
13
+ ## @test SEL_GSRCH_001: Search Trigger
14
+
15
+ ### Metadata
16
+ - **Priority:** Medium
17
+ - **Type:** Selector Validation
18
+ - **Tags:** search, trigger, button
19
+ - **Grep:** `@ui-selectors` `@SEL_GSRCH_001`
20
+ - **Status:** Skipped - selector not implemented
21
+
22
+ ```gherkin:en
23
+ Scenario: Search trigger button is accessible
24
+
25
+ Given I am logged in as a valid user
26
+ And I navigate to the dashboard
27
+ Then I should find the search trigger button
28
+ ```
29
+
30
+ ```gherkin:es
31
+ Scenario: Boton de trigger de busqueda es accesible
32
+
33
+ Given estoy logueado como usuario valido
34
+ And navego al dashboard
35
+ Then deberia encontrar el boton de trigger de busqueda
36
+ ```
37
+
38
+ ### Expected Results
39
+ - `global-search-trigger` selector exists
40
+
41
+ ---
42
+
43
+ ## @test SEL_GSRCH_002: Search Modal (when open)
44
+
45
+ ### Metadata
46
+ - **Priority:** High
47
+ - **Type:** Selector Validation
48
+ - **Tags:** search, modal, input
49
+ - **Grep:** `@ui-selectors` `@SEL_GSRCH_002`
50
+ - **Status:** Partial - 1 passing, 3 skipped
51
+
52
+ ```gherkin:en
53
+ Scenario: Search modal has required components when opened
54
+
55
+ Given I am logged in as a valid user
56
+ And I navigate to the dashboard
57
+ When I press Cmd+K to open the search modal
58
+ Then I should find the search modal container
59
+ And I should find the search input
60
+ And I should find the search results container (when query entered)
61
+ And I should find search result items (when results available)
62
+ ```
63
+
64
+ ```gherkin:es
65
+ Scenario: Modal de busqueda tiene componentes requeridos cuando esta abierto
66
+
67
+ Given estoy logueado como usuario valido
68
+ And navego al dashboard
69
+ When presiono Cmd+K para abrir el modal de busqueda
70
+ Then deberia encontrar el contenedor del modal de busqueda
71
+ And deberia encontrar el input de busqueda
72
+ And deberia encontrar el contenedor de resultados (cuando hay query)
73
+ And deberia encontrar items de resultados (cuando hay resultados)
74
+ ```
75
+
76
+ ### Expected Results
77
+ - `global-search-modal` skipped - selector not implemented
78
+ - `global-search-input` selector exists (WORKING)
79
+ - `global-search-results` skipped - requires search query
80
+ - `global-search-result` skipped - requires results
81
+
82
+ ---
83
+
84
+ ## @test SEL_GSRCH_003: Search Modal (opened via click)
85
+
86
+ ### Metadata
87
+ - **Priority:** Low
88
+ - **Type:** Selector Validation
89
+ - **Tags:** search, modal, click
90
+ - **Grep:** `@ui-selectors` `@SEL_GSRCH_003`
91
+ - **Status:** Skipped - trigger selector not implemented
92
+
93
+ ```gherkin:en
94
+ Scenario: Search modal opens via click on trigger
95
+
96
+ Given I am logged in as a valid user
97
+ And I navigate to the dashboard
98
+ When I click on the search trigger button
99
+ Then the search modal should open
100
+ And I should find the search input
101
+ ```
102
+
103
+ ```gherkin:es
104
+ Scenario: Modal de busqueda se abre via click en trigger
105
+
106
+ Given estoy logueado como usuario valido
107
+ And navego al dashboard
108
+ When hago click en el boton de trigger de busqueda
109
+ Then el modal de busqueda deberia abrirse
110
+ And deberia encontrar el input de busqueda
111
+ ```
112
+
113
+ ### Expected Results
114
+ - Search modal opens when trigger is clicked
115
+ - `global-search-input` selector exists inside modal