@nextsparkjs/theme-default 0.1.0-beta.2 → 0.1.0-beta.21

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 (222) hide show
  1. package/package.json +8 -4
  2. package/templates/(public)/page.tsx +1 -1
  3. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  4. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  5. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  6. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  7. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  8. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  9. package/tests/cypress/e2e/_docs/README.md +215 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  11. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  13. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  14. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  15. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  19. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  20. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  21. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  22. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  23. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  24. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  25. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  26. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  27. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  28. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  29. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  30. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  31. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  32. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  33. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  34. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  36. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  38. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  40. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  42. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  43. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  44. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  45. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  46. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  47. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  48. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  49. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  50. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  51. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  52. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  53. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  54. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  55. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  56. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  57. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  58. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  59. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  60. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  61. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  62. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  63. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  64. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  65. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  66. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  67. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  68. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  69. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  70. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  71. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  72. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  78. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  79. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  83. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  85. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  87. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  89. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  95. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  96. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  97. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  99. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  100. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  101. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  102. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  103. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  105. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  106. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  107. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  109. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  110. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  112. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  114. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  118. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  120. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  122. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  126. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  128. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  130. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  132. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  136. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  138. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  140. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  142. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  144. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  146. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  148. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  149. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  150. package/tests/cypress/fixtures/blocks.json +218 -0
  151. package/tests/cypress/fixtures/entities.json +78 -0
  152. package/tests/cypress/fixtures/page-builder.json +21 -0
  153. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  154. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  155. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  156. package/tests/cypress/src/components/EntityForm.ts +375 -0
  157. package/tests/cypress/src/components/EntityList.ts +389 -0
  158. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  159. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  160. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  161. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  162. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  163. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  164. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  165. package/tests/cypress/src/components/index.ts +21 -0
  166. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  167. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  168. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  169. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  170. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  171. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  172. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  173. package/tests/cypress/src/controllers/index.js +25 -0
  174. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  175. package/tests/cypress/src/core/BasePOM.ts +86 -0
  176. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  177. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  178. package/tests/cypress/src/core/index.ts +14 -0
  179. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  180. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  181. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  182. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  183. package/tests/cypress/src/entities/index.ts +14 -0
  184. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  185. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  186. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  187. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  188. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  189. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  190. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  191. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  192. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  193. package/tests/cypress/src/features/index.ts +28 -0
  194. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  195. package/tests/cypress/src/index.ts +101 -0
  196. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  198. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  199. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  200. package/tests/cypress/src/pages/index.js +5 -0
  201. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  202. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  203. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  204. package/tests/cypress/src/pages/public/index.js +6 -0
  205. package/tests/cypress/src/selectors.ts +46 -0
  206. package/tests/cypress/src/session-helpers.ts +500 -0
  207. package/tests/cypress/support/doc-commands.ts +260 -0
  208. package/tests/cypress.config.ts +150 -0
  209. package/tests/jest/components/post-header.test.tsx +377 -0
  210. package/tests/jest/config/role-config.test.ts +529 -0
  211. package/tests/jest/jest.config.ts +81 -0
  212. package/tests/jest/langchain/COVERAGE.md +372 -0
  213. package/tests/jest/langchain/guardrails.test.ts +465 -0
  214. package/tests/jest/langchain/streaming.test.ts +367 -0
  215. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  216. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  217. package/tests/jest/langchain/tracer.test.ts +823 -0
  218. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  219. package/tests/jest/validation/categories.test.ts +429 -0
  220. package/tests/jest/validation/posts.test.ts +546 -0
  221. package/tests/tsconfig.json +15 -0
  222. package/LICENSE +0 -21
