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

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 (325) 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 +54 -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/093_pages_sample_data.sql +7 -7
  65. package/migrations/098_patterns_sample_data.sql +234 -0
  66. package/package.json +8 -3
  67. package/styles/globals.css +42 -0
  68. package/templates/(public)/blog/[slug]/page.tsx +1 -1
  69. package/templates/(public)/page.tsx +1 -1
  70. package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
  71. package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
  72. package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
  73. package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
  74. package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
  75. package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
  76. package/tests/cypress/e2e/_utils/docs/README.md +215 -0
  77. package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
  78. package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
  79. package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
  80. package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
  81. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
  82. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
  83. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  84. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
  85. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
  86. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
  87. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
  88. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
  89. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
  90. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
  91. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
  92. package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
  93. package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
  94. package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
  95. package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
  96. package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
  97. package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
  98. package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
  99. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
  100. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
  101. package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
  102. package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
  103. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
  104. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
  105. package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
  106. package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
  107. package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
  108. package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
  109. package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
  110. package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
  111. package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
  112. package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
  113. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
  114. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
  115. package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
  116. package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
  117. package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
  118. package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
  119. package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
  120. package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
  121. package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
  122. package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
  123. package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
  124. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
  125. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
  126. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  127. package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
  128. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  129. package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
  130. package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
  131. package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
  132. package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
  133. package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
  134. package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
  135. package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
  136. package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
  137. package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
  138. package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
  139. package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
  140. package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
  141. package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
  142. package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
  143. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
  144. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
  145. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  146. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  147. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
  148. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
  149. package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
  150. package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
  151. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  152. package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
  153. package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
  154. package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
  155. package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
  156. package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
  157. package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
  158. package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
  159. package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
  160. package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
  161. package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
  162. package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
  163. package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
  164. package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
  165. package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
  166. package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
  167. package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
  168. package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
  169. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
  170. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
  171. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
  172. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
  173. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
  174. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
  175. package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
  176. package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
  177. package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
  178. package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
  179. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
  180. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
  181. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
  182. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
  183. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
  184. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
  185. package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
  186. package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
  187. package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
  188. package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
  189. package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
  190. package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
  191. package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
  192. package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
  193. package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
  194. package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
  195. package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
  196. package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
  197. package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
  198. package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
  199. package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
  200. package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
  201. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
  202. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
  203. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  204. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
  205. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
  206. package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
  207. package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
  208. package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
  209. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  210. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  211. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  212. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  213. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  214. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  215. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  216. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  217. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  218. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  219. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  220. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  221. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  222. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  223. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  224. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  225. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  226. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  227. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  228. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  229. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  230. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  231. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  232. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  233. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  234. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  235. package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
  236. package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
  237. package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
  238. package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
  239. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
  240. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
  241. package/tests/cypress/fixtures/blocks.json +218 -0
  242. package/tests/cypress/fixtures/entities.json +87 -0
  243. package/tests/cypress/fixtures/page-builder.json +21 -0
  244. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  245. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  246. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  247. package/tests/cypress/src/components/EntityForm.ts +375 -0
  248. package/tests/cypress/src/components/EntityList.ts +389 -0
  249. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  250. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  251. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  252. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  253. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  254. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  255. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  256. package/tests/cypress/src/components/index.ts +21 -0
  257. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  258. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  259. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  260. package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
  261. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  262. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  263. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  264. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  265. package/tests/cypress/src/controllers/index.js +25 -0
  266. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  267. package/tests/cypress/src/core/BasePOM.ts +33 -0
  268. package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
  269. package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
  270. package/tests/cypress/src/core/index.ts +14 -0
  271. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  272. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  273. package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
  274. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  275. package/tests/cypress/src/entities/TasksPOM.ts +246 -0
  276. package/tests/cypress/src/entities/index.ts +16 -0
  277. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  278. package/tests/cypress/src/features/DashboardPOM.ts +271 -0
  279. package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
  280. package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
  281. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  282. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  283. package/tests/cypress/src/features/SettingsPOM.ts +707 -0
  284. package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
  285. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  286. package/tests/cypress/src/features/index.ts +28 -0
  287. package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
  288. package/tests/cypress/src/index.ts +101 -0
  289. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  290. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  291. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  292. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  293. package/tests/cypress/src/pages/index.js +5 -0
  294. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  295. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  296. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  297. package/tests/cypress/src/pages/public/index.js +6 -0
  298. package/tests/cypress/src/selectors.ts +46 -0
  299. package/tests/cypress/src/session-helpers.ts +518 -0
  300. package/tests/cypress/support/doc-commands.ts +260 -0
  301. package/tests/cypress/support/e2e.ts +90 -0
  302. package/tests/cypress.config.ts +178 -0
  303. package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
  304. package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
  305. package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
  306. package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
  307. package/tests/jest/__mocks__/jose.js +22 -0
  308. package/tests/jest/__mocks__/next/image.js +15 -0
  309. package/tests/jest/__mocks__/next-server.js +56 -0
  310. package/tests/jest/components/post-header.test.tsx +377 -0
  311. package/tests/jest/jest.config.cjs +154 -0
  312. package/tests/jest/langchain/COVERAGE.md +372 -0
  313. package/tests/jest/langchain/guardrails.test.ts +465 -0
  314. package/tests/jest/langchain/streaming.test.ts +370 -0
  315. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  316. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  317. package/tests/jest/langchain/tracer.test.ts +823 -0
  318. package/tests/jest/services/tasks.service.test.ts +707 -0
  319. package/tests/jest/setup.ts +170 -0
  320. package/tests/jest/tsconfig.jest.json +6 -0
  321. package/tests/jest/validation/categories.test.ts +429 -0
  322. package/tests/jest/validation/posts.test.ts +546 -0
  323. package/tests/tsconfig.json +21 -0
  324. /package/docs/{02-features → public/02-features}/01-components.md +0 -0
  325. /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
