@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.
Files changed (221) hide show
  1. package/package.json +1 -1
  2. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  3. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  4. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  5. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  6. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  7. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  8. package/tests/cypress/e2e/_docs/README.md +215 -0
  9. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  11. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  13. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  14. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  15. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  19. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  20. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  21. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  22. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  23. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  24. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  25. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  26. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  27. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  28. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  29. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  30. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  31. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  32. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  33. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  34. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  36. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  38. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  40. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  42. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  43. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  44. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  45. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  46. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  47. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  48. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  49. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  50. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  51. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  52. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  53. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  54. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  55. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  56. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  57. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  58. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  59. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  60. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  61. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  62. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  63. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  64. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  65. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  66. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  67. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  68. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  69. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  70. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  71. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  72. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  78. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  79. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  83. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  85. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  87. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  89. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  95. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  96. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  97. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  99. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  100. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  101. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  102. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  103. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  105. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  106. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  107. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  109. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  110. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  112. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  114. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  118. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  120. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  122. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  126. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  128. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  130. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  132. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  136. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  138. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  140. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  142. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  144. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  146. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  148. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  149. package/tests/cypress/fixtures/blocks.json +218 -0
  150. package/tests/cypress/fixtures/entities.json +78 -0
  151. package/tests/cypress/fixtures/page-builder.json +21 -0
  152. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  153. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  154. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  155. package/tests/cypress/src/components/EntityForm.ts +375 -0
  156. package/tests/cypress/src/components/EntityList.ts +389 -0
  157. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  158. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  159. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  160. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  161. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  162. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  163. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  164. package/tests/cypress/src/components/index.ts +21 -0
  165. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  166. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  167. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  168. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  169. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  170. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  171. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  172. package/tests/cypress/src/controllers/index.js +25 -0
  173. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  174. package/tests/cypress/src/core/BasePOM.ts +86 -0
  175. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  176. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  177. package/tests/cypress/src/core/index.ts +14 -0
  178. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  179. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  180. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  181. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  182. package/tests/cypress/src/entities/index.ts +14 -0
  183. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  184. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  185. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  186. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  187. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  188. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  189. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  190. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  191. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  192. package/tests/cypress/src/features/index.ts +28 -0
  193. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  194. package/tests/cypress/src/index.ts +101 -0
  195. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  196. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  198. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  199. package/tests/cypress/src/pages/index.js +5 -0
  200. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  201. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  202. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  203. package/tests/cypress/src/pages/public/index.js +6 -0
  204. package/tests/cypress/src/selectors.ts +46 -0
  205. package/tests/cypress/src/session-helpers.ts +500 -0
  206. package/tests/cypress/support/doc-commands.ts +260 -0
  207. package/tests/cypress/support/e2e.ts +89 -0
  208. package/tests/cypress.config.ts +165 -0
  209. package/tests/jest/components/post-header.test.tsx +377 -0
  210. package/tests/jest/config/role-config.test.ts +529 -0
  211. package/tests/jest/jest.config.ts +81 -0
  212. package/tests/jest/langchain/COVERAGE.md +372 -0
  213. package/tests/jest/langchain/guardrails.test.ts +465 -0
  214. package/tests/jest/langchain/streaming.test.ts +367 -0
  215. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  216. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  217. package/tests/jest/langchain/tracer.test.ts +823 -0
  218. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  219. package/tests/jest/validation/categories.test.ts +429 -0
  220. package/tests/jest/validation/posts.test.ts +546 -0
  221. 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
+ })