@@ -0,0 +1,184 @@
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 Page Content Tests
9
+ *
10
+ * Tests the content and functionality of each /devtools page:
11
+ * - Home page renders quick links
12
+ * - Style Gallery loads all components
13
+ * - Test Cases viewer shows file tree
14
+ * - Config viewer shows tabs and content
15
+ *
16
+ * Test User:
17
+ * - Developer: developer@nextspark.dev (via loginAsDefaultDeveloper)
18
+ */
19
+
20
+ describe('DevTools - Page Content', {
21
+ tags: ['@uat', '@feat-devtools', '@regression']
22
+ }, () => {
23
+ const devtools = DevtoolsPOM.create()
24
+
25
+ beforeEach(() => {
26
+ allure.epic('UAT')
27
+ allure.feature('DevTools')
28
+ allure.story('Page Content')
29
+
30
+ // Login as developer before each test
31
+ loginAsDefaultDeveloper()
32
+ })
33
+
34
+ describe('PAGE-001: Home page renders quick links', () => {
35
+ it('should display all quick link cards on home page', () => {
36
+ allure.severity('high')
37
+
38
+ // 1. Visit /devtools home
39
+ devtools.visitHome()
40
+
41
+ // 2. Verify page container is visible
42
+ devtools.assertHomePageVisible()
43
+
44
+ // 3. Verify all quick links are visible
45
+ devtools.assertHomeQuickLinksVisible()
46
+
47
+ // 4. Verify quick links are clickable and navigate correctly
48
+ cy.log('Testing Style Gallery quick link...')
49
+ devtools.clickHomeStyleLink()
50
+ devtools.assertOnStyleGallery()
51
+
52
+ cy.log('Testing Test Cases quick link...')
53
+ devtools.visitHome()
54
+ devtools.clickHomeTestsLink()
55
+ devtools.assertOnTestCases()
56
+
57
+ cy.log('Testing Config Viewer quick link...')
58
+ devtools.visitHome()
59
+ devtools.clickHomeConfigLink()
60
+ devtools.assertOnConfig()
61
+
62
+ cy.log(`✅ Home page quick links work correctly`)
63
+ })
64
+ })
65
+
66
+ describe('PAGE-002: Style Gallery loads components', () => {
67
+ it('should display all Style Gallery sections', () => {
68
+ allure.severity('high')
69
+
70
+ // 1. Visit /devtools/style
71
+ devtools.visitStyleGallery()
72
+
73
+ // 2. Verify page is visible
74
+ devtools.assertStylePageVisible()
75
+
76
+ // 3. Verify all tab sections by clicking through them
77
+ // (assertStyleSectionsVisible clicks each tab and verifies content)
78
+ devtools.assertStyleSectionsVisible()
79
+
80
+ cy.log(`✅ Style Gallery sections loaded correctly`)
81
+ })
82
+ })
83
+
84
+ describe('PAGE-003: Test Cases viewer shows file tree', () => {
85
+ it('should display test cases viewer with file tree', () => {
86
+ allure.severity('high')
87
+
88
+ // 1. Visit /devtools/tests
89
+ devtools.visitTestCases()
90
+
91
+ // 2. Verify page is visible
92
+ devtools.assertTestsPageVisible()
93
+
94
+ // 3. Verify viewer container is visible
95
+ devtools.assertTestsViewerVisible()
96
+
97
+ // 4. Verify file tree is present (or empty state if no files)
98
+ cy.get('body').then(($body) => {
99
+ if ($body.find(devtools.selectors.testsTree).length > 0) {
100
+ // File tree exists
101
+ cy.get(devtools.selectors.testsTree).should('be.visible')
102
+ cy.log('✅ File tree displayed')
103
+ } else if ($body.find(devtools.selectors.testsEmptyState).length > 0) {
104
+ // Empty state (no test files)
105
+ cy.get(devtools.selectors.testsEmptyState).should('be.visible')
106
+ cy.log('✅ Empty state displayed (no test files found)')
107
+ }
108
+ })
109
+
110
+ cy.log(`✅ Test Cases viewer loaded correctly`)
111
+ })
112
+
113
+ it('should show markdown content when selecting a file', () => {
114
+ allure.severity('medium')
115
+
116
+ // 1. Visit /devtools/tests
117
+ devtools.visitTestCases()
118
+
119
+ // 2. Check if file tree has files
120
+ cy.get('body').then(($body) => {
121
+ if ($body.find('[data-cy^="dev-tests-file-"]').length > 0) {
122
+ // Files exist - click first file
123
+ cy.get('[data-cy^="dev-tests-file-"]').first().click()
124
+
125
+ // 3. Verify markdown content is displayed
126
+ cy.get(devtools.selectors.testsContent).should('be.visible')
127
+ cy.get(devtools.selectors.testsMarkdownContent).should('be.visible')
128
+
129
+ cy.log('✅ File content displayed when selected')
130
+ } else {
131
+ cy.log('⚠️ No test files found - skipping file selection test')
132
+ }
133
+ })
134
+ })
135
+ })
136
+
137
+ describe('PAGE-004: Config viewer shows tabs', () => {
138
+ it('should display config viewer with tabs', () => {
139
+ allure.severity('high')
140
+
141
+ // 1. Visit /devtools/config
142
+ devtools.visitConfig()
143
+
144
+ // 2. Verify page is visible
145
+ devtools.assertConfigPageVisible()
146
+
147
+ // 3. Verify tabs are visible
148
+ devtools.assertConfigTabsVisible()
149
+
150
+ // 4. Test Theme tab
151
+ cy.log('Testing Theme tab...')
152
+ devtools.clickConfigTabTheme()
153
+ cy.get(devtools.selectors.configThemeContent).should('be.visible')
154
+
155
+ // 5. Test Entities tab
156
+ cy.log('Testing Entities tab...')
157
+ devtools.clickConfigTabEntities()
158
+ cy.get(devtools.selectors.configEntitiesContent).should('be.visible')
159
+
160
+ cy.log(`✅ Config viewer tabs work correctly`)
161
+ })
162
+
163
+ it('should display copy buttons in config viewer', () => {
164
+ allure.severity('medium')
165
+
166
+ // 1. Visit /devtools/config
167
+ devtools.visitConfig()
168
+
169
+ // 2. Verify copy buttons exist for theme config
170
+ devtools.clickConfigTabTheme()
171
+ cy.get(devtools.selectors.configCopyTheme).should('be.visible')
172
+
173
+ // 3. Verify copy buttons exist for entities config
174
+ devtools.clickConfigTabEntities()
175
+ cy.get(devtools.selectors.configCopyEntities).should('be.visible')
176
+
177
+ cy.log(`✅ Copy buttons displayed correctly`)
178
+ })
179
+ })
180
+
181
+ after(() => {
182
+ cy.log('✅ DevTools page content tests completed')
183
+ })
184
+ })
@@ -0,0 +1,215 @@
1
+ # Cypress Documentation Videos
2
+
3
+ This directory contains Cypress tests designed to generate documentation videos with narration support.
4
+
5
+ ## Concept
6
+
7
+ Instead of manually recording tutorial videos, we use Cypress tests that:
8
+ 1. **Slow down execution** to human-readable speed using `cypress-slow-down`
9
+ 2. **Add narration markers** that are saved as JSON for post-processing
10
+ 3. **Highlight elements** visually during important steps
11
+ 4. **Generate MP4 videos** automatically via Cypress video recording
12
+
13
+ ## Quick Start
14
+
15
+ ### Run a documentation test
16
+
17
+ ```bash
18
+ # Interactive mode (watch the test execute)
19
+ NEXT_PUBLIC_ACTIVE_THEME=default pnpm cy:open
20
+
21
+ # Headless mode (generates video file)
22
+ NEXT_PUBLIC_ACTIVE_THEME=default pnpm cy:run --spec "**/teams-system.doc.cy.ts"
23
+ ```
24
+
25
+ ### Output Files
26
+
27
+ After running, you'll find:
28
+ - **Video**: `cypress/videos/docs/tutorials/teams-system.doc.cy.ts.mp4`
29
+ - **Narrations**: `cypress/docs-output/narrations/teams-system.doc-narrations.json`
30
+
31
+ ## File Structure
32
+
33
+ ```
34
+ cypress/e2e/docs/
35
+ ├── README.md # This file
36
+ └── tutorials/
37
+ ├── teams-system.doc.cy.ts # The actual Cypress test
38
+ └── teams-system.narration.json # Narration script (reference)
39
+
40
+ cypress/docs-output/
41
+ └── narrations/
42
+ └── teams-system.doc-narrations.json # Generated narration timing
43
+ ```
44
+
45
+ ## Creating a New Documentation Video
46
+
47
+ ### 1. Plan the narration
48
+
49
+ Create a `.narration.json` file with your script:
50
+
51
+ ```json
52
+ {
53
+ "title": "Feature Name Tutorial",
54
+ "chapters": [
55
+ {
56
+ "id": "intro",
57
+ "title": "Introduction",
58
+ "narrations": [
59
+ {
60
+ "step": 1,
61
+ "text": "Welcome to this tutorial...",
62
+ "action": "none",
63
+ "estimatedSeconds": 5
64
+ }
65
+ ]
66
+ }
67
+ ]
68
+ }
69
+ ```
70
+
71
+ ### 2. Create the test file
72
+
73
+ Use the `*.doc.cy.ts` naming convention:
74
+
75
+ ```typescript
76
+ import { slowCypressDown } from 'cypress-slow-down'
77
+ import 'cypress-slow-down/commands'
78
+
79
+ const CONFIG = {
80
+ commandDelay: 600, // ms between commands
81
+ narration: {
82
+ short: 2500,
83
+ medium: 4000,
84
+ long: 5500,
85
+ }
86
+ }
87
+
88
+ describe('Tutorial: Feature Name', { tags: ['@doc'] }, () => {
89
+ before(() => {
90
+ slowCypressDown(CONFIG.commandDelay)
91
+ })
92
+
93
+ it('demonstrates the feature', () => {
94
+ // Chapter marker
95
+ cy.log('📖 **CHAPTER: Introduction**')
96
+ cy.wait(2000)
97
+
98
+ // Narration with wait
99
+ cy.log('🎙️ Welcome to this tutorial about...')
100
+ cy.wait(4000) // Time for narration
101
+
102
+ // Your test actions...
103
+ cy.visit('/some-page')
104
+
105
+ // Highlight important elements
106
+ cy.get('[data-cy="important"]').then($el => {
107
+ $el.css({ outline: '4px solid red' })
108
+ })
109
+ cy.wait(2000) // Let viewer see highlight
110
+ })
111
+ })
112
+ ```
113
+
114
+ ### 3. Run and collect outputs
115
+
116
+ ```bash
117
+ # Generate video and narrations
118
+ NEXT_PUBLIC_ACTIVE_THEME=default pnpm cy:run --spec "**/your-feature.doc.cy.ts"
119
+ ```
120
+
121
+ ## Post-Processing Pipeline
122
+
123
+ The generated outputs can be processed with AI tools:
124
+
125
+ ### Video + Narrations → Final Documentation
126
+
127
+ ```
128
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
129
+ │ Cypress Video │ │ Narration JSON │ │ AI Service │
130
+ │ (MP4, no audio)│───►│ (timestamps) │───►│ (Guidde/HeyGen)│
131
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
132
+
133
+
134
+ ┌─────────────────┐
135
+ │ Final Video │
136
+ │ + AI Narration │
137
+ │ + Subtitles │
138
+ └─────────────────┘
139
+ ```
140
+
141
+ ### Narration JSON Format
142
+
143
+ The generated `*-narrations.json` contains:
144
+
145
+ ```json
146
+ [
147
+ {
148
+ "timestamp": 1702400000000,
149
+ "step": 1,
150
+ "text": "=== Introduction ===",
151
+ "chapter": "Introduction",
152
+ "duration": 2500
153
+ },
154
+ {
155
+ "timestamp": 1702400002500,
156
+ "step": 2,
157
+ "text": "Welcome to this tutorial...",
158
+ "duration": 4000
159
+ }
160
+ ]
161
+ ```
162
+
163
+ This can be used to:
164
+ - Generate SRT subtitle files
165
+ - Send to text-to-speech APIs (ElevenLabs, Google TTS)
166
+ - Sync audio with video using FFmpeg
167
+
168
+ ## Speed Configuration
169
+
170
+ Adjust the `commandDelay` and narration durations based on your needs:
171
+
172
+ | Setting | Value | Use Case |
173
+ |---------|-------|----------|
174
+ | `commandDelay: 300` | Fast | Quick demos |
175
+ | `commandDelay: 600` | Normal | Standard tutorials |
176
+ | `commandDelay: 1000` | Slow | Detailed explanations |
177
+
178
+ ### Narration Timing Guide
179
+
180
+ | Duration | Words | Use For |
181
+ |----------|-------|---------|
182
+ | 2500ms | ~8-10 | Short phrases |
183
+ | 4000ms | ~15-18 | Standard sentences |
184
+ | 5500ms | ~22-25 | Longer explanations |
185
+
186
+ ## Tips
187
+
188
+ 1. **Use `cy.wait()` strategically** - Add pauses after important actions
189
+ 2. **Highlight sparingly** - Only highlight what you're talking about
190
+ 3. **Chapter markers** - Help viewers navigate in longer videos
191
+ 4. **Test first without slow-down** - Ensure test passes before recording
192
+ 5. **Keep videos under 5 minutes** - Split longer tutorials into parts
193
+
194
+ ## Running Only Doc Tests
195
+
196
+ Use tags to filter:
197
+
198
+ ```bash
199
+ # Run only documentation tests
200
+ pnpm cy:run --env grepTags=@doc
201
+
202
+ # Run only tutorial tests
203
+ pnpm cy:run --env grepTags=@tutorial
204
+
205
+ # Exclude doc tests from regular test runs
206
+ pnpm cy:run --env grepTags=-@doc
207
+ ```
208
+
209
+ ## Future Enhancements
210
+
211
+ - [ ] Automated subtitle generation script
212
+ - [ ] Integration with AI narration APIs
213
+ - [ ] FFmpeg post-processing script
214
+ - [ ] Multi-language support
215
+ - [ ] Automated upload to docs site
@@ -0,0 +1,155 @@
1
+ {
2
+ "title": "Sector 7 - SuperAdmin Teams View",
3
+ "description": "Tutorial que muestra cómo un super administrador puede acceder a Sector 7 y visualizar todos los equipos del sistema.",
4
+ "language": "es",
5
+ "estimatedDuration": "1-1:30 minutos",
6
+ "targetAudience": "Usuarios finales con rol superadmin",
7
+ "chapters": [
8
+ {
9
+ "id": "intro",
10
+ "title": "Introducción",
11
+ "narrations": [
12
+ {
13
+ "step": 1,
14
+ "text": "Bienvenido a Sector 7, el área exclusiva para super administradores.",
15
+ "action": "none",
16
+ "estimatedSeconds": 4
17
+ },
18
+ {
19
+ "step": 2,
20
+ "text": "Hoy veremos cómo acceder y visualizar todos los equipos del sistema.",
21
+ "action": "none",
22
+ "estimatedSeconds": 4
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ "id": "login",
28
+ "title": "Login como SuperAdmin",
29
+ "narrations": [
30
+ {
31
+ "step": 3,
32
+ "text": "Iniciamos sesión con las credenciales de superadmin.",
33
+ "action": "visit-login",
34
+ "estimatedSeconds": 3
35
+ },
36
+ {
37
+ "step": 4,
38
+ "text": "Usamos el email del superadmin de prueba.",
39
+ "action": "fill-email",
40
+ "estimatedSeconds": 4
41
+ },
42
+ {
43
+ "step": 5,
44
+ "text": "Ingresamos la contraseña y enviamos.",
45
+ "action": "fill-password-submit",
46
+ "estimatedSeconds": 5
47
+ },
48
+ {
49
+ "step": 6,
50
+ "text": "Acceso concedido. Observa el icono de Sector 7 en la barra superior.",
51
+ "action": "highlight-sector7-icon",
52
+ "estimatedSeconds": 5
53
+ }
54
+ ]
55
+ },
56
+ {
57
+ "id": "navigation",
58
+ "title": "Navegación a Sector 7",
59
+ "narrations": [
60
+ {
61
+ "step": 7,
62
+ "text": "Hacemos clic para ingresar al área restringida.",
63
+ "action": "click-sector7",
64
+ "estimatedSeconds": 3
65
+ },
66
+ {
67
+ "step": 8,
68
+ "text": "Este es el panel de control del super administrador.",
69
+ "action": "show-dashboard",
70
+ "estimatedSeconds": 5
71
+ },
72
+ {
73
+ "step": 9,
74
+ "text": "En el menú lateral vemos las opciones disponibles.",
75
+ "action": "highlight-teams-nav",
76
+ "estimatedSeconds": 4
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "id": "teams-view",
82
+ "title": "Visualización de Teams",
83
+ "narrations": [
84
+ {
85
+ "step": 10,
86
+ "text": "Navegamos a la sección de Equipos.",
87
+ "action": "click-teams-nav",
88
+ "estimatedSeconds": 3
89
+ },
90
+ {
91
+ "step": 11,
92
+ "text": "Aquí vemos todos los equipos del sistema con estadísticas.",
93
+ "action": "show-stats",
94
+ "estimatedSeconds": 5
95
+ },
96
+ {
97
+ "step": 12,
98
+ "text": "La pestaña Work Teams muestra equipos colaborativos.",
99
+ "action": "highlight-work-tab",
100
+ "estimatedSeconds": 4
101
+ },
102
+ {
103
+ "step": 13,
104
+ "text": "También podemos ver los equipos personales de cada usuario.",
105
+ "action": "click-personal-tab",
106
+ "estimatedSeconds": 5
107
+ },
108
+ {
109
+ "step": 14,
110
+ "text": "El buscador permite filtrar equipos por nombre o email del propietario.",
111
+ "action": "highlight-search",
112
+ "estimatedSeconds": 4
113
+ }
114
+ ]
115
+ },
116
+ {
117
+ "id": "conclusion",
118
+ "title": "Conclusión",
119
+ "narrations": [
120
+ {
121
+ "step": 15,
122
+ "text": "Así funciona Sector 7: acceso exclusivo a la gestión global del sistema.",
123
+ "action": "none",
124
+ "estimatedSeconds": 5
125
+ },
126
+ {
127
+ "step": 16,
128
+ "text": "Gracias por ver este tutorial.",
129
+ "action": "none",
130
+ "estimatedSeconds": 3
131
+ }
132
+ ]
133
+ }
134
+ ],
135
+ "totalSteps": 16,
136
+ "technicalNotes": {
137
+ "users": {
138
+ "superadmin": "superadmin@cypress.com",
139
+ "password": "Pandora1234"
140
+ },
141
+ "routes": [
142
+ "/login",
143
+ "/dashboard",
144
+ "/sector7",
145
+ "/sector7/teams"
146
+ ],
147
+ "selectors": {
148
+ "topnavSector7": "[data-cy='topnav-sector7']",
149
+ "sector7NavTeams": "[data-cy='sector7-nav-teams']",
150
+ "teamsSearchInput": "[data-cy='teams-search-input']",
151
+ "workTeamsTab": "[value='work']",
152
+ "personalTeamsTab": "[value='personal']"
153
+ }
154
+ }
155
+ }