@nextsparkjs/theme-default 0.1.0-beta.20 → 0.1.0-beta.22
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 +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/support/e2e.ts +89 -0
- package/tests/cypress.config.ts +165 -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
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Posts List Management
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [posts, list, search, filter, navigation]
|
|
5
|
+
grepTags: [uat, feat-posts, list]
|
|
6
|
+
coverage: 10
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Posts List - Admin UI
|
|
10
|
+
|
|
11
|
+
> Test suite for managing posts from the list view. Covers navigation, search, filtering by category and status, category badges display, and action buttons accessibility.
|
|
12
|
+
|
|
13
|
+
## Background
|
|
14
|
+
|
|
15
|
+
```gherkin:en
|
|
16
|
+
Given I am logged in as Owner (owner@nextspark.dev)
|
|
17
|
+
And I have navigated to the Posts list
|
|
18
|
+
And the posts list has loaded successfully
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```gherkin:es
|
|
22
|
+
Given estoy logueado como Owner (owner@nextspark.dev)
|
|
23
|
+
And he navegado a la lista de Posts
|
|
24
|
+
And la lista de posts ha cargado exitosamente
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## @test POST-LIST-001: Navigate to posts list
|
|
30
|
+
|
|
31
|
+
### Metadata
|
|
32
|
+
- **Priority:** Critical
|
|
33
|
+
- **Type:** Smoke
|
|
34
|
+
- **Tags:** navigation, page-load
|
|
35
|
+
- **Grep:** `@smoke`
|
|
36
|
+
|
|
37
|
+
```gherkin:en
|
|
38
|
+
Scenario: Navigate to posts list
|
|
39
|
+
|
|
40
|
+
Given I am logged in as Owner
|
|
41
|
+
When I navigate to the posts list
|
|
42
|
+
And the API returns the posts
|
|
43
|
+
Then the list page should be visible
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```gherkin:es
|
|
47
|
+
Scenario: Navegar a lista de posts
|
|
48
|
+
|
|
49
|
+
Given estoy logueado como Owner
|
|
50
|
+
When navego a la lista de posts
|
|
51
|
+
And la API retorna los posts
|
|
52
|
+
Then la pagina de lista deberia estar visible
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Expected Results
|
|
56
|
+
- Posts list page is accessible
|
|
57
|
+
- Page loads successfully
|
|
58
|
+
- API returns posts data
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## @test POST-LIST-002: Navigate to create post from list
|
|
63
|
+
|
|
64
|
+
### Metadata
|
|
65
|
+
- **Priority:** High
|
|
66
|
+
- **Type:** Regression
|
|
67
|
+
- **Tags:** navigation, create-button
|
|
68
|
+
|
|
69
|
+
```gherkin:en
|
|
70
|
+
Scenario: Navigate to create post
|
|
71
|
+
|
|
72
|
+
Given I am on the posts list
|
|
73
|
+
When I click the create post button
|
|
74
|
+
Then the URL should include /dashboard/posts/create
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```gherkin:es
|
|
78
|
+
Scenario: Navegar a crear post
|
|
79
|
+
|
|
80
|
+
Given estoy en la lista de posts
|
|
81
|
+
When hago clic en el boton crear post
|
|
82
|
+
Then la URL deberia incluir /dashboard/posts/create
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Expected Results
|
|
86
|
+
- Create button is visible
|
|
87
|
+
- Clicking navigates to create page
|
|
88
|
+
- URL reflects the create route
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## @test POST-LIST-003: Display sample posts in list
|
|
93
|
+
|
|
94
|
+
### Metadata
|
|
95
|
+
- **Priority:** High
|
|
96
|
+
- **Type:** Regression
|
|
97
|
+
- **Tags:** list, display, sample-data
|
|
98
|
+
|
|
99
|
+
```gherkin:en
|
|
100
|
+
Scenario: Display sample posts
|
|
101
|
+
|
|
102
|
+
Given I am on the posts list
|
|
103
|
+
Then posts containing "Welcome" should be visible
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```gherkin:es
|
|
107
|
+
Scenario: Mostrar posts de ejemplo
|
|
108
|
+
|
|
109
|
+
Given estoy en la lista de posts
|
|
110
|
+
Then los posts que contienen "Welcome" deberian estar visibles
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Expected Results
|
|
114
|
+
- Sample posts are displayed
|
|
115
|
+
- Posts with "Welcome" are visible
|
|
116
|
+
- List shows expected data
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## @test POST-LIST-004: Search posts by title
|
|
121
|
+
|
|
122
|
+
### Metadata
|
|
123
|
+
- **Priority:** High
|
|
124
|
+
- **Type:** Regression
|
|
125
|
+
- **Tags:** search, filter, title
|
|
126
|
+
|
|
127
|
+
```gherkin:en
|
|
128
|
+
Scenario: Search posts by title
|
|
129
|
+
|
|
130
|
+
Given I am on the posts list
|
|
131
|
+
When I search for "Welcome"
|
|
132
|
+
And the API returns filtered results
|
|
133
|
+
Then posts matching "Welcome" should be visible
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```gherkin:es
|
|
137
|
+
Scenario: Buscar posts por titulo
|
|
138
|
+
|
|
139
|
+
Given estoy en la lista de posts
|
|
140
|
+
When busco "Welcome"
|
|
141
|
+
And la API retorna resultados filtrados
|
|
142
|
+
Then los posts que coinciden con "Welcome" deberian estar visibles
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Expected Results
|
|
146
|
+
- Search input is available
|
|
147
|
+
- Search query filters results
|
|
148
|
+
- Matching posts are displayed
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## @test POST-LIST-005: Clear search and show all posts
|
|
153
|
+
|
|
154
|
+
### Metadata
|
|
155
|
+
- **Priority:** Medium
|
|
156
|
+
- **Type:** Regression
|
|
157
|
+
- **Tags:** search, clear, reset
|
|
158
|
+
|
|
159
|
+
```gherkin:en
|
|
160
|
+
Scenario: Clear search filter
|
|
161
|
+
|
|
162
|
+
Given I am on the posts list
|
|
163
|
+
And I have performed a search
|
|
164
|
+
When I clear the search field
|
|
165
|
+
And the API returns all posts
|
|
166
|
+
Then at least 1 post should be visible
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
```gherkin:es
|
|
170
|
+
Scenario: Limpiar filtro de busqueda
|
|
171
|
+
|
|
172
|
+
Given estoy en la lista de posts
|
|
173
|
+
And he realizado una busqueda
|
|
174
|
+
When limpio el campo de busqueda
|
|
175
|
+
And la API retorna todos los posts
|
|
176
|
+
Then al menos 1 post deberia estar visible
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Expected Results
|
|
180
|
+
- Search can be cleared
|
|
181
|
+
- All posts return after clearing
|
|
182
|
+
- List refreshes correctly
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## @test POST-LIST-006: Filter posts by category
|
|
187
|
+
|
|
188
|
+
### Metadata
|
|
189
|
+
- **Priority:** High
|
|
190
|
+
- **Type:** Regression
|
|
191
|
+
- **Tags:** filter, category
|
|
192
|
+
|
|
193
|
+
```gherkin:en
|
|
194
|
+
Scenario: Filter posts by category
|
|
195
|
+
|
|
196
|
+
Given I am on the posts list
|
|
197
|
+
And the category filter exists
|
|
198
|
+
When I filter by "News" category
|
|
199
|
+
And the API returns filtered results
|
|
200
|
+
Then only posts with "News" category badge should be visible
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```gherkin:es
|
|
204
|
+
Scenario: Filtrar posts por categoria
|
|
205
|
+
|
|
206
|
+
Given estoy en la lista de posts
|
|
207
|
+
And el filtro de categoria existe
|
|
208
|
+
When filtro por categoria "News"
|
|
209
|
+
And la API retorna resultados filtrados
|
|
210
|
+
Then solo los posts con badge de categoria "News" deberian estar visibles
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Expected Results
|
|
214
|
+
- Category filter is available
|
|
215
|
+
- Filter can be applied
|
|
216
|
+
- Only matching category posts are shown
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## @test POST-LIST-007: Filter posts by published status
|
|
221
|
+
|
|
222
|
+
### Metadata
|
|
223
|
+
- **Priority:** High
|
|
224
|
+
- **Type:** Regression
|
|
225
|
+
- **Tags:** filter, status, published
|
|
226
|
+
|
|
227
|
+
```gherkin:en
|
|
228
|
+
Scenario: Filter posts by status
|
|
229
|
+
|
|
230
|
+
Given I am on the posts list
|
|
231
|
+
And the status filter exists
|
|
232
|
+
When I filter by "published" status
|
|
233
|
+
And the API returns filtered results
|
|
234
|
+
Then the table should display posts
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
```gherkin:es
|
|
238
|
+
Scenario: Filtrar posts por estado
|
|
239
|
+
|
|
240
|
+
Given estoy en la lista de posts
|
|
241
|
+
And el filtro de estado existe
|
|
242
|
+
When filtro por estado "published"
|
|
243
|
+
And la API retorna resultados filtrados
|
|
244
|
+
Then la tabla deberia mostrar posts
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Expected Results
|
|
248
|
+
- Status filter is available
|
|
249
|
+
- Filter by published status works
|
|
250
|
+
- Filtered results display correctly
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## @test POST-LIST-008: Display category badges with colors
|
|
255
|
+
|
|
256
|
+
### Metadata
|
|
257
|
+
- **Priority:** Medium
|
|
258
|
+
- **Type:** Regression
|
|
259
|
+
- **Tags:** badges, colors, visual
|
|
260
|
+
|
|
261
|
+
```gherkin:en
|
|
262
|
+
Scenario: Display category badges with colors
|
|
263
|
+
|
|
264
|
+
Given I am on the posts list
|
|
265
|
+
Then the table should contain badge elements
|
|
266
|
+
And badges should have background colors
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
```gherkin:es
|
|
270
|
+
Scenario: Mostrar badges de categoria con colores
|
|
271
|
+
|
|
272
|
+
Given estoy en la lista de posts
|
|
273
|
+
Then la tabla deberia contener elementos badge
|
|
274
|
+
And los badges deberian tener colores de fondo
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Expected Results
|
|
278
|
+
- Category badges are displayed
|
|
279
|
+
- Badges have background colors
|
|
280
|
+
- Visual styling is applied correctly
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## @test POST-LIST-009: Edit action available
|
|
285
|
+
|
|
286
|
+
### Metadata
|
|
287
|
+
- **Priority:** High
|
|
288
|
+
- **Type:** Regression
|
|
289
|
+
- **Tags:** actions, edit, button
|
|
290
|
+
|
|
291
|
+
```gherkin:en
|
|
292
|
+
Scenario: Edit action availability
|
|
293
|
+
|
|
294
|
+
Given I am on the posts list
|
|
295
|
+
When I look at the first row
|
|
296
|
+
Then edit action button should exist
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
```gherkin:es
|
|
300
|
+
Scenario: Disponibilidad de accion editar
|
|
301
|
+
|
|
302
|
+
Given estoy en la lista de posts
|
|
303
|
+
When miro la primera fila
|
|
304
|
+
Then el boton de accion editar deberia existir
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Expected Results
|
|
308
|
+
- Edit button is present in row
|
|
309
|
+
- Action is accessible
|
|
310
|
+
- Button is clickable
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## @test POST-LIST-010: Delete action available
|
|
315
|
+
|
|
316
|
+
### Metadata
|
|
317
|
+
- **Priority:** High
|
|
318
|
+
- **Type:** Regression
|
|
319
|
+
- **Tags:** actions, delete, button
|
|
320
|
+
|
|
321
|
+
```gherkin:en
|
|
322
|
+
Scenario: Delete action availability
|
|
323
|
+
|
|
324
|
+
Given I am on the posts list
|
|
325
|
+
When I look at the first row
|
|
326
|
+
Then delete action button should exist
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
```gherkin:es
|
|
330
|
+
Scenario: Disponibilidad de accion eliminar
|
|
331
|
+
|
|
332
|
+
Given estoy en la lista de posts
|
|
333
|
+
When miro la primera fila
|
|
334
|
+
Then el boton de accion eliminar deberia existir
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Expected Results
|
|
338
|
+
- Delete button is present in row
|
|
339
|
+
- Action is accessible
|
|
340
|
+
- Button is clickable
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Posts List - Admin UI Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests for the posts list view in the admin dashboard.
|
|
7
|
+
* Validates navigation, search, filtering, and basic CRUD operations.
|
|
8
|
+
*
|
|
9
|
+
* Tags: @uat, @feat-posts, @admin, @regression
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import * as allure from 'allure-cypress'
|
|
13
|
+
import { PostsListPOM, loginAsOwner } from '../../../../src'
|
|
14
|
+
|
|
15
|
+
describe('Posts List - Admin UI', {
|
|
16
|
+
tags: ['@uat', '@feat-posts', '@admin', '@regression']
|
|
17
|
+
}, () => {
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
allure.epic('Posts System')
|
|
20
|
+
allure.feature('Posts List')
|
|
21
|
+
|
|
22
|
+
// Setup API intercepts BEFORE login and navigation
|
|
23
|
+
PostsListPOM.setupApiIntercepts()
|
|
24
|
+
loginAsOwner()
|
|
25
|
+
PostsListPOM.visitList()
|
|
26
|
+
PostsListPOM.api.waitForList()
|
|
27
|
+
PostsListPOM.waitForListLoad()
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
// ============================================================
|
|
31
|
+
// Navigation Tests
|
|
32
|
+
// ============================================================
|
|
33
|
+
describe('Navigation', () => {
|
|
34
|
+
it('POST-LIST-001: Should navigate to posts list', { tags: '@smoke' }, () => {
|
|
35
|
+
allure.story('Navigation')
|
|
36
|
+
allure.severity('critical')
|
|
37
|
+
|
|
38
|
+
PostsListPOM.assertListPageVisible()
|
|
39
|
+
cy.log('Successfully navigated to posts list')
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('POST-LIST-002: Should navigate to create post from list', () => {
|
|
43
|
+
allure.story('Navigation')
|
|
44
|
+
allure.severity('normal')
|
|
45
|
+
|
|
46
|
+
PostsListPOM.clickCreatePost()
|
|
47
|
+
cy.url().should('include', '/dashboard/posts/create')
|
|
48
|
+
cy.log('Navigated to create post')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('POST-LIST-003: Should display sample posts in list', () => {
|
|
52
|
+
allure.story('List Display')
|
|
53
|
+
allure.severity('normal')
|
|
54
|
+
|
|
55
|
+
PostsListPOM.assertPostInList('Welcome')
|
|
56
|
+
cy.log('Sample posts visible in list')
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
// ============================================================
|
|
61
|
+
// Search Tests
|
|
62
|
+
// ============================================================
|
|
63
|
+
describe('Search', () => {
|
|
64
|
+
it('POST-LIST-004: Should search posts by title', () => {
|
|
65
|
+
allure.story('Search')
|
|
66
|
+
allure.severity('normal')
|
|
67
|
+
|
|
68
|
+
PostsListPOM.searchPosts('Welcome')
|
|
69
|
+
|
|
70
|
+
// Wait for search API call (debounced)
|
|
71
|
+
PostsListPOM.api.waitForList()
|
|
72
|
+
|
|
73
|
+
PostsListPOM.assertPostInList('Welcome')
|
|
74
|
+
cy.log('Search by title working')
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it('POST-LIST-005: Should clear search and show all posts', () => {
|
|
78
|
+
allure.story('Search')
|
|
79
|
+
allure.severity('normal')
|
|
80
|
+
|
|
81
|
+
cy.get(PostsListPOM.listSelectors.rowGeneric).then(($rows) => {
|
|
82
|
+
const initialCount = $rows.length
|
|
83
|
+
|
|
84
|
+
PostsListPOM.searchPosts('Welcome')
|
|
85
|
+
PostsListPOM.api.waitForList()
|
|
86
|
+
|
|
87
|
+
PostsListPOM.clearSearch()
|
|
88
|
+
PostsListPOM.api.waitForList()
|
|
89
|
+
|
|
90
|
+
cy.get(PostsListPOM.listSelectors.rowGeneric).should('have.length.at.least', 1)
|
|
91
|
+
cy.log('Search cleared, showing posts')
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
// ============================================================
|
|
97
|
+
// Filter Tests
|
|
98
|
+
// ============================================================
|
|
99
|
+
describe('Filters', () => {
|
|
100
|
+
it('POST-LIST-006: Should filter posts by category', () => {
|
|
101
|
+
allure.story('Filters')
|
|
102
|
+
allure.severity('normal')
|
|
103
|
+
|
|
104
|
+
cy.get(PostsListPOM.listSelectors.categoryFilter).then(($filter) => {
|
|
105
|
+
if ($filter.length > 0) {
|
|
106
|
+
PostsListPOM.filterByCategory('News')
|
|
107
|
+
PostsListPOM.api.waitForList()
|
|
108
|
+
|
|
109
|
+
PostsListPOM.assertCategoryBadgeVisible('News')
|
|
110
|
+
cy.log('Filter by category working')
|
|
111
|
+
} else {
|
|
112
|
+
cy.log('Category filter not available - skipping')
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
it('POST-LIST-007: Should filter posts by published status', () => {
|
|
118
|
+
allure.story('Filters')
|
|
119
|
+
allure.severity('normal')
|
|
120
|
+
|
|
121
|
+
cy.get(PostsListPOM.listSelectors.statusFilter).then(($filter) => {
|
|
122
|
+
if ($filter.length > 0) {
|
|
123
|
+
PostsListPOM.filterByStatus('published')
|
|
124
|
+
PostsListPOM.api.waitForList()
|
|
125
|
+
|
|
126
|
+
cy.get('table tbody').should('exist')
|
|
127
|
+
cy.log('Filter by published status working')
|
|
128
|
+
} else {
|
|
129
|
+
cy.log('Status filter not available - skipping')
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
// ============================================================
|
|
136
|
+
// Category Badge Display Tests
|
|
137
|
+
// ============================================================
|
|
138
|
+
describe('Category Badges', () => {
|
|
139
|
+
it('POST-LIST-008: Should display category badges with colors', () => {
|
|
140
|
+
allure.story('UI Display')
|
|
141
|
+
allure.severity('minor')
|
|
142
|
+
|
|
143
|
+
cy.get(PostsListPOM.listSelectors.table).within(() => {
|
|
144
|
+
cy.get('[class*="badge"], [style*="background"]').should('exist')
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
cy.log('Category badges with colors visible')
|
|
148
|
+
})
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
// ============================================================
|
|
152
|
+
// Actions Tests
|
|
153
|
+
// ============================================================
|
|
154
|
+
describe('Actions', () => {
|
|
155
|
+
it('POST-LIST-009: Should have edit action available', () => {
|
|
156
|
+
allure.story('Actions')
|
|
157
|
+
allure.severity('normal')
|
|
158
|
+
|
|
159
|
+
cy.get(PostsListPOM.listSelectors.rowGeneric).first().within(() => {
|
|
160
|
+
cy.get('button').should('exist')
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
cy.log('Edit action available')
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('POST-LIST-010: Should have delete action available', () => {
|
|
167
|
+
allure.story('Actions')
|
|
168
|
+
allure.severity('normal')
|
|
169
|
+
|
|
170
|
+
cy.get(PostsListPOM.listSelectors.rowGeneric).first().within(() => {
|
|
171
|
+
cy.get('button').should('exist')
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
cy.log('Delete action available')
|
|
175
|
+
})
|
|
176
|
+
})
|
|
177
|
+
})
|