@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.
- package/package.json +8 -4
- package/templates/(public)/page.tsx +1 -1
- package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_docs/README.md +215 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
- package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
- package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
- package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
- package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
- package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
- package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
- package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
- package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
- package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
- package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
- package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
- package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
- package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
- package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
- package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
- package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
- package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
- package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +78 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +86 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +176 -0
- package/tests/cypress/src/entities/index.ts +14 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +245 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +362 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +500 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress.config.ts +150 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/config/role-config.test.ts +529 -0
- package/tests/jest/jest.config.ts +81 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +367 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/user-roles/role-helpers.test.ts +432 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +15 -0
- package/LICENSE +0 -21
|
@@ -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 | |
|