@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,614 @@
1
+ # Public Post Display - UAT (Format: BDD/Gherkin - Bilingual)
2
+
3
+ > **Test File:** `posts-public.cy.ts`
4
+ > **Format:** Behavior-Driven Development (BDD) with Given/When/Then
5
+ > **Languages:** English / Spanish (side-by-side)
6
+ > **Total Tests:** 13 (10 active, 3 skipped)
7
+
8
+ ---
9
+
10
+ ## Feature: Public Post Display
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 blog posts**
22
+ So that **I can read the website content**
23
+
24
+ **Key Functionality:**
25
+ - Published posts render at /blog/[slug]
26
+ - Post header, excerpt, and blocks display
27
+ - Categories show with colors
28
+ - Unpublished posts return 404
29
+
30
+ </td>
31
+ <td>
32
+
33
+ Como **visitante publico**
34
+ Quiero **ver posts de blog publicados**
35
+ Para **leer el contenido del sitio web**
36
+
37
+ **Funcionalidad Clave:**
38
+ - Posts publicados renderizan en /blog/[slug]
39
+ - Encabezado, extracto y bloques del post se muestran
40
+ - Categorias se muestran con colores
41
+ - Posts no publicados retornan 404
42
+
43
+ </td>
44
+ </tr>
45
+ </table>
46
+
47
+ ---
48
+
49
+ ## Post Rendering
50
+
51
+ ### POST-PUB-001: Should render a published post `@smoke`
52
+
53
+ <table>
54
+ <tr>
55
+ <th width="50%">English</th>
56
+ <th width="50%">Español</th>
57
+ </tr>
58
+ <tr>
59
+ <td>
60
+
61
+ ```gherkin
62
+ Scenario: Published post renders successfully
63
+
64
+ Given there is a published post "welcome-to-our-blog"
65
+ When I visit the post at /blog/welcome-to-our-blog
66
+ Then the post should load successfully
67
+ And the post container should be visible
68
+ ```
69
+
70
+ </td>
71
+ <td>
72
+
73
+ ```gherkin
74
+ Scenario: Post publicado renderiza exitosamente
75
+
76
+ Given existe un post publicado "welcome-to-our-blog"
77
+ When visito el post en /blog/welcome-to-our-blog
78
+ Then el post deberia cargar exitosamente
79
+ And el contenedor del post deberia estar visible
80
+ ```
81
+
82
+ </td>
83
+ </tr>
84
+ </table>
85
+
86
+ ---
87
+
88
+ ### POST-PUB-002: Should display post header
89
+
90
+ <table>
91
+ <tr>
92
+ <th width="50%">English</th>
93
+ <th width="50%">Español</th>
94
+ </tr>
95
+ <tr>
96
+ <td>
97
+
98
+ ```gherkin
99
+ Scenario: Post header displays correctly
100
+
101
+ Given I am on a published post page
102
+ When the post loads completely
103
+ Then the post header should be visible
104
+ And the title should contain "Welcome"
105
+ ```
106
+
107
+ </td>
108
+ <td>
109
+
110
+ ```gherkin
111
+ Scenario: Encabezado del post se muestra correctamente
112
+
113
+ Given estoy en una pagina de post publicado
114
+ When el post carga completamente
115
+ Then el encabezado del post deberia estar visible
116
+ And el titulo deberia contener "Welcome"
117
+ ```
118
+
119
+ </td>
120
+ </tr>
121
+ </table>
122
+
123
+ ---
124
+
125
+ ### POST-PUB-003: Should display post excerpt
126
+
127
+ <table>
128
+ <tr>
129
+ <th width="50%">English</th>
130
+ <th width="50%">Español</th>
131
+ </tr>
132
+ <tr>
133
+ <td>
134
+
135
+ ```gherkin
136
+ Scenario: Post excerpt is visible
137
+
138
+ Given I am on a published post page
139
+ When the post loads completely
140
+ Then the post excerpt should be visible
141
+ And the excerpt should provide a summary
142
+ ```
143
+
144
+ </td>
145
+ <td>
146
+
147
+ ```gherkin
148
+ Scenario: Extracto del post es visible
149
+
150
+ Given estoy en una pagina de post publicado
151
+ When el post carga completamente
152
+ Then el extracto del post deberia estar visible
153
+ And el extracto deberia proveer un resumen
154
+ ```
155
+
156
+ </td>
157
+ </tr>
158
+ </table>
159
+
160
+ ---
161
+
162
+ ## Block Rendering
163
+
164
+ ### POST-PUB-004: Should render post blocks
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: Post blocks render correctly
176
+
177
+ Given I am on a published post page
178
+ When the post loads completely
179
+ Then the post content area should be visible
180
+ And headings (h1, h2, h3) should exist within content
181
+ ```
182
+
183
+ </td>
184
+ <td>
185
+
186
+ ```gherkin
187
+ Scenario: Bloques del post renderizan correctamente
188
+
189
+ Given estoy en una pagina de post publicado
190
+ When el post carga completamente
191
+ Then el area de contenido del post deberia estar visible
192
+ And encabezados (h1, h2, h3) deberian existir dentro del contenido
193
+ ```
194
+
195
+ </td>
196
+ </tr>
197
+ </table>
198
+
199
+ ---
200
+
201
+ ### POST-PUB-005: Should render hero block correctly
202
+
203
+ <table>
204
+ <tr>
205
+ <th width="50%">English</th>
206
+ <th width="50%">Español</th>
207
+ </tr>
208
+ <tr>
209
+ <td>
210
+
211
+ ```gherkin
212
+ Scenario: Hero block renders with content
213
+
214
+ Given I am on a published post with a hero block
215
+ When the post loads completely
216
+ Then the content area should contain "Welcome" text
217
+ And the hero content should be properly formatted
218
+ ```
219
+
220
+ </td>
221
+ <td>
222
+
223
+ ```gherkin
224
+ Scenario: Bloque hero renderiza con contenido
225
+
226
+ Given estoy en un post publicado con bloque hero
227
+ When el post carga completamente
228
+ Then el area de contenido deberia contener texto "Welcome"
229
+ And el contenido hero deberia estar correctamente formateado
230
+ ```
231
+
232
+ </td>
233
+ </tr>
234
+ </table>
235
+
236
+ ---
237
+
238
+ ## Category Display
239
+
240
+ ### POST-PUB-006: Should display category badges
241
+
242
+ <table>
243
+ <tr>
244
+ <th width="50%">English</th>
245
+ <th width="50%">Español</th>
246
+ </tr>
247
+ <tr>
248
+ <td>
249
+
250
+ ```gherkin
251
+ Scenario: Category badges are displayed
252
+
253
+ Given I am on a published post with categories
254
+ When the post loads completely
255
+ Then the "News" category badge should be visible
256
+ And category badges should be clickable or labeled
257
+ ```
258
+
259
+ </td>
260
+ <td>
261
+
262
+ ```gherkin
263
+ Scenario: Insignias de categoria se muestran
264
+
265
+ Given estoy en un post publicado con categorias
266
+ When el post carga completamente
267
+ Then la insignia de categoria "News" deberia estar visible
268
+ And las insignias de categoria deberian ser clickeables o etiquetadas
269
+ ```
270
+
271
+ </td>
272
+ </tr>
273
+ </table>
274
+
275
+ ---
276
+
277
+ ### POST-PUB-007: Should display category badges with colors
278
+
279
+ <table>
280
+ <tr>
281
+ <th width="50%">English</th>
282
+ <th width="50%">Español</th>
283
+ </tr>
284
+ <tr>
285
+ <td>
286
+
287
+ ```gherkin
288
+ Scenario: Category badges have color styling
289
+
290
+ Given I am on a published post with categories
291
+ When the post loads completely
292
+ Then category badges should have color styling
293
+ And badges should have background or text color defined
294
+ ```
295
+
296
+ </td>
297
+ <td>
298
+
299
+ ```gherkin
300
+ Scenario: Insignias de categoria tienen estilo de color
301
+
302
+ Given estoy en un post publicado con categorias
303
+ When el post carga completamente
304
+ Then las insignias de categoria deberian tener estilo de color
305
+ And las insignias deberian tener color de fondo o texto definido
306
+ ```
307
+
308
+ </td>
309
+ </tr>
310
+ </table>
311
+
312
+ ---
313
+
314
+ ## SEO Meta Tags `@in-development`
315
+
316
+ ### POST-PUB-008: Should have correct page title ⏸️ SKIPPED
317
+
318
+ <table>
319
+ <tr>
320
+ <th width="50%">English</th>
321
+ <th width="50%">Español</th>
322
+ </tr>
323
+ <tr>
324
+ <td>
325
+
326
+ ```gherkin
327
+ @in-development
328
+ Scenario: Page title includes post title
329
+
330
+ Given I am on a published post page
331
+ When the post loads completely
332
+ Then the page title should include "Welcome"
333
+ And the title tag should be SEO-friendly
334
+ ```
335
+
336
+ **Status:** Skipped - SEO meta tags implementation pending.
337
+
338
+ </td>
339
+ <td>
340
+
341
+ ```gherkin
342
+ @in-development
343
+ Scenario: Titulo de pagina incluye titulo del post
344
+
345
+ Given estoy en una pagina de post publicado
346
+ When el post carga completamente
347
+ Then el titulo de la pagina deberia incluir "Welcome"
348
+ And la etiqueta title deberia ser SEO-friendly
349
+ ```
350
+
351
+ **Estado:** Omitido - Implementacion de meta tags SEO pendiente.
352
+
353
+ </td>
354
+ </tr>
355
+ </table>
356
+
357
+ ---
358
+
359
+ ### POST-PUB-009: Should have meta description ⏸️ SKIPPED
360
+
361
+ <table>
362
+ <tr>
363
+ <th width="50%">English</th>
364
+ <th width="50%">Español</th>
365
+ </tr>
366
+ <tr>
367
+ <td>
368
+
369
+ ```gherkin
370
+ @in-development
371
+ Scenario: Meta description exists
372
+
373
+ Given I am on a published post page
374
+ When the post loads completely
375
+ Then a meta description tag should exist in head
376
+ ```
377
+
378
+ **Status:** Skipped - SEO meta tags implementation pending.
379
+
380
+ </td>
381
+ <td>
382
+
383
+ ```gherkin
384
+ @in-development
385
+ Scenario: Meta descripcion existe
386
+
387
+ Given estoy en una pagina de post publicado
388
+ When el post carga completamente
389
+ Then una etiqueta meta description deberia existir en head
390
+ ```
391
+
392
+ **Estado:** Omitido - Implementacion de meta tags SEO pendiente.
393
+
394
+ </td>
395
+ </tr>
396
+ </table>
397
+
398
+ ---
399
+
400
+ ### POST-PUB-010: Should have OG tags for social sharing ⏸️ SKIPPED
401
+
402
+ <table>
403
+ <tr>
404
+ <th width="50%">English</th>
405
+ <th width="50%">Español</th>
406
+ </tr>
407
+ <tr>
408
+ <td>
409
+
410
+ ```gherkin
411
+ @in-development
412
+ Scenario: Open Graph tags exist
413
+
414
+ Given I am on a published post page
415
+ When the post loads completely
416
+ Then Open Graph meta tags should exist
417
+ And there should be at least 1 og: property
418
+ ```
419
+
420
+ **Status:** Skipped - SEO meta tags implementation pending.
421
+
422
+ </td>
423
+ <td>
424
+
425
+ ```gherkin
426
+ @in-development
427
+ Scenario: Etiquetas Open Graph existen
428
+
429
+ Given estoy en una pagina de post publicado
430
+ When el post carga completamente
431
+ Then las etiquetas meta Open Graph deberian existir
432
+ And deberia haber al menos 1 propiedad og:
433
+ ```
434
+
435
+ **Estado:** Omitido - Implementacion de meta tags SEO pendiente.
436
+
437
+ </td>
438
+ </tr>
439
+ </table>
440
+
441
+ ---
442
+
443
+ ## Unpublished Posts
444
+
445
+ ### POST-PUB-011: Should not display unpublished posts
446
+
447
+ <table>
448
+ <tr>
449
+ <th width="50%">English</th>
450
+ <th width="50%">Español</th>
451
+ </tr>
452
+ <tr>
453
+ <td>
454
+
455
+ ```gherkin
456
+ Scenario: Unpublished posts are not accessible
457
+
458
+ Given there is a draft post "typescript-best-practices"
459
+ When I try to visit the post at /blog/typescript-best-practices
460
+ Then the page should show a 404 error
461
+ Or the page should contain "not found" text
462
+ ```
463
+
464
+ **Security Verification:**
465
+ Draft posts must never be accessible publicly.
466
+
467
+ </td>
468
+ <td>
469
+
470
+ ```gherkin
471
+ Scenario: Posts no publicados no son accesibles
472
+
473
+ Given existe un post borrador "typescript-best-practices"
474
+ When intento visitar el post en /blog/typescript-best-practices
475
+ Then la pagina deberia mostrar un error 404
476
+ Or la pagina deberia contener texto "not found"
477
+ ```
478
+
479
+ **Verificacion de Seguridad:**
480
+ Los posts borrador nunca deben ser accesibles publicamente.
481
+
482
+ </td>
483
+ </tr>
484
+ </table>
485
+
486
+ ---
487
+
488
+ ## 404 Not Found
489
+
490
+ ### POST-PUB-012: Should show 404 for non-existent post
491
+
492
+ <table>
493
+ <tr>
494
+ <th width="50%">English</th>
495
+ <th width="50%">Español</th>
496
+ </tr>
497
+ <tr>
498
+ <td>
499
+
500
+ ```gherkin
501
+ Scenario: Non-existent post shows 404
502
+
503
+ Given there is no post with slug "non-existent-post-slug-12345"
504
+ When I try to visit /blog/non-existent-post-slug-12345
505
+ Then the page should show a 404 error
506
+ Or the page should contain "not found" text
507
+ ```
508
+
509
+ </td>
510
+ <td>
511
+
512
+ ```gherkin
513
+ Scenario: Post no existente muestra 404
514
+
515
+ Given no existe un post con slug "non-existent-post-slug-12345"
516
+ When intento visitar /blog/non-existent-post-slug-12345
517
+ Then la pagina deberia mostrar un error 404
518
+ Or la pagina deberia contener texto "not found"
519
+ ```
520
+
521
+ </td>
522
+ </tr>
523
+ </table>
524
+
525
+ ---
526
+
527
+ ## Featured Image
528
+
529
+ ### POST-PUB-013: Should display featured image when present
530
+
531
+ <table>
532
+ <tr>
533
+ <th width="50%">English</th>
534
+ <th width="50%">Español</th>
535
+ </tr>
536
+ <tr>
537
+ <td>
538
+
539
+ ```gherkin
540
+ Scenario: Featured image displays when available
541
+
542
+ Given I am on a published post
543
+ When the post loads completely
544
+ And the post has a featured image
545
+ Then the featured image should be visible in the header
546
+
547
+ But if the post has no featured image
548
+ Then it should still render without error
549
+ ```
550
+
551
+ **Note:** Featured image is an optional field.
552
+
553
+ </td>
554
+ <td>
555
+
556
+ ```gherkin
557
+ Scenario: Imagen destacada se muestra cuando esta disponible
558
+
559
+ Given estoy en un post publicado
560
+ When el post carga completamente
561
+ And el post tiene una imagen destacada
562
+ Then la imagen destacada deberia estar visible en el encabezado
563
+
564
+ But si el post no tiene imagen destacada
565
+ Then deberia renderizar sin error igualmente
566
+ ```
567
+
568
+ **Nota:** La imagen destacada es un campo opcional.
569
+
570
+ </td>
571
+ </tr>
572
+ </table>
573
+
574
+ ---
575
+
576
+ ## UI Elements / Elementos UI
577
+
578
+ ### Post Structure
579
+
580
+ | Element | Selector | Description / Descripción |
581
+ |---------|----------|---------------------------|
582
+ | Post Container | `[data-cy="public-post"]` | Main post container |
583
+ | Post Header | `[data-cy="post-header"]` | Header section |
584
+ | Post Title | `[data-cy="post-title"]` | Post title heading |
585
+ | Post Excerpt | `[data-cy="post-excerpt"]` | Post excerpt/summary |
586
+ | Post Content | `[data-cy="post-content"]` | Main content area |
587
+ | Featured Image | `[data-cy="post-featured-image"]` | Featured image |
588
+
589
+ ### Category Elements
590
+
591
+ | Element | Selector | Description / Descripción |
592
+ |---------|----------|---------------------------|
593
+ | Categories Display | `[data-cy="post-categories"]` | Categories container |
594
+ | Category Badge | `[data-cy="category-badge-*"]` | Individual category badge |
595
+
596
+ ---
597
+
598
+ ## Summary / Resumen
599
+
600
+ | Test ID | Block | Description / Descripción | Status | Tags |
601
+ |---------|-------|---------------------------|--------|------|
602
+ | POST-PUB-001 | Post Rendering | Render published post | Active | `@smoke` |
603
+ | POST-PUB-002 | Post Rendering | Display header | Active | |
604
+ | POST-PUB-003 | Post Rendering | Display excerpt | Active | |
605
+ | POST-PUB-004 | Block Rendering | Render blocks | Active | |
606
+ | POST-PUB-005 | Block Rendering | Render hero | Active | |
607
+ | POST-PUB-006 | Categories | Display badges | Active | |
608
+ | POST-PUB-007 | Categories | Badges with colors | Active | |
609
+ | POST-PUB-008 | SEO | Page title | ⏸️ Skip | `@in-development` |
610
+ | POST-PUB-009 | SEO | Meta description | ⏸️ Skip | `@in-development` |
611
+ | POST-PUB-010 | SEO | OG tags | ⏸️ Skip | `@in-development` |
612
+ | POST-PUB-011 | Access Control | Not display unpublished | Active | |
613
+ | POST-PUB-012 | Error Handling | 404 for non-existent | Active | |
614
+ | POST-PUB-013 | Media | Featured image | Active | |