@nextsparkjs/theme-default 0.1.0-beta.20 → 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 (220) hide show
  1. package/package.json +1 -1
  2. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  3. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  4. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  5. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  6. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  7. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  8. package/tests/cypress/e2e/_docs/README.md +215 -0
  9. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  11. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  13. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  14. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  15. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  19. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  20. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  21. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  22. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  23. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  24. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  25. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  26. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  27. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  28. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  29. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  30. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  31. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  32. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  33. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  34. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  36. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  38. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  40. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  42. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  43. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  44. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  45. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  46. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  47. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  48. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  49. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  50. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  51. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  52. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  53. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  54. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  55. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  56. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  57. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  58. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  59. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  60. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  61. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  62. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  63. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  64. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  65. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  66. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  67. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  68. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  69. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  70. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  71. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  72. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  78. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  79. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  83. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  85. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  87. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  89. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  95. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  96. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  97. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  99. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  100. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  101. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  102. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  103. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  105. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  106. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  107. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  109. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  110. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  112. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  114. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  118. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  120. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  122. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  126. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  128. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  130. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  132. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  136. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  138. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  140. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  142. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  144. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  146. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  148. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  149. package/tests/cypress/fixtures/blocks.json +218 -0
  150. package/tests/cypress/fixtures/entities.json +78 -0
  151. package/tests/cypress/fixtures/page-builder.json +21 -0
  152. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  153. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  154. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  155. package/tests/cypress/src/components/EntityForm.ts +375 -0
  156. package/tests/cypress/src/components/EntityList.ts +389 -0
  157. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  158. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  159. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  160. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  161. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  162. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  163. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  164. package/tests/cypress/src/components/index.ts +21 -0
  165. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  166. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  167. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  168. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  169. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  170. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  171. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  172. package/tests/cypress/src/controllers/index.js +25 -0
  173. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  174. package/tests/cypress/src/core/BasePOM.ts +86 -0
  175. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  176. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  177. package/tests/cypress/src/core/index.ts +14 -0
  178. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  179. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  180. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  181. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  182. package/tests/cypress/src/entities/index.ts +14 -0
  183. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  184. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  185. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  186. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  187. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  188. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  189. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  190. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  191. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  192. package/tests/cypress/src/features/index.ts +28 -0
  193. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  194. package/tests/cypress/src/index.ts +101 -0
  195. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  196. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  198. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  199. package/tests/cypress/src/pages/index.js +5 -0
  200. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  201. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  202. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  203. package/tests/cypress/src/pages/public/index.js +6 -0
  204. package/tests/cypress/src/selectors.ts +46 -0
  205. package/tests/cypress/src/session-helpers.ts +500 -0
  206. package/tests/cypress/support/doc-commands.ts +260 -0
  207. package/tests/cypress.config.ts +150 -0
  208. package/tests/jest/components/post-header.test.tsx +377 -0
  209. package/tests/jest/config/role-config.test.ts +529 -0
  210. package/tests/jest/jest.config.ts +81 -0
  211. package/tests/jest/langchain/COVERAGE.md +372 -0
  212. package/tests/jest/langchain/guardrails.test.ts +465 -0
  213. package/tests/jest/langchain/streaming.test.ts +367 -0
  214. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  215. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  216. package/tests/jest/langchain/tracer.test.ts +823 -0
  217. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  218. package/tests/jest/validation/categories.test.ts +429 -0
  219. package/tests/jest/validation/posts.test.ts +546 -0
  220. package/tests/tsconfig.json +15 -0