@@ -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 | |
@@ -0,0 +1,141 @@
1
+ /// <reference types="cypress" />
2
+
3
+ /**
4
+ * Owner Team Role Login Tests
5
+ *
6
+ * Tests the Owner team role login and specific permissions:
7
+ * - Full CRUD access to all entities
8
+ * - Team settings access
9
+ * - Billing access
10
+ * - Member management
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 Owner-specific permissions and access.
15
+ *
16
+ * Tags: @uat, @feat-auth, @team-role, @owner
17
+ */
18
+
19
+ import * as allure from 'allure-cypress'
20
+
21
+ import { loginAsDefaultOwner, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
22
+ import { DashboardPOM } from '../../../../src/features/DashboardPOM'
23
+ import { SettingsPOM } from '../../../../src/features/SettingsPOM'
24
+ import { BillingPOM } from '../../../../src/features/BillingPOM'
25
+ import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
26
+ import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
27
+
28
+ describe('Authentication - Owner Team Role Permissions', {
29
+ tags: ['@uat', '@feat-auth', '@team-role', '@owner']
30
+ }, () => {
31
+ const dashboard = DashboardPOM.create()
32
+ const settings = SettingsPOM.create()
33
+ const billing = BillingPOM.create()
34
+ const sector7 = SuperadminPOM.create()
35
+ const devArea = DevAreaPOM.create()
36
+
37
+ beforeEach(() => {
38
+ allure.epic('Authentication')
39
+ allure.feature('Team Roles')
40
+ allure.story('Owner Permissions')
41
+ loginAsDefaultOwner()
42
+ })
43
+
44
+ describe('OWNER-PERM-001: Owner Dashboard Access', { tags: '@smoke' }, () => {
45
+ it('should access dashboard with full navigation', { tags: '@smoke' }, () => {
46
+ allure.severity('critical')
47
+
48
+ // 1. Visit dashboard and wait for it to load
49
+ dashboard.visitDashboard()
50
+ dashboard.waitForDashboard()
51
+
52
+ // 2. Validate sidebar navigation items (Owner should see entity links)
53
+ dashboard.assertEntityNavVisible('customers')
54
+ dashboard.assertEntityNavVisible('tasks')
55
+
56
+ cy.log(`✅ Owner dashboard access verified (${DEFAULT_THEME_USERS.OWNER})`)
57
+ })
58
+ })
59
+
60
+ describe('OWNER-PERM-002: Owner Full Entity Access', { tags: '@smoke' }, () => {
61
+ it('should have full CRUD access to customers', { tags: '@smoke' }, () => {
62
+ allure.severity('critical')
63
+
64
+ // 1. Navigate to customers (correct route is /dashboard/customers)
65
+ dashboard.visitEntity('customers')
66
+ dashboard.waitForEntityPage('customers')
67
+
68
+ // 2. Validate create button is visible (Owner can create)
69
+ dashboard.assertEntityAddButtonVisible('customers')
70
+
71
+ // 3. Validate table is visible
72
+ dashboard.assertEntityPageVisible('customers')
73
+
74
+ cy.log('✅ Owner has full CRUD access to customers')
75
+ })
76
+ })
77
+
78
+ describe('OWNER-PERM-003: Owner Team Settings Access', { tags: '@in-develop' }, () => {
79
+ it('should access team settings page', { tags: '@in-develop' }, () => {
80
+ allure.severity('high')
81
+
82
+ // 1. Navigate to settings
83
+ settings.visitSettings()
84
+ settings.waitForSettings()
85
+
86
+ // 2. Validate settings page is accessible
87
+ settings.assertSettingsVisible()
88
+
89
+ // 3. Validate team settings nav is visible (key is 'teams' not 'team')
90
+ settings.assertNavItemVisible('teams')
91
+
92
+ cy.log('✅ Owner can access team settings')
93
+ })
94
+ })
95
+
96
+ describe('OWNER-PERM-004: Owner Billing Access', () => {
97
+ it('should access billing page', () => {
98
+ allure.severity('high')
99
+
100
+ // 1. Navigate to billing using BillingPOM
101
+ billing.visitBilling()
102
+
103
+ // 2. Validate billing page is accessible
104
+ billing.assertBillingPageVisible()
105
+
106
+ cy.log('✅ Owner can access billing')
107
+ })
108
+ })
109
+
110
+ describe('OWNER-PERM-005: Owner Cannot Access Superadmin', () => {
111
+ it('should be redirected when trying to access /superadmin', () => {
112
+ allure.severity('high')
113
+
114
+ // 1. Attempt to visit Superadmin
115
+ cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
116
+
117
+ // 2. Should be redirected (Owner is not superadmin)
118
+ sector7.assertAccessDenied()
119
+
120
+ cy.log('✅ Owner correctly blocked from Superadmin')
121
+ })
122
+ })
123
+
124
+ describe('OWNER-PERM-006: Owner Cannot Access Dev Zone', () => {
125
+ it('should be redirected when trying to access /dev', () => {
126
+ allure.severity('high')
127
+
128
+ // 1. Attempt to visit Dev Zone
129
+ devArea.attemptToVisitDev()
130
+
131
+ // 2. Should be redirected (Owner is not developer)
132
+ devArea.assertRedirectedToDashboard()
133
+
134
+ cy.log('✅ Owner correctly blocked from Dev Zone')
135
+ })
136
+ })
137
+
138
+ after(() => {
139
+ cy.log('✅ Owner team role tests completed')
140
+ })
141
+ })
@@ -0,0 +1,273 @@
1
+ ---
2
+ feature: Billing Extended Features
3
+ priority: medium
4
+ tags: [billing, payment, features, invoices, navigation]
5
+ grepTags: [uat, billing, extended]
6
+ coverage: 8
7
+ status: pending-permission-fix
8
+ ---
9
+
10
+ # Billing Page - Extended Tests
11
+
12
+ > Extended coverage tests for the billing settings page including payment method section, plan features list, view pricing navigation, and invoice details. **Note:** Currently skipped due to permission check issues - billing page redirects to /dashboard/settings.
13
+
14
+ ## Background
15
+
16
+ ```gherkin:en
17
+ Given I am logged in as Owner (owner@nextspark.dev)
18
+ And I have navigated to the Billing settings page
19
+ And the billing page has loaded successfully
20
+ ```
21
+
22
+ ```gherkin:es
23
+ Given estoy logueado como Owner (owner@nextspark.dev)
24
+ And he navegado a la pagina de configuracion de Billing
25
+ And la pagina de billing ha cargado exitosamente
26
+ ```
27
+
28
+ ---
29
+
30
+ ## @test BILL-UAT-040: Owner sees payment method section
31
+
32
+ ### Metadata
33
+ - **Priority:** Normal
34
+ - **Type:** Regression
35
+ - **Tags:** payment, section, owner
36
+ - **Status:** SKIPPED (permission issue)
37
+
38
+ ```gherkin:en
39
+ Scenario: Owner sees payment method section
40
+
41
+ Given I am logged in as an owner
42
+ When I visit the billing page
43
+ Then I should see payment method section
44
+ ```
45
+
46
+ ```gherkin:es
47
+ Scenario: Owner ve la seccion de metodo de pago
48
+
49
+ Given estoy logueado como owner
50
+ When visito la pagina de billing
51
+ Then deberia ver la seccion de metodo de pago
52
+ ```
53
+
54
+ ### Expected Results
55
+ - Billing page is accessible to owner
56
+ - Payment method section is visible
57
+ - Section displays current payment info or add option
58
+
59
+ ---
60
+
61
+ ## @test BILL-UAT-041: Add payment button is visible
62
+
63
+ ### Metadata
64
+ - **Priority:** Normal
65
+ - **Type:** Regression
66
+ - **Tags:** payment, button, add
67
+ - **Status:** SKIPPED (permission issue)
68
+
69
+ ```gherkin:en
70
+ Scenario: User can see add payment button
71
+
72
+ Given I am on the billing page
73
+ Then I should see the add payment button
74
+ ```
75
+
76
+ ```gherkin:es
77
+ Scenario: Usuario puede ver boton agregar pago
78
+
79
+ Given estoy en la pagina de billing
80
+ Then deberia ver el boton de agregar pago
81
+ ```
82
+
83
+ ### Expected Results
84
+ - Add payment button exists
85
+ - Button is visible and clickable
86
+ - Button leads to payment method addition flow
87
+
88
+ ---
89
+
90
+ ## @test BILL-UAT-042: Plan features list is visible
91
+
92
+ ### Metadata
93
+ - **Priority:** Normal
94
+ - **Type:** Regression
95
+ - **Tags:** plan, features, list
96
+
97
+ - **Status:** SKIPPED (permission issue)
98
+
99
+ ```gherkin:en
100
+ Scenario: User can see plan features
101
+
102
+ Given I am on the billing page
103
+ Then I should see the features included in my plan
104
+ ```
105
+
106
+ ```gherkin:es
107
+ Scenario: Usuario puede ver caracteristicas del plan
108
+
109
+ Given estoy en la pagina de billing
110
+ Then deberia ver las caracteristicas incluidas en mi plan
111
+ ```
112
+
113
+ ### Expected Results
114
+ - Plan features section is visible
115
+ - Features list displays current plan inclusions
116
+ - Features match the subscribed plan tier
117
+
118
+ ---
119
+
120
+ ## @test BILL-UAT-043: View pricing button is visible
121
+
122
+ ### Metadata
123
+ - **Priority:** Normal
124
+ - **Type:** Regression
125
+ - **Tags:** navigation, pricing, upgrade
126
+ - **Status:** SKIPPED (permission issue)
127
+
128
+ ```gherkin:en
129
+ Scenario: User can see view pricing option
130
+
131
+ Given I am on the billing page
132
+ Then I should see a way to view pricing
133
+ ```
134
+
135
+ ```gherkin:es
136
+ Scenario: Usuario puede ver opcion de ver precios
137
+
138
+ Given estoy en la pagina de billing
139
+ Then deberia ver una forma de ver precios
140
+ ```
141
+
142
+ ### Expected Results
143
+ - Upgrade/pricing button exists
144
+ - Button is visible
145
+ - Navigation to pricing is available
146
+
147
+ ---
148
+
149
+ ## @test BILL-UAT-044: Contact sales option available
150
+
151
+ ### Metadata
152
+ - **Priority:** Low
153
+ - **Type:** Regression
154
+ - **Tags:** enterprise, sales, contact
155
+ - **Status:** SKIPPED (permission issue)
156
+
157
+ ```gherkin:en
158
+ Scenario: Enterprise contact option exists
159
+
160
+ Given I am on the billing page
161
+ Then I should see a way to contact sales (or upgrade to Enterprise)
162
+ ```
163
+
164
+ ```gherkin:es
165
+ Scenario: Opcion de contacto Enterprise existe
166
+
167
+ Given estoy en la pagina de billing
168
+ Then deberia ver una forma de contactar ventas (o actualizar a Enterprise)
169
+ ```
170
+
171
+ ### Expected Results
172
+ - Enterprise/sales contact option exists
173
+ - Main billing section is visible
174
+ - Path to enterprise upgrade is available
175
+
176
+ ---
177
+
178
+ ## @test BILL-UAT-045: Owner billing section visible
179
+
180
+ ### Metadata
181
+ - **Priority:** Normal
182
+ - **Type:** Regression
183
+ - **Tags:** owner, section, visibility
184
+ - **Status:** SKIPPED (permission issue)
185
+
186
+ ```gherkin:en
187
+ Scenario: Owner can see billing section
188
+
189
+ Given I am logged in as an owner
190
+ When I visit the billing page
191
+ Then I should see the billing section
192
+ ```
193
+
194
+ ```gherkin:es
195
+ Scenario: Owner puede ver seccion de billing
196
+
197
+ Given estoy logueado como owner
198
+ When visito la pagina de billing
199
+ Then deberia ver la seccion de billing
200
+ ```
201
+
202
+ ### Expected Results
203
+ - Billing page loads for owner role
204
+ - Billing section is visible
205
+ - All billing components render
206
+
207
+ ---
208
+
209
+ ## @test BILL-UAT-046: Invoices section accessible
210
+
211
+ ### Metadata
212
+ - **Priority:** Low
213
+ - **Type:** Regression
214
+ - **Tags:** invoices, section, table
215
+ - **Status:** SKIPPED (permission issue)
216
+
217
+ ```gherkin:en
218
+ Scenario: User can see invoices section
219
+
220
+ Given I am on the billing page
221
+ Then I should see the invoices section
222
+ ```
223
+
224
+ ```gherkin:es
225
+ Scenario: Usuario puede ver seccion de facturas
226
+
227
+ Given estoy en la pagina de billing
228
+ Then deberia ver la seccion de facturas
229
+ ```
230
+
231
+ ### Expected Results
232
+ - Invoices table exists
233
+ - Section is accessible
234
+ - Invoice history is displayed
235
+
236
+ ---
237
+
238
+ ## @test BILL-UAT-047: Invoice status badge is visible
239
+
240
+ ### Metadata
241
+ - **Priority:** Normal
242
+ - **Type:** Regression
243
+ - **Tags:** invoices, status, badge
244
+ - **Status:** SKIPPED (permission issue)
245
+
246
+ ```gherkin:en
247
+ Scenario: Invoice shows status badge
248
+
249
+ Given I am on the billing page with invoices
250
+ Then each invoice should have a status badge
251
+ ```
252
+
253
+ ```gherkin:es
254
+ Scenario: Factura muestra badge de estado
255
+
256
+ Given estoy en la pagina de billing con facturas
257
+ Then cada factura deberia tener un badge de estado
258
+ ```
259
+
260
+ ### Expected Results
261
+ - Invoices table exists
262
+ - Each invoice row has status indicator
263
+ - Status badges are visible (paid, pending, etc.)
264
+
265
+ ---
266
+
267
+ ## Known Issues
268
+
269
+ **Permission Check Issue (2025-12-28):**
270
+ - Billing page redirects to /dashboard/settings for all users
271
+ - `usePermission('settings.billing')` hook may not resolve correctly
272
+ - TeamContext may not be properly hydrated during Cypress session restore
273
+ - Investigation needed in: usePermission, TeamContext, permissionRegistry