@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,432 @@
|
|
|
1
|
+
# Pages List - Admin UI (Format: BDD/Gherkin - Bilingual)
|
|
2
|
+
|
|
3
|
+
> **Test File:** `pages-list.cy.ts`
|
|
4
|
+
> **Format:** Behavior-Driven Development (BDD) with Given/When/Then
|
|
5
|
+
> **Languages:** English / Spanish (side-by-side)
|
|
6
|
+
> **Total Tests:** 9
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Feature: Pages List Management
|
|
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 an **Owner**
|
|
21
|
+
I want to **manage pages from the list view**
|
|
22
|
+
So that **I can navigate, search, filter, and delete pages**
|
|
23
|
+
|
|
24
|
+
**Functionality:**
|
|
25
|
+
- Navigate to pages list
|
|
26
|
+
- Navigate to create/edit pages
|
|
27
|
+
- Search pages by title
|
|
28
|
+
- Filter pages by status
|
|
29
|
+
- Delete pages with confirmation
|
|
30
|
+
|
|
31
|
+
</td>
|
|
32
|
+
<td>
|
|
33
|
+
|
|
34
|
+
Como **Owner**
|
|
35
|
+
Quiero **gestionar paginas desde la vista de lista**
|
|
36
|
+
Para **navegar, buscar, filtrar y eliminar paginas**
|
|
37
|
+
|
|
38
|
+
**Funcionalidad:**
|
|
39
|
+
- Navegar a lista de paginas
|
|
40
|
+
- Navegar a crear/editar paginas
|
|
41
|
+
- Buscar paginas por titulo
|
|
42
|
+
- Filtrar paginas por estado
|
|
43
|
+
- Eliminar paginas con confirmacion
|
|
44
|
+
|
|
45
|
+
</td>
|
|
46
|
+
</tr>
|
|
47
|
+
</table>
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Navigation
|
|
52
|
+
|
|
53
|
+
### PB-LIST-001: Should navigate to pages list `@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: Navigate to pages list
|
|
65
|
+
|
|
66
|
+
Given I am logged in as Owner
|
|
67
|
+
When I navigate to the pages list
|
|
68
|
+
And the API returns the pages
|
|
69
|
+
Then the list page should be visible
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
</td>
|
|
73
|
+
<td>
|
|
74
|
+
|
|
75
|
+
```gherkin
|
|
76
|
+
Scenario: Navegar a lista de paginas
|
|
77
|
+
|
|
78
|
+
Given estoy logueado como Owner
|
|
79
|
+
When navego a la lista de paginas
|
|
80
|
+
And la API retorna las paginas
|
|
81
|
+
Then la pagina de lista deberia estar visible
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
</td>
|
|
85
|
+
</tr>
|
|
86
|
+
</table>
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### PB-LIST-002: Should navigate to create page from list
|
|
91
|
+
|
|
92
|
+
<table>
|
|
93
|
+
<tr>
|
|
94
|
+
<th width="50%">English</th>
|
|
95
|
+
<th width="50%">Español</th>
|
|
96
|
+
</tr>
|
|
97
|
+
<tr>
|
|
98
|
+
<td>
|
|
99
|
+
|
|
100
|
+
```gherkin
|
|
101
|
+
Scenario: Navigate to create page
|
|
102
|
+
|
|
103
|
+
Given I am on the pages list
|
|
104
|
+
When I click the create page button
|
|
105
|
+
Then the URL should include /dashboard/pages/create
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
</td>
|
|
109
|
+
<td>
|
|
110
|
+
|
|
111
|
+
```gherkin
|
|
112
|
+
Scenario: Navegar a crear pagina
|
|
113
|
+
|
|
114
|
+
Given estoy en la lista de paginas
|
|
115
|
+
When hago clic en el boton crear pagina
|
|
116
|
+
Then la URL deberia incluir /dashboard/pages/create
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
</td>
|
|
120
|
+
</tr>
|
|
121
|
+
</table>
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### PB-LIST-003: Should navigate to edit page from list
|
|
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: Navigate to edit page
|
|
137
|
+
|
|
138
|
+
Given I am on the pages list
|
|
139
|
+
And there is at least one page in the list
|
|
140
|
+
When I click the menu trigger for the first row
|
|
141
|
+
And I click "Edit" in the dropdown
|
|
142
|
+
Then the URL should include /edit
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
</td>
|
|
146
|
+
<td>
|
|
147
|
+
|
|
148
|
+
```gherkin
|
|
149
|
+
Scenario: Navegar a editar pagina
|
|
150
|
+
|
|
151
|
+
Given estoy en la lista de paginas
|
|
152
|
+
And hay al menos una pagina en la lista
|
|
153
|
+
When hago clic en el menu de la primera fila
|
|
154
|
+
And hago clic en "Editar" en el dropdown
|
|
155
|
+
Then la URL deberia incluir /edit
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
</td>
|
|
159
|
+
</tr>
|
|
160
|
+
</table>
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Search
|
|
165
|
+
|
|
166
|
+
### PB-LIST-004: Should search pages by title
|
|
167
|
+
|
|
168
|
+
<table>
|
|
169
|
+
<tr>
|
|
170
|
+
<th width="50%">English</th>
|
|
171
|
+
<th width="50%">Español</th>
|
|
172
|
+
</tr>
|
|
173
|
+
<tr>
|
|
174
|
+
<td>
|
|
175
|
+
|
|
176
|
+
```gherkin
|
|
177
|
+
Scenario: Search pages by title
|
|
178
|
+
|
|
179
|
+
Given I am on the pages list
|
|
180
|
+
When I search for "About"
|
|
181
|
+
And the API returns filtered results
|
|
182
|
+
Then pages matching "About" should be visible
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
</td>
|
|
186
|
+
<td>
|
|
187
|
+
|
|
188
|
+
```gherkin
|
|
189
|
+
Scenario: Buscar paginas por titulo
|
|
190
|
+
|
|
191
|
+
Given estoy en la lista de paginas
|
|
192
|
+
When busco "About"
|
|
193
|
+
And la API retorna resultados filtrados
|
|
194
|
+
Then las paginas que coinciden con "About" deberian estar visibles
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
</td>
|
|
198
|
+
</tr>
|
|
199
|
+
</table>
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### PB-LIST-005: Should clear search and show all pages
|
|
204
|
+
|
|
205
|
+
<table>
|
|
206
|
+
<tr>
|
|
207
|
+
<th width="50%">English</th>
|
|
208
|
+
<th width="50%">Español</th>
|
|
209
|
+
</tr>
|
|
210
|
+
<tr>
|
|
211
|
+
<td>
|
|
212
|
+
|
|
213
|
+
```gherkin
|
|
214
|
+
Scenario: Clear search filter
|
|
215
|
+
|
|
216
|
+
Given I am on the pages list
|
|
217
|
+
And I have performed a search
|
|
218
|
+
When I clear the search field
|
|
219
|
+
And the API returns all pages
|
|
220
|
+
Then at least 1 page should be visible
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
</td>
|
|
224
|
+
<td>
|
|
225
|
+
|
|
226
|
+
```gherkin
|
|
227
|
+
Scenario: Limpiar filtro de busqueda
|
|
228
|
+
|
|
229
|
+
Given estoy en la lista de paginas
|
|
230
|
+
And he realizado una busqueda
|
|
231
|
+
When limpio el campo de busqueda
|
|
232
|
+
And la API retorna todas las paginas
|
|
233
|
+
Then al menos 1 pagina deberia estar visible
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
</td>
|
|
237
|
+
</tr>
|
|
238
|
+
</table>
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Filters
|
|
243
|
+
|
|
244
|
+
### PB-LIST-006: Should filter pages by published status `@in-develop`
|
|
245
|
+
|
|
246
|
+
<table>
|
|
247
|
+
<tr>
|
|
248
|
+
<th width="50%">English</th>
|
|
249
|
+
<th width="50%">Español</th>
|
|
250
|
+
</tr>
|
|
251
|
+
<tr>
|
|
252
|
+
<td>
|
|
253
|
+
|
|
254
|
+
```gherkin
|
|
255
|
+
Scenario: Filter pages by status
|
|
256
|
+
|
|
257
|
+
Given I am on the pages list
|
|
258
|
+
And the status filter exists
|
|
259
|
+
When I click the filter trigger
|
|
260
|
+
And I select a status option
|
|
261
|
+
Then the list should filter by the selected status
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Note:** Test marked @in-develop - status filter UI pending implementation.
|
|
265
|
+
|
|
266
|
+
</td>
|
|
267
|
+
<td>
|
|
268
|
+
|
|
269
|
+
```gherkin
|
|
270
|
+
Scenario: Filtrar paginas por estado
|
|
271
|
+
|
|
272
|
+
Given estoy en la lista de paginas
|
|
273
|
+
And el filtro de estado existe
|
|
274
|
+
When hago clic en el trigger del filtro
|
|
275
|
+
And selecciono una opcion de estado
|
|
276
|
+
Then la lista deberia filtrarse por el estado seleccionado
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Nota:** Test marcado @in-develop - UI de filtro de estado pendiente de implementar.
|
|
280
|
+
|
|
281
|
+
</td>
|
|
282
|
+
</tr>
|
|
283
|
+
</table>
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Delete
|
|
288
|
+
|
|
289
|
+
### PB-LIST-007: Should show delete confirmation dialog `@in-develop`
|
|
290
|
+
|
|
291
|
+
<table>
|
|
292
|
+
<tr>
|
|
293
|
+
<th width="50%">English</th>
|
|
294
|
+
<th width="50%">Español</th>
|
|
295
|
+
</tr>
|
|
296
|
+
<tr>
|
|
297
|
+
<td>
|
|
298
|
+
|
|
299
|
+
```gherkin
|
|
300
|
+
Scenario: Show delete confirmation dialog
|
|
301
|
+
|
|
302
|
+
Given I am on the pages list
|
|
303
|
+
And I have created a test page via API
|
|
304
|
+
When I search for the test page
|
|
305
|
+
And I open the row menu
|
|
306
|
+
And I click delete in the dropdown
|
|
307
|
+
Then a confirmation dialog should appear
|
|
308
|
+
When I cancel the deletion
|
|
309
|
+
Then the dialog should close
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
</td>
|
|
313
|
+
<td>
|
|
314
|
+
|
|
315
|
+
```gherkin
|
|
316
|
+
Scenario: Mostrar dialogo de confirmacion de eliminacion
|
|
317
|
+
|
|
318
|
+
Given estoy en la lista de paginas
|
|
319
|
+
And he creado una pagina de prueba via API
|
|
320
|
+
When busco la pagina de prueba
|
|
321
|
+
And abro el menu de la fila
|
|
322
|
+
And hago clic en eliminar en el dropdown
|
|
323
|
+
Then deberia aparecer un dialogo de confirmacion
|
|
324
|
+
When cancelo la eliminacion
|
|
325
|
+
Then el dialogo deberia cerrarse
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
</td>
|
|
329
|
+
</tr>
|
|
330
|
+
</table>
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
### PB-LIST-008: Should delete page after confirmation `@in-develop`
|
|
335
|
+
|
|
336
|
+
<table>
|
|
337
|
+
<tr>
|
|
338
|
+
<th width="50%">English</th>
|
|
339
|
+
<th width="50%">Español</th>
|
|
340
|
+
</tr>
|
|
341
|
+
<tr>
|
|
342
|
+
<td>
|
|
343
|
+
|
|
344
|
+
```gherkin
|
|
345
|
+
Scenario: Delete page with confirmation
|
|
346
|
+
|
|
347
|
+
Given I am on the pages list
|
|
348
|
+
And I have created a test page via API
|
|
349
|
+
When I search for the test page
|
|
350
|
+
And I open the row menu
|
|
351
|
+
And I click delete in the dropdown
|
|
352
|
+
And I confirm the deletion
|
|
353
|
+
Then the API should process the delete
|
|
354
|
+
And the page should no longer be in the list
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
</td>
|
|
358
|
+
<td>
|
|
359
|
+
|
|
360
|
+
```gherkin
|
|
361
|
+
Scenario: Eliminar pagina con confirmacion
|
|
362
|
+
|
|
363
|
+
Given estoy en la lista de paginas
|
|
364
|
+
And he creado una pagina de prueba via API
|
|
365
|
+
When busco la pagina de prueba
|
|
366
|
+
And abro el menu de la fila
|
|
367
|
+
And hago clic en eliminar en el dropdown
|
|
368
|
+
And confirmo la eliminacion
|
|
369
|
+
Then la API deberia procesar la eliminacion
|
|
370
|
+
And la pagina ya no deberia estar en la lista
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
</td>
|
|
374
|
+
</tr>
|
|
375
|
+
</table>
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Empty State
|
|
380
|
+
|
|
381
|
+
### PB-LIST-009: Should show empty state when no results match search
|
|
382
|
+
|
|
383
|
+
<table>
|
|
384
|
+
<tr>
|
|
385
|
+
<th width="50%">English</th>
|
|
386
|
+
<th width="50%">Español</th>
|
|
387
|
+
</tr>
|
|
388
|
+
<tr>
|
|
389
|
+
<td>
|
|
390
|
+
|
|
391
|
+
```gherkin
|
|
392
|
+
Scenario: Show empty state for no results
|
|
393
|
+
|
|
394
|
+
Given I am on the pages list
|
|
395
|
+
When I search for "NonExistentPageTitle12345"
|
|
396
|
+
And the API returns no results
|
|
397
|
+
Then an empty state should be shown
|
|
398
|
+
Or a "no results" message should be visible
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
</td>
|
|
402
|
+
<td>
|
|
403
|
+
|
|
404
|
+
```gherkin
|
|
405
|
+
Scenario: Mostrar estado vacio sin resultados
|
|
406
|
+
|
|
407
|
+
Given estoy en la lista de paginas
|
|
408
|
+
When busco "NonExistentPageTitle12345"
|
|
409
|
+
And la API retorna sin resultados
|
|
410
|
+
Then deberia mostrarse un estado vacio
|
|
411
|
+
Or un mensaje de "sin resultados" deberia estar visible
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
</td>
|
|
415
|
+
</tr>
|
|
416
|
+
</table>
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Summary / Resumen
|
|
421
|
+
|
|
422
|
+
| Test ID | Block | Description / Descripción | Tags |
|
|
423
|
+
|---------|-------|---------------------------|------|
|
|
424
|
+
| PB-LIST-001 | Navigation | Navigate to list | `@smoke` |
|
|
425
|
+
| PB-LIST-002 | Navigation | Navigate to create | |
|
|
426
|
+
| PB-LIST-003 | Navigation | Navigate to edit | |
|
|
427
|
+
| PB-LIST-004 | Search | Search by title | |
|
|
428
|
+
| PB-LIST-005 | Search | Clear search | |
|
|
429
|
+
| PB-LIST-006 | Filters | Filter by status | `@in-develop` |
|
|
430
|
+
| PB-LIST-007 | Delete | Show confirmation | `@in-develop` |
|
|
431
|
+
| PB-LIST-008 | Delete | Delete with confirm | `@in-develop` |
|
|
432
|
+
| PB-LIST-009 | Empty State | No results message | |
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pages List - Admin UI Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests for the pages list view in the admin dashboard.
|
|
7
|
+
* Validates navigation, search, filtering, and basic CRUD operations.
|
|
8
|
+
*
|
|
9
|
+
* Tags: @uat, @feat-pages, @admin, @page-builder, @regression
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import * as allure from 'allure-cypress'
|
|
13
|
+
import { PageBuilderPOM, loginAsOwner } from '../../../../src'
|
|
14
|
+
|
|
15
|
+
describe('Pages List - Admin UI', {
|
|
16
|
+
tags: ['@uat', '@feat-pages', '@admin', '@page-builder', '@regression']
|
|
17
|
+
}, () => {
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
allure.epic('Page Builder')
|
|
20
|
+
allure.feature('Pages List')
|
|
21
|
+
|
|
22
|
+
// Setup API intercepts BEFORE login and navigation
|
|
23
|
+
PageBuilderPOM.setupApiIntercepts()
|
|
24
|
+
loginAsOwner()
|
|
25
|
+
PageBuilderPOM.visitList()
|
|
26
|
+
PageBuilderPOM.api.waitForList()
|
|
27
|
+
PageBuilderPOM.waitForListLoad()
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
// ============================================================
|
|
31
|
+
// Navigation Tests
|
|
32
|
+
// ============================================================
|
|
33
|
+
describe('Navigation', () => {
|
|
34
|
+
it('PB-LIST-001: Should navigate to pages list', { tags: '@smoke' }, () => {
|
|
35
|
+
allure.story('Navigation')
|
|
36
|
+
allure.severity('critical')
|
|
37
|
+
|
|
38
|
+
PageBuilderPOM.assertListPageVisible()
|
|
39
|
+
cy.log('Successfully navigated to pages list')
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('PB-LIST-002: Should navigate to create page from list', () => {
|
|
43
|
+
allure.story('Navigation')
|
|
44
|
+
allure.severity('normal')
|
|
45
|
+
|
|
46
|
+
PageBuilderPOM.clickCreatePage()
|
|
47
|
+
cy.url().should('include', '/dashboard/pages/create')
|
|
48
|
+
cy.log('Navigated to create page')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('PB-LIST-003: Should navigate to edit page from list', () => {
|
|
52
|
+
allure.story('Navigation')
|
|
53
|
+
allure.severity('normal')
|
|
54
|
+
|
|
55
|
+
// Get first page row and extract ID to use menu selector
|
|
56
|
+
cy.get(PageBuilderPOM.listSelectors.rowGeneric).first()
|
|
57
|
+
.invoke('attr', 'data-cy')
|
|
58
|
+
.then((dataCy) => {
|
|
59
|
+
const pageId = dataCy?.replace('pages-row-', '') || ''
|
|
60
|
+
|
|
61
|
+
// Click menu trigger for this specific row
|
|
62
|
+
PageBuilderPOM.openRowMenu(pageId)
|
|
63
|
+
|
|
64
|
+
// Click Edit in dropdown
|
|
65
|
+
cy.get('[role="menuitem"]').contains(/edit/i).click()
|
|
66
|
+
|
|
67
|
+
cy.url().should('include', '/edit')
|
|
68
|
+
cy.log('Navigated to edit page')
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
// ============================================================
|
|
74
|
+
// Search Tests
|
|
75
|
+
// ============================================================
|
|
76
|
+
describe('Search', () => {
|
|
77
|
+
it('PB-LIST-004: Should search pages by title', () => {
|
|
78
|
+
allure.story('Search')
|
|
79
|
+
allure.severity('normal')
|
|
80
|
+
|
|
81
|
+
PageBuilderPOM.searchPages('About')
|
|
82
|
+
PageBuilderPOM.api.waitForList()
|
|
83
|
+
|
|
84
|
+
cy.get(PageBuilderPOM.listSelectors.rowGeneric).should('exist')
|
|
85
|
+
cy.log('Search by title working')
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('PB-LIST-005: Should clear search and show all pages', () => {
|
|
89
|
+
allure.story('Search')
|
|
90
|
+
allure.severity('normal')
|
|
91
|
+
|
|
92
|
+
cy.get(PageBuilderPOM.listSelectors.rowGeneric).then(($rows) => {
|
|
93
|
+
const initialCount = $rows.length
|
|
94
|
+
|
|
95
|
+
PageBuilderPOM.searchPages('About')
|
|
96
|
+
PageBuilderPOM.api.waitForList()
|
|
97
|
+
|
|
98
|
+
PageBuilderPOM.clearSearch()
|
|
99
|
+
PageBuilderPOM.api.waitForList()
|
|
100
|
+
|
|
101
|
+
cy.get(PageBuilderPOM.listSelectors.rowGeneric).should('have.length.at.least', 1)
|
|
102
|
+
cy.log('Search cleared, showing pages')
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
// ============================================================
|
|
108
|
+
// Filter Tests
|
|
109
|
+
// ============================================================
|
|
110
|
+
describe('Filters', () => {
|
|
111
|
+
it('PB-LIST-006: Should filter pages by published status', () => {
|
|
112
|
+
allure.story('Filters')
|
|
113
|
+
allure.severity('normal')
|
|
114
|
+
|
|
115
|
+
// Check if filter exists in DOM
|
|
116
|
+
cy.get('body').then(($body) => {
|
|
117
|
+
const filterExists = $body.find(PageBuilderPOM.listSelectors.filterStatus).length > 0
|
|
118
|
+
|
|
119
|
+
if (filterExists) {
|
|
120
|
+
// Click filter trigger
|
|
121
|
+
cy.get(PageBuilderPOM.listSelectors.filterStatus).find('button, [role="combobox"]').first().click()
|
|
122
|
+
|
|
123
|
+
// Wait for options to appear and click first non-all option
|
|
124
|
+
cy.get('[role="listbox"] [role="option"], [role="option"]', { timeout: 5000 })
|
|
125
|
+
.should('have.length.at.least', 1)
|
|
126
|
+
.eq(1).click()
|
|
127
|
+
|
|
128
|
+
PageBuilderPOM.api.waitForList()
|
|
129
|
+
cy.log('Filter by published status applied')
|
|
130
|
+
} else {
|
|
131
|
+
// Filter not available - test passes anyway
|
|
132
|
+
cy.log('Status filter not available in this view - skipping')
|
|
133
|
+
}
|
|
134
|
+
})
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
// ============================================================
|
|
139
|
+
// Delete Tests
|
|
140
|
+
// ============================================================
|
|
141
|
+
describe('Delete', () => {
|
|
142
|
+
it('PB-LIST-007: Should show delete confirmation dialog', () => {
|
|
143
|
+
allure.story('CRUD Operations')
|
|
144
|
+
allure.severity('normal')
|
|
145
|
+
|
|
146
|
+
// Create a test page to delete
|
|
147
|
+
const timestamp = Date.now()
|
|
148
|
+
|
|
149
|
+
cy.request({
|
|
150
|
+
method: 'POST',
|
|
151
|
+
url: '/api/v1/pages',
|
|
152
|
+
headers: {
|
|
153
|
+
'x-api-key': 'test_api_key_for_testing_purposes_only_not_a_real_secret_key_abc123',
|
|
154
|
+
'x-team-id': 'team-everpoint-001',
|
|
155
|
+
'Content-Type': 'application/json'
|
|
156
|
+
},
|
|
157
|
+
body: {
|
|
158
|
+
title: `Delete Test ${timestamp}`,
|
|
159
|
+
slug: `delete-test-${timestamp}`,
|
|
160
|
+
locale: 'en',
|
|
161
|
+
published: false,
|
|
162
|
+
blocks: []
|
|
163
|
+
}
|
|
164
|
+
}).then((response) => {
|
|
165
|
+
const pageId = response.body.data.id
|
|
166
|
+
|
|
167
|
+
PageBuilderPOM.visitList()
|
|
168
|
+
PageBuilderPOM.api.waitForList()
|
|
169
|
+
|
|
170
|
+
PageBuilderPOM.searchPages(`Delete Test ${timestamp}`)
|
|
171
|
+
PageBuilderPOM.api.waitForList()
|
|
172
|
+
|
|
173
|
+
// Open row menu using proper selector
|
|
174
|
+
PageBuilderPOM.openRowMenu(pageId)
|
|
175
|
+
|
|
176
|
+
// Click delete in dropdown
|
|
177
|
+
cy.get('[role="menuitem"].text-destructive, [role="menuitem"]:last-child').click()
|
|
178
|
+
|
|
179
|
+
cy.get(PageBuilderPOM.listSelectors.confirmDelete).should('be.visible')
|
|
180
|
+
|
|
181
|
+
// Cancel delete
|
|
182
|
+
cy.get('[role="dialog"] button').not('.bg-destructive, [variant="destructive"]').first().click()
|
|
183
|
+
|
|
184
|
+
// Cleanup via API
|
|
185
|
+
cy.request({
|
|
186
|
+
method: 'DELETE',
|
|
187
|
+
url: `/api/v1/pages/${pageId}`,
|
|
188
|
+
headers: {
|
|
189
|
+
'x-api-key': 'test_api_key_for_testing_purposes_only_not_a_real_secret_key_abc123',
|
|
190
|
+
'x-team-id': 'team-everpoint-001'
|
|
191
|
+
}
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
cy.log('Delete confirmation dialog shown')
|
|
195
|
+
})
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
it('PB-LIST-008: Should delete page after confirmation', () => {
|
|
199
|
+
allure.story('CRUD Operations')
|
|
200
|
+
allure.severity('normal')
|
|
201
|
+
|
|
202
|
+
const timestamp = Date.now()
|
|
203
|
+
|
|
204
|
+
cy.request({
|
|
205
|
+
method: 'POST',
|
|
206
|
+
url: '/api/v1/pages',
|
|
207
|
+
headers: {
|
|
208
|
+
'x-api-key': 'test_api_key_for_testing_purposes_only_not_a_real_secret_key_abc123',
|
|
209
|
+
'x-team-id': 'team-everpoint-001',
|
|
210
|
+
'Content-Type': 'application/json'
|
|
211
|
+
},
|
|
212
|
+
body: {
|
|
213
|
+
title: `To Delete ${timestamp}`,
|
|
214
|
+
slug: `to-delete-${timestamp}`,
|
|
215
|
+
locale: 'en',
|
|
216
|
+
published: false,
|
|
217
|
+
blocks: []
|
|
218
|
+
}
|
|
219
|
+
}).then((response) => {
|
|
220
|
+
const pageId = response.body.data.id
|
|
221
|
+
const pageTitle = `To Delete ${timestamp}`
|
|
222
|
+
|
|
223
|
+
PageBuilderPOM.visitList()
|
|
224
|
+
PageBuilderPOM.api.waitForList()
|
|
225
|
+
|
|
226
|
+
PageBuilderPOM.searchPages(pageTitle)
|
|
227
|
+
PageBuilderPOM.api.waitForList()
|
|
228
|
+
|
|
229
|
+
// Open row menu using proper selector
|
|
230
|
+
PageBuilderPOM.openRowMenu(pageId)
|
|
231
|
+
|
|
232
|
+
// Click delete in dropdown
|
|
233
|
+
cy.get('[role="menuitem"].text-destructive, [role="menuitem"]:last-child').click()
|
|
234
|
+
|
|
235
|
+
// Confirm delete
|
|
236
|
+
cy.get('[role="dialog"] button.bg-destructive, [role="dialog"] button[variant="destructive"]').click()
|
|
237
|
+
|
|
238
|
+
PageBuilderPOM.api.waitForDelete()
|
|
239
|
+
|
|
240
|
+
// Verify page is gone
|
|
241
|
+
PageBuilderPOM.clearSearch()
|
|
242
|
+
PageBuilderPOM.searchPages(pageTitle)
|
|
243
|
+
PageBuilderPOM.api.waitForList()
|
|
244
|
+
|
|
245
|
+
cy.get('body').should('not.contain', pageTitle)
|
|
246
|
+
cy.log('Page deleted successfully')
|
|
247
|
+
})
|
|
248
|
+
})
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
// ============================================================
|
|
252
|
+
// Empty State Tests
|
|
253
|
+
// ============================================================
|
|
254
|
+
describe('Empty State', () => {
|
|
255
|
+
it('PB-LIST-009: Should show empty state when no results match search', () => {
|
|
256
|
+
allure.story('UI States')
|
|
257
|
+
allure.severity('minor')
|
|
258
|
+
|
|
259
|
+
PageBuilderPOM.searchPages('NonExistentPageTitle12345')
|
|
260
|
+
PageBuilderPOM.api.waitForList()
|
|
261
|
+
|
|
262
|
+
cy.get('body').then(($body) => {
|
|
263
|
+
const hasEmptyState = $body.find(PageBuilderPOM.listSelectors.emptyState).length > 0
|
|
264
|
+
const hasNoResults = $body.text().includes('No results') ||
|
|
265
|
+
$body.text().includes('No pages') ||
|
|
266
|
+
$body.text().includes('no encontr')
|
|
267
|
+
|
|
268
|
+
expect(hasEmptyState || hasNoResults).to.be.true
|
|
269
|
+
cy.log('Empty state shown for no matching results')
|
|
270
|
+
})
|
|
271
|
+
})
|
|
272
|
+
})
|
|
273
|
+
})
|