@@ -0,0 +1,696 @@
1
+ # Public Page Rendering (Format: BDD/Gherkin - Bilingual)
2
+
3
+ > **Test File:** `page-rendering.cy.ts`
4
+ > **Format:** Behavior-Driven Development (BDD) with Given/When/Then
5
+ > **Languages:** English / Spanish (side-by-side)
6
+ > **Total Tests:** 15
7
+
8
+ ---
9
+
10
+ ## Feature: Public Page Rendering
11
+
12
+ <table>
13
+ <tr>
14
+ <th width="50%">English</th>
15
+ <th width="50%">Español</th>
16
+ </tr>
17
+ <tr>
18
+ <td>
19
+
20
+ As a **public visitor**
21
+ I want to **view published pages with their blocks**
22
+ So that **I can access the website content**
23
+
24
+ **Key Functionality:**
25
+ - Published pages render correctly
26
+ - Blocks display with content
27
+ - Draft pages return 404
28
+ - SEO metadata is present
29
+ - i18n support works
30
+
31
+ </td>
32
+ <td>
33
+
34
+ Como **visitante publico**
35
+ Quiero **ver paginas publicadas con sus bloques**
36
+ Para **acceder al contenido del sitio web**
37
+
38
+ **Funcionalidad Clave:**
39
+ - Paginas publicadas renderizan correctamente
40
+ - Bloques se muestran con contenido
41
+ - Paginas borrador retornan 404
42
+ - Metadatos SEO estan presentes
43
+ - Soporte i18n funciona
44
+
45
+ </td>
46
+ </tr>
47
+ </table>
48
+
49
+ ---
50
+
51
+ ## Published Page Rendering
52
+
53
+ ### PB_PUBLIC_001: Should render published page with HTTP 200 `@smoke`
54
+
55
+ <table>
56
+ <tr>
57
+ <th width="50%">English</th>
58
+ <th width="50%">Español</th>
59
+ </tr>
60
+ <tr>
61
+ <td>
62
+
63
+ ```gherkin
64
+ Scenario: Published page renders successfully
65
+
66
+ Given there is a published page "about-us" in sample data
67
+ When I visit the page at /about-us
68
+ Then the page should load successfully
69
+ And the page should have the correct slug attribute
70
+ And the page container should be visible
71
+ ```
72
+
73
+ </td>
74
+ <td>
75
+
76
+ ```gherkin
77
+ Scenario: Pagina publicada renderiza exitosamente
78
+
79
+ Given existe una pagina publicada "about-us" en datos de ejemplo
80
+ When visito la pagina en /about-us
81
+ Then la pagina deberia cargar exitosamente
82
+ And la pagina deberia tener el atributo slug correcto
83
+ And el contenedor de pagina deberia estar visible
84
+ ```
85
+
86
+ </td>
87
+ </tr>
88
+ </table>
89
+
90
+ ---
91
+
92
+ ### PB_PUBLIC_002: Should display Hero block with content
93
+
94
+ <table>
95
+ <tr>
96
+ <th width="50%">English</th>
97
+ <th width="50%">Español</th>
98
+ </tr>
99
+ <tr>
100
+ <td>
101
+
102
+ ```gherkin
103
+ Scenario: Hero block renders with content
104
+
105
+ Given I am on a published page
106
+ When the page loads completely
107
+ Then the Hero block should be visible
108
+ And the Hero title should exist
109
+ ```
110
+
111
+ </td>
112
+ <td>
113
+
114
+ ```gherkin
115
+ Scenario: Bloque Hero renderiza con contenido
116
+
117
+ Given estoy en una pagina publicada
118
+ When la pagina carga completamente
119
+ Then el bloque Hero deberia estar visible
120
+ And el titulo del Hero deberia existir
121
+ ```
122
+
123
+ </td>
124
+ </tr>
125
+ </table>
126
+
127
+ ---
128
+
129
+ ### PB_PUBLIC_003: Should display Features Grid block
130
+
131
+ <table>
132
+ <tr>
133
+ <th width="50%">English</th>
134
+ <th width="50%">Español</th>
135
+ </tr>
136
+ <tr>
137
+ <td>
138
+
139
+ ```gherkin
140
+ Scenario: Features Grid block renders
141
+
142
+ Given I am on a published page with Features Grid
143
+ When the page loads completely
144
+ Then the Features Grid block should be visible
145
+ ```
146
+
147
+ </td>
148
+ <td>
149
+
150
+ ```gherkin
151
+ Scenario: Bloque Features Grid renderiza
152
+
153
+ Given estoy en una pagina publicada con Features Grid
154
+ When la pagina carga completamente
155
+ Then el bloque Features Grid deberia estar visible
156
+ ```
157
+
158
+ </td>
159
+ </tr>
160
+ </table>
161
+
162
+ ---
163
+
164
+ ### PB_PUBLIC_004: Should display CTA Section block
165
+
166
+ <table>
167
+ <tr>
168
+ <th width="50%">English</th>
169
+ <th width="50%">Español</th>
170
+ </tr>
171
+ <tr>
172
+ <td>
173
+
174
+ ```gherkin
175
+ Scenario: CTA Section block renders
176
+
177
+ Given I am on a published page with CTA Section
178
+ When the page loads completely
179
+ Then the CTA Section block should be visible
180
+ ```
181
+
182
+ </td>
183
+ <td>
184
+
185
+ ```gherkin
186
+ Scenario: Bloque CTA Section renderiza
187
+
188
+ Given estoy en una pagina publicada con CTA Section
189
+ When la pagina carga completamente
190
+ Then el bloque CTA Section deberia estar visible
191
+ ```
192
+
193
+ </td>
194
+ </tr>
195
+ </table>
196
+
197
+ ---
198
+
199
+ ### PB_PUBLIC_005: Should display Testimonials block
200
+
201
+ <table>
202
+ <tr>
203
+ <th width="50%">English</th>
204
+ <th width="50%">Español</th>
205
+ </tr>
206
+ <tr>
207
+ <td>
208
+
209
+ ```gherkin
210
+ Scenario: Testimonials block renders
211
+
212
+ Given I am on a published page with Testimonials
213
+ When the page loads completely
214
+ Then the Testimonials block should be visible
215
+ ```
216
+
217
+ </td>
218
+ <td>
219
+
220
+ ```gherkin
221
+ Scenario: Bloque Testimonials renderiza
222
+
223
+ Given estoy en una pagina publicada con Testimonials
224
+ When la pagina carga completamente
225
+ Then el bloque Testimonials deberia estar visible
226
+ ```
227
+
228
+ </td>
229
+ </tr>
230
+ </table>
231
+
232
+ ---
233
+
234
+ ### PB_PUBLIC_006: Should display all expected blocks
235
+
236
+ <table>
237
+ <tr>
238
+ <th width="50%">English</th>
239
+ <th width="50%">Español</th>
240
+ </tr>
241
+ <tr>
242
+ <td>
243
+
244
+ ```gherkin
245
+ Scenario: All expected blocks render on page
246
+
247
+ Given I am on a published page with multiple blocks
248
+ And the page has expected blocks defined in fixtures
249
+ When the page loads completely
250
+ Then all expected blocks should be rendered
251
+ And the block count should match expectations
252
+ ```
253
+
254
+ </td>
255
+ <td>
256
+
257
+ ```gherkin
258
+ Scenario: Todos los bloques esperados renderizan en pagina
259
+
260
+ Given estoy en una pagina publicada con multiples bloques
261
+ And la pagina tiene bloques esperados definidos en fixtures
262
+ When la pagina carga completamente
263
+ Then todos los bloques esperados deberian renderizar
264
+ And la cantidad de bloques deberia coincidir con expectativas
265
+ ```
266
+
267
+ </td>
268
+ </tr>
269
+ </table>
270
+
271
+ ---
272
+
273
+ ## Draft Page Handling
274
+
275
+ ### PB_PUBLIC_007: Should return 404 for draft page
276
+
277
+ <table>
278
+ <tr>
279
+ <th width="50%">English</th>
280
+ <th width="50%">Español</th>
281
+ </tr>
282
+ <tr>
283
+ <td>
284
+
285
+ ```gherkin
286
+ Scenario: Draft pages are not publicly accessible
287
+
288
+ Given I create a draft page via API with published=false
289
+ When I try to access the draft page publicly
290
+ Then the response should be 404
291
+ And the page content should not be visible
292
+
293
+ When I cleanup by deleting the draft page
294
+ Then the page should be removed
295
+ ```
296
+
297
+ **Security Verification:**
298
+ Draft pages must never be accessible to public visitors.
299
+
300
+ </td>
301
+ <td>
302
+
303
+ ```gherkin
304
+ Scenario: Paginas borrador no son accesibles publicamente
305
+
306
+ Given creo una pagina borrador via API con published=false
307
+ When intento acceder a la pagina borrador publicamente
308
+ Then la respuesta deberia ser 404
309
+ And el contenido de la pagina no deberia ser visible
310
+
311
+ When limpio eliminando la pagina borrador
312
+ Then la pagina deberia ser removida
313
+ ```
314
+
315
+ **Verificacion de Seguridad:**
316
+ Las paginas borrador nunca deben ser accesibles a visitantes publicos.
317
+
318
+ </td>
319
+ </tr>
320
+ </table>
321
+
322
+ ---
323
+
324
+ ## SEO Metadata
325
+
326
+ ### PB_PUBLIC_008: Should have correct meta title
327
+
328
+ <table>
329
+ <tr>
330
+ <th width="50%">English</th>
331
+ <th width="50%">Español</th>
332
+ </tr>
333
+ <tr>
334
+ <td>
335
+
336
+ ```gherkin
337
+ Scenario: Page has meta title
338
+
339
+ Given I am on a published page
340
+ When the page loads completely
341
+ Then the page title should not be empty
342
+ And the title tag should contain relevant content
343
+ ```
344
+
345
+ </td>
346
+ <td>
347
+
348
+ ```gherkin
349
+ Scenario: Pagina tiene meta titulo
350
+
351
+ Given estoy en una pagina publicada
352
+ When la pagina carga completamente
353
+ Then el titulo de la pagina no deberia estar vacio
354
+ And la etiqueta title deberia contener contenido relevante
355
+ ```
356
+
357
+ </td>
358
+ </tr>
359
+ </table>
360
+
361
+ ---
362
+
363
+ ### PB_PUBLIC_009: Should have meta description
364
+
365
+ <table>
366
+ <tr>
367
+ <th width="50%">English</th>
368
+ <th width="50%">Español</th>
369
+ </tr>
370
+ <tr>
371
+ <td>
372
+
373
+ ```gherkin
374
+ Scenario: Page has meta description
375
+
376
+ Given I am on a published page
377
+ When the page loads completely
378
+ Then a meta description tag should exist
379
+ And the description should provide page summary
380
+ ```
381
+
382
+ </td>
383
+ <td>
384
+
385
+ ```gherkin
386
+ Scenario: Pagina tiene meta descripcion
387
+
388
+ Given estoy en una pagina publicada
389
+ When la pagina carga completamente
390
+ Then una etiqueta meta description deberia existir
391
+ And la descripcion deberia proveer resumen de pagina
392
+ ```
393
+
394
+ </td>
395
+ </tr>
396
+ </table>
397
+
398
+ ---
399
+
400
+ ## Internationalization
401
+
402
+ ### PB_PUBLIC_010: Should render Spanish version of page `@i18n`
403
+
404
+ <table>
405
+ <tr>
406
+ <th width="50%">English</th>
407
+ <th width="50%">Español</th>
408
+ </tr>
409
+ <tr>
410
+ <td>
411
+
412
+ ```gherkin
413
+ Scenario: Spanish page version renders
414
+
415
+ Given there is a Spanish version of a page
416
+ When I visit the Spanish locale path /es/{slug}
417
+ Or I visit the root path if Spanish is default
418
+ Then the page should render successfully
419
+ And the content should be in Spanish
420
+ ```
421
+
422
+ **Note:** Spanish page may be at /es/{slug} or root depending on locale config.
423
+
424
+ </td>
425
+ <td>
426
+
427
+ ```gherkin
428
+ Scenario: Version en espanol de pagina renderiza
429
+
430
+ Given existe una version en espanol de una pagina
431
+ When visito la ruta de locale espanol /es/{slug}
432
+ Or visito la ruta raiz si espanol es el default
433
+ Then la pagina deberia renderizar exitosamente
434
+ And el contenido deberia estar en espanol
435
+ ```
436
+
437
+ **Nota:** La pagina en espanol puede estar en /es/{slug} o raiz segun config de locale.
438
+
439
+ </td>
440
+ </tr>
441
+ </table>
442
+
443
+ ---
444
+
445
+ ## Block Interactions
446
+
447
+ ### PB_PUBLIC_011: Should have clickable CTA button
448
+
449
+ <table>
450
+ <tr>
451
+ <th width="50%">English</th>
452
+ <th width="50%">Español</th>
453
+ </tr>
454
+ <tr>
455
+ <td>
456
+
457
+ ```gherkin
458
+ Scenario: CTA button is interactive
459
+
460
+ Given I am on a published page with CTA Section
461
+ When the page loads completely
462
+ And the CTA section is visible
463
+ Then the primary CTA button should have an href attribute
464
+ And the button should be clickable
465
+ ```
466
+
467
+ </td>
468
+ <td>
469
+
470
+ ```gherkin
471
+ Scenario: Boton CTA es interactivo
472
+
473
+ Given estoy en una pagina publicada con CTA Section
474
+ When la pagina carga completamente
475
+ And la seccion CTA esta visible
476
+ Then el boton CTA primario deberia tener un atributo href
477
+ And el boton deberia ser clickeable
478
+ ```
479
+
480
+ </td>
481
+ </tr>
482
+ </table>
483
+
484
+ ---
485
+
486
+ ### PB_PUBLIC_012: Should have clickable Hero CTA
487
+
488
+ <table>
489
+ <tr>
490
+ <th width="50%">English</th>
491
+ <th width="50%">Español</th>
492
+ </tr>
493
+ <tr>
494
+ <td>
495
+
496
+ ```gherkin
497
+ Scenario: Hero CTA button is interactive
498
+
499
+ Given I am on a published page with Hero block
500
+ When the page loads completely
501
+ And the Hero block is visible
502
+ Then the Hero CTA button should have an href attribute (if present)
503
+ ```
504
+
505
+ </td>
506
+ <td>
507
+
508
+ ```gherkin
509
+ Scenario: Boton CTA del Hero es interactivo
510
+
511
+ Given estoy en una pagina publicada con bloque Hero
512
+ When la pagina carga completamente
513
+ And el bloque Hero esta visible
514
+ Then el boton CTA del Hero deberia tener un atributo href (si esta presente)
515
+ ```
516
+
517
+ </td>
518
+ </tr>
519
+ </table>
520
+
521
+ ---
522
+
523
+ ## Page Structure
524
+
525
+ ### PB_PUBLIC_013: Should have correct page data attributes
526
+
527
+ <table>
528
+ <tr>
529
+ <th width="50%">English</th>
530
+ <th width="50%">Español</th>
531
+ </tr>
532
+ <tr>
533
+ <td>
534
+
535
+ ```gherkin
536
+ Scenario: Page has correct data attributes
537
+
538
+ Given I am on a published page
539
+ When the page loads completely
540
+ Then an element with data-page-id should exist
541
+ And an element with data-page-slug should exist
542
+ And the slug attribute should match the URL slug
543
+ ```
544
+
545
+ </td>
546
+ <td>
547
+
548
+ ```gherkin
549
+ Scenario: Pagina tiene atributos data correctos
550
+
551
+ Given estoy en una pagina publicada
552
+ When la pagina carga completamente
553
+ Then un elemento con data-page-id deberia existir
554
+ And un elemento con data-page-slug deberia existir
555
+ And el atributo slug deberia coincidir con el slug de URL
556
+ ```
557
+
558
+ </td>
559
+ </tr>
560
+ </table>
561
+
562
+ ---
563
+
564
+ ### PB_PUBLIC_014: Should have block data attributes
565
+
566
+ <table>
567
+ <tr>
568
+ <th width="50%">English</th>
569
+ <th width="50%">Español</th>
570
+ </tr>
571
+ <tr>
572
+ <td>
573
+
574
+ ```gherkin
575
+ Scenario: Blocks have data attributes
576
+
577
+ Given I am on a published page with blocks
578
+ When the page loads completely
579
+ Then elements with data-block-id should exist
580
+ And elements with data-block-slug should exist
581
+ And there should be at least 1 block with data attributes
582
+ ```
583
+
584
+ </td>
585
+ <td>
586
+
587
+ ```gherkin
588
+ Scenario: Bloques tienen atributos data
589
+
590
+ Given estoy en una pagina publicada con bloques
591
+ When la pagina carga completamente
592
+ Then elementos con data-block-id deberian existir
593
+ And elementos con data-block-slug deberian existir
594
+ And deberia haber al menos 1 bloque con atributos data
595
+ ```
596
+
597
+ </td>
598
+ </tr>
599
+ </table>
600
+
601
+ ---
602
+
603
+ ## Performance
604
+
605
+ ### PB_PUBLIC_015: Should load page within reasonable time
606
+
607
+ <table>
608
+ <tr>
609
+ <th width="50%">English</th>
610
+ <th width="50%">Español</th>
611
+ </tr>
612
+ <tr>
613
+ <td>
614
+
615
+ ```gherkin
616
+ Scenario: Page loads within performance threshold
617
+
618
+ Given I am about to visit a published page
619
+ When I start timing the page load
620
+ And I visit and wait for the page to load
621
+ Then the total load time should be less than 5000ms
622
+ ```
623
+
624
+ **Performance Target:** Page should load within 5 seconds.
625
+
626
+ </td>
627
+ <td>
628
+
629
+ ```gherkin
630
+ Scenario: Pagina carga dentro de umbral de rendimiento
631
+
632
+ Given estoy por visitar una pagina publicada
633
+ When inicio el cronometro de carga de pagina
634
+ And visito y espero que la pagina cargue
635
+ Then el tiempo total de carga deberia ser menor a 5000ms
636
+ ```
637
+
638
+ **Objetivo de Rendimiento:** La pagina deberia cargar en menos de 5 segundos.
639
+
640
+ </td>
641
+ </tr>
642
+ </table>
643
+
644
+ ---
645
+
646
+ ## UI Elements / Elementos UI
647
+
648
+ ### Page Structure
649
+
650
+ | Element | Selector | Description / Descripción |
651
+ |---------|----------|---------------------------|
652
+ | Page Container | `[data-page-id]` | Main page container |
653
+ | Page Slug | `[data-page-slug]` | Element with slug attribute |
654
+ | Block Container | `[data-block-id]` | Individual block container |
655
+ | Block Slug | `[data-block-slug]` | Block type identifier |
656
+
657
+ ### Block Components
658
+
659
+ | Element | Selector | Description / Descripción |
660
+ |---------|----------|---------------------------|
661
+ | Hero Section | `[data-block-slug="hero"]` | Hero block |
662
+ | Hero Title | Hero section h1/h2 | Main hero heading |
663
+ | Hero CTA | Hero button with href | Call-to-action button |
664
+ | Features Grid | `[data-block-slug="features"]` | Features section |
665
+ | CTA Section | `[data-block-slug="cta"]` | CTA block |
666
+ | CTA Button | CTA button with href | Primary CTA |
667
+ | Testimonials | `[data-block-slug="testimonials"]` | Testimonials section |
668
+
669
+ ### SEO Elements
670
+
671
+ | Element | Selector | Description / Descripción |
672
+ |---------|----------|---------------------------|
673
+ | Page Title | `title` | HTML title tag |
674
+ | Meta Description | `meta[name="description"]` | SEO description |
675
+
676
+ ---
677
+
678
+ ## Summary / Resumen
679
+
680
+ | Test ID | Block | Description / Descripción | Tags |
681
+ |---------|-------|---------------------------|------|
682
+ | PB_PUBLIC_001 | Published Page | Render with HTTP 200 | `@smoke` |
683
+ | PB_PUBLIC_002 | Published Page | Display Hero block | |
684
+ | PB_PUBLIC_003 | Published Page | Display Features Grid | |
685
+ | PB_PUBLIC_004 | Published Page | Display CTA Section | |
686
+ | PB_PUBLIC_005 | Published Page | Display Testimonials | |
687
+ | PB_PUBLIC_006 | Published Page | Display all expected blocks | |
688
+ | PB_PUBLIC_007 | Draft Page | Return 404 for draft | |
689
+ | PB_PUBLIC_008 | SEO | Correct meta title | |
690
+ | PB_PUBLIC_009 | SEO | Meta description | |
691
+ | PB_PUBLIC_010 | i18n | Spanish version | `@i18n` |
692
+ | PB_PUBLIC_011 | Interactions | Clickable CTA button | |
693
+ | PB_PUBLIC_012 | Interactions | Clickable Hero CTA | |
694
+ | PB_PUBLIC_013 | Structure | Page data attributes | |
695
+ | PB_PUBLIC_014 | Structure | Block data attributes | |
696
+ | PB_PUBLIC_015 | Performance | Load within 5s | |