@nextsparkjs/theme-default 0.1.0-beta.20 → 0.1.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/package.json +1 -1
  2. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  3. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  4. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  5. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  6. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  7. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  8. package/tests/cypress/e2e/_docs/README.md +215 -0
  9. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  11. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  13. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  14. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  15. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  19. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  20. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  21. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  22. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  23. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  24. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  25. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  26. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  27. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  28. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  29. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  30. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  31. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  32. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  33. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  34. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  36. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  38. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  40. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  42. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  43. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  44. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  45. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  46. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  47. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  48. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  49. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  50. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  51. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  52. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  53. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  54. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  55. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  56. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  57. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  58. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  59. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  60. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  61. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  62. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  63. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  64. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  65. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  66. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  67. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  68. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  69. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  70. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  71. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  72. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  78. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  79. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  83. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  85. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  87. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  89. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  95. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  96. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  97. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  99. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  100. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  101. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  102. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  103. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  105. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  106. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  107. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  109. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  110. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  112. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  114. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  118. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  120. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  122. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  126. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  128. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  130. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  132. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  136. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  138. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  140. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  142. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  144. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  146. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  148. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  149. package/tests/cypress/fixtures/blocks.json +218 -0
  150. package/tests/cypress/fixtures/entities.json +78 -0
  151. package/tests/cypress/fixtures/page-builder.json +21 -0
  152. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  153. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  154. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  155. package/tests/cypress/src/components/EntityForm.ts +375 -0
  156. package/tests/cypress/src/components/EntityList.ts +389 -0
  157. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  158. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  159. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  160. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  161. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  162. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  163. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  164. package/tests/cypress/src/components/index.ts +21 -0
  165. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  166. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  167. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  168. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  169. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  170. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  171. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  172. package/tests/cypress/src/controllers/index.js +25 -0
  173. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  174. package/tests/cypress/src/core/BasePOM.ts +86 -0
  175. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  176. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  177. package/tests/cypress/src/core/index.ts +14 -0
  178. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  179. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  180. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  181. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  182. package/tests/cypress/src/entities/index.ts +14 -0
  183. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  184. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  185. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  186. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  187. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  188. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  189. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  190. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  191. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  192. package/tests/cypress/src/features/index.ts +28 -0
  193. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  194. package/tests/cypress/src/index.ts +101 -0
  195. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  196. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  198. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  199. package/tests/cypress/src/pages/index.js +5 -0
  200. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  201. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  202. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  203. package/tests/cypress/src/pages/public/index.js +6 -0
  204. package/tests/cypress/src/selectors.ts +46 -0
  205. package/tests/cypress/src/session-helpers.ts +500 -0
  206. package/tests/cypress/support/doc-commands.ts +260 -0
  207. package/tests/cypress.config.ts +150 -0
  208. package/tests/jest/components/post-header.test.tsx +377 -0
  209. package/tests/jest/config/role-config.test.ts +529 -0
  210. package/tests/jest/jest.config.ts +81 -0
  211. package/tests/jest/langchain/COVERAGE.md +372 -0
  212. package/tests/jest/langchain/guardrails.test.ts +465 -0
  213. package/tests/jest/langchain/streaming.test.ts +367 -0
  214. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  215. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  216. package/tests/jest/langchain/tracer.test.ts +823 -0
  217. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  218. package/tests/jest/validation/categories.test.ts +429 -0
  219. package/tests/jest/validation/posts.test.ts +546 -0
  220. package/tests/tsconfig.json +15 -0
@@ -0,0 +1,419 @@
1
+ # Tasks UI - Owner Role (Format: BDD/Gherkin - Bilingual)
2
+
3
+ > **Test File:** `tasks-owner.cy.ts`
4
+ > **Format:** Behavior-Driven Development (BDD) with Given/When/Then
5
+ > **Languages:** English / Spanish (side-by-side)
6
+ > **Total Tests:** 6
7
+
8
+ ---
9
+
10
+ ## Feature: Tasks Management - Owner Role (Full CRUD Access)
11
+
12
+ <table>
13
+ <tr>
14
+ <th width="50%">English</th>
15
+ <th width="50%">Espanol</th>
16
+ </tr>
17
+ <tr>
18
+ <td>
19
+
20
+ As an **Owner**
21
+ I want to **manage tasks through the dashboard UI**
22
+ So that **I can create, read, update, and delete tasks for my team**
23
+
24
+ </td>
25
+ <td>
26
+
27
+ Como **Owner**
28
+ Quiero **gestionar tareas a traves del dashboard**
29
+ Para **crear, leer, actualizar y eliminar tareas de mi equipo**
30
+
31
+ </td>
32
+ </tr>
33
+ </table>
34
+
35
+ ### Background
36
+
37
+ <table>
38
+ <tr>
39
+ <th width="50%">English</th>
40
+ <th width="50%">Espanol</th>
41
+ </tr>
42
+ <tr>
43
+ <td>
44
+
45
+ ```gherkin
46
+ Given I am logged in as Owner (owner@nextspark.dev)
47
+ And I have navigated to the Tasks dashboard
48
+ And the tasks list has loaded successfully
49
+ ```
50
+
51
+ </td>
52
+ <td>
53
+
54
+ ```gherkin
55
+ Given estoy logueado como Owner (owner@nextspark.dev)
56
+ And he navegado al dashboard de Tareas
57
+ And la lista de tareas ha cargado exitosamente
58
+ ```
59
+
60
+ </td>
61
+ </tr>
62
+ </table>
63
+
64
+ ---
65
+
66
+ ## CREATE - Owner can create tasks `@smoke`
67
+
68
+ ### OWNER_TASK_CREATE_001: Create new task with title only `@smoke` `@critical`
69
+
70
+ <table>
71
+ <tr>
72
+ <th width="50%">English</th>
73
+ <th width="50%">Espanol</th>
74
+ </tr>
75
+ <tr>
76
+ <td>
77
+
78
+ ```gherkin
79
+ Scenario: Owner creates a simple task
80
+
81
+ Given I am logged in as an Owner
82
+ And I am on the Tasks list page
83
+ When I click the "Add" button
84
+ Then the task creation form should appear
85
+
86
+ When I enter "New Project Task" in the Title field
87
+ And I click the "Save" button
88
+ Then the form should submit successfully
89
+ And I should see a success message
90
+ And I should be redirected to the tasks list
91
+ And I should see "New Project Task" in the task list
92
+ ```
93
+
94
+ </td>
95
+ <td>
96
+
97
+ ```gherkin
98
+ Scenario: Owner crea una tarea simple
99
+
100
+ Given estoy logueado como Owner
101
+ And estoy en la pagina de lista de Tareas
102
+ When hago clic en el boton "Agregar"
103
+ Then deberia aparecer el formulario de creacion
104
+
105
+ When ingreso "Nueva Tarea del Proyecto" en el campo Titulo
106
+ And hago clic en el boton "Guardar"
107
+ Then el formulario deberia enviarse exitosamente
108
+ And deberia ver un mensaje de exito
109
+ And deberia ser redirigido a la lista de tareas
110
+ And deberia ver "Nueva Tarea del Proyecto" en la lista
111
+ ```
112
+
113
+ </td>
114
+ </tr>
115
+ </table>
116
+
117
+ **Visual Flow / Flujo Visual:**
118
+ ```
119
+ [Tasks List] → [Click Add] → [Form Modal] → [Fill Title] → [Save] → [List with new task]
120
+ [Lista Tareas] → [Clic Agregar] → [Modal Form] → [Llenar Titulo] → [Guardar] → [Lista con tarea]
121
+ ```
122
+
123
+ ---
124
+
125
+ ### OWNER_TASK_CREATE_002: Create task with all fields
126
+
127
+ <table>
128
+ <tr>
129
+ <th width="50%">English</th>
130
+ <th width="50%">Espanol</th>
131
+ </tr>
132
+ <tr>
133
+ <td>
134
+
135
+ ```gherkin
136
+ Scenario: Owner creates a task with complete information
137
+
138
+ Given I am logged in as an Owner
139
+ And I am on the Tasks list page
140
+ When I click the "Add" button
141
+ Then the task creation form should appear
142
+
143
+ When I fill in the following fields:
144
+ | Field | Value |
145
+ | Title | "Complete Project Documentation" |
146
+ | Description | "Write all technical docs" |
147
+ And I click the "Save" button
148
+ Then the form should submit successfully
149
+ And the task should be created with all provided values
150
+ And I should see the task in the list
151
+ ```
152
+
153
+ </td>
154
+ <td>
155
+
156
+ ```gherkin
157
+ Scenario: Owner crea una tarea con informacion completa
158
+
159
+ Given estoy logueado como Owner
160
+ And estoy en la pagina de lista de Tareas
161
+ When hago clic en el boton "Agregar"
162
+ Then deberia aparecer el formulario de creacion
163
+
164
+ When completo los siguientes campos:
165
+ | Campo | Valor |
166
+ | Titulo | "Completar Documentacion Proyecto" |
167
+ | Descripcion | "Escribir toda la documentacion tec" |
168
+ And hago clic en el boton "Guardar"
169
+ Then el formulario deberia enviarse exitosamente
170
+ And la tarea deberia crearse con todos los valores
171
+ And deberia ver la tarea en la lista
172
+ ```
173
+
174
+ </td>
175
+ </tr>
176
+ </table>
177
+
178
+ ---
179
+
180
+ ## READ - Owner can read tasks `@smoke`
181
+
182
+ ### OWNER_TASK_READ_001: View task list `@smoke` `@critical`
183
+
184
+ <table>
185
+ <tr>
186
+ <th width="50%">English</th>
187
+ <th width="50%">Espanol</th>
188
+ </tr>
189
+ <tr>
190
+ <td>
191
+
192
+ ```gherkin
193
+ Scenario: Owner can view the tasks table
194
+
195
+ Given I am logged in as an Owner
196
+ When I navigate to the Tasks dashboard
197
+ Then I should see the tasks table
198
+ And the table should display task titles
199
+ And the table should show task information columns
200
+ ```
201
+
202
+ **Expected Table Columns:**
203
+ - Title
204
+ - Status
205
+ - Priority
206
+ - Created Date
207
+ - Actions
208
+
209
+ </td>
210
+ <td>
211
+
212
+ ```gherkin
213
+ Scenario: Owner puede ver la tabla de tareas
214
+
215
+ Given estoy logueado como Owner
216
+ When navego al dashboard de Tareas
217
+ Then deberia ver la tabla de tareas
218
+ And la tabla deberia mostrar titulos de tareas
219
+ And la tabla deberia mostrar columnas de informacion
220
+ ```
221
+
222
+ **Columnas Esperadas:**
223
+ - Titulo
224
+ - Estado
225
+ - Prioridad
226
+ - Fecha de Creacion
227
+ - Acciones
228
+
229
+ </td>
230
+ </tr>
231
+ </table>
232
+
233
+ ---
234
+
235
+ ### OWNER_TASK_READ_002: View task details
236
+
237
+ <table>
238
+ <tr>
239
+ <th width="50%">English</th>
240
+ <th width="50%">Espanol</th>
241
+ </tr>
242
+ <tr>
243
+ <td>
244
+
245
+ ```gherkin
246
+ Scenario: Owner can view individual task details
247
+
248
+ Given I am logged in as an Owner
249
+ And there is at least one task in the list
250
+ When I click on a task row
251
+ Then I should be navigated to the task detail page
252
+ And the URL should contain the task ID
253
+ And I should see the complete task information
254
+ ```
255
+
256
+ **Detail Page Elements:**
257
+ - Task title (heading)
258
+ - Description (if present)
259
+ - Status badge
260
+ - Priority indicator
261
+ - Created/Updated timestamps
262
+ - Edit button
263
+ - Delete button
264
+
265
+ </td>
266
+ <td>
267
+
268
+ ```gherkin
269
+ Scenario: Owner puede ver detalles de una tarea
270
+
271
+ Given estoy logueado como Owner
272
+ And existe al menos una tarea en la lista
273
+ When hago clic en una fila de tarea
274
+ Then deberia ser navegado a la pagina de detalle
275
+ And la URL deberia contener el ID de la tarea
276
+ And deberia ver la informacion completa de la tarea
277
+ ```
278
+
279
+ **Elementos de la Pagina de Detalle:**
280
+ - Titulo de la tarea (encabezado)
281
+ - Descripcion (si existe)
282
+ - Badge de estado
283
+ - Indicador de prioridad
284
+ - Timestamps de creacion/actualizacion
285
+ - Boton Editar
286
+ - Boton Eliminar
287
+
288
+ </td>
289
+ </tr>
290
+ </table>
291
+
292
+ ---
293
+
294
+ ## UPDATE - Owner can update tasks
295
+
296
+ ### OWNER_TASK_UPDATE_001: Edit existing task
297
+
298
+ <table>
299
+ <tr>
300
+ <th width="50%">English</th>
301
+ <th width="50%">Espanol</th>
302
+ </tr>
303
+ <tr>
304
+ <td>
305
+
306
+ ```gherkin
307
+ Scenario: Owner can modify task information
308
+
309
+ Given I am logged in as an Owner
310
+ And there is at least one task in the list
311
+ When I click the "Edit" button on a task row
312
+ Then the task edit form should appear
313
+ And the form should be pre-filled with current task data
314
+
315
+ When I change the Title to "Updated Task Title"
316
+ And I click the "Save" button
317
+ Then the changes should be saved successfully
318
+ And I should be redirected to the tasks list
319
+ And I should see "Updated Task Title" in the list
320
+ ```
321
+
322
+ </td>
323
+ <td>
324
+
325
+ ```gherkin
326
+ Scenario: Owner puede modificar informacion de tarea
327
+
328
+ Given estoy logueado como Owner
329
+ And existe al menos una tarea en la lista
330
+ When hago clic en el boton "Editar" de una fila
331
+ Then deberia aparecer el formulario de edicion
332
+ And el formulario deberia estar pre-llenado con datos actuales
333
+
334
+ When cambio el Titulo a "Titulo de Tarea Actualizado"
335
+ And hago clic en el boton "Guardar"
336
+ Then los cambios deberian guardarse exitosamente
337
+ And deberia ser redirigido a la lista de tareas
338
+ And deberia ver "Titulo de Tarea Actualizado" en la lista
339
+ ```
340
+
341
+ </td>
342
+ </tr>
343
+ </table>
344
+
345
+ ---
346
+
347
+ ## DELETE - Owner can delete tasks
348
+
349
+ ### OWNER_TASK_DELETE_001: Delete existing task `@critical`
350
+
351
+ <table>
352
+ <tr>
353
+ <th width="50%">English</th>
354
+ <th width="50%">Espanol</th>
355
+ </tr>
356
+ <tr>
357
+ <td>
358
+
359
+ ```gherkin
360
+ Scenario: Owner can permanently delete a task
361
+
362
+ Given I am logged in as an Owner
363
+ And I have created a task called "Task to Delete"
364
+ When I click on the task to view details
365
+ And I click the "Delete" button
366
+ Then a confirmation dialog should appear
367
+
368
+ When I confirm the deletion
369
+ Then a second confirmation dialog should appear
370
+ When I confirm again
371
+ Then the task should be deleted
372
+ And I should be redirected to the tasks list
373
+ And "Task to Delete" should no longer appear in the list
374
+ ```
375
+
376
+ </td>
377
+ <td>
378
+
379
+ ```gherkin
380
+ Scenario: Owner puede eliminar permanentemente una tarea
381
+
382
+ Given estoy logueado como Owner
383
+ And he creado una tarea llamada "Tarea a Eliminar"
384
+ When hago clic en la tarea para ver detalles
385
+ And hago clic en el boton "Eliminar"
386
+ Then deberia aparecer un dialogo de confirmacion
387
+
388
+ When confirmo la eliminacion
389
+ Then deberia aparecer un segundo dialogo de confirmacion
390
+ When confirmo nuevamente
391
+ Then la tarea deberia ser eliminada
392
+ And deberia ser redirigido a la lista de tareas
393
+ And "Tarea a Eliminar" ya no deberia aparecer en la lista
394
+ ```
395
+
396
+ </td>
397
+ </tr>
398
+ </table>
399
+
400
+ **Deletion Flow (2-step confirmation) / Flujo de Eliminacion (confirmacion de 2 pasos):**
401
+ ```
402
+ [Detail Page] → [Delete Button] → [Confirm Dialog 1] → [Confirm Dialog 2] → [Task Deleted]
403
+ [Pag Detalle] → [Boton Eliminar] → [Dialogo Conf 1] → [Dialogo Conf 2] → [Tarea Eliminada]
404
+ ```
405
+
406
+ > **Note / Nota:** The double confirmation is a safety feature to prevent accidental deletions. / La doble confirmacion es una medida de seguridad para prevenir eliminaciones accidentales.
407
+
408
+ ---
409
+
410
+ ## Summary / Resumen
411
+
412
+ | Test ID | Operation | Description / Descripcion | Tags |
413
+ |---------|-----------|---------------------------|------|
414
+ | OWNER_TASK_CREATE_001 | CREATE | Create task with title / Crear tarea con titulo | `@smoke` `@critical` |
415
+ | OWNER_TASK_CREATE_002 | CREATE | Create task with all fields / Crear con todos los campos | |
416
+ | OWNER_TASK_READ_001 | READ | View task list / Ver lista de tareas | `@smoke` `@critical` |
417
+ | OWNER_TASK_READ_002 | READ | View task details / Ver detalles de tarea | |
418
+ | OWNER_TASK_UPDATE_001 | UPDATE | Edit existing task / Editar tarea existente | |
419
+ | OWNER_TASK_DELETE_001 | DELETE | Delete task / Eliminar tarea | `@critical` |
@@ -0,0 +1,191 @@
1
+ /// <reference types="cypress" />
2
+
3
+ import * as allure from 'allure-cypress'
4
+
5
+ import { TasksPOM } from '../../../../src/entities/TasksPOM'
6
+ import { loginAsDefaultOwner } from '../../../../src/session-helpers'
7
+
8
+ describe('Tasks CRUD - Owner Role (Full Access)', {
9
+ tags: ['@uat', '@feat-tasks', '@crud', '@role-owner', '@regression']
10
+ }, () => {
11
+ const tasks = TasksPOM.create()
12
+
13
+ beforeEach(() => {
14
+ allure.epic('UAT')
15
+ allure.feature('Tasks')
16
+ allure.story('Owner Permissions')
17
+ tasks.setupApiIntercepts()
18
+ loginAsDefaultOwner()
19
+ tasks.visitList()
20
+ tasks.api.waitForList()
21
+ tasks.waitForList()
22
+ })
23
+
24
+ describe('CREATE - Owner can create tasks', { tags: '@smoke' }, () => {
25
+ it('OWNER_TASK_CREATE_001: should create new task successfully', { tags: '@smoke' }, () => {
26
+ allure.severity('critical')
27
+ const taskTitle = `Owner Task ${Date.now()}`
28
+
29
+ // Click create button
30
+ tasks.clickAdd()
31
+
32
+ // Validate form is visible
33
+ tasks.waitForForm()
34
+
35
+ // Fill required field
36
+ tasks.fillTextField('title', taskTitle)
37
+
38
+ // Submit form
39
+ tasks.submitForm()
40
+
41
+ // Wait for API response
42
+ tasks.api.waitForCreate()
43
+
44
+ // Validate redirect to list
45
+ cy.url().should('include', `/dashboard/${tasks.entitySlug}`)
46
+
47
+ // Validate task appears in list
48
+ tasks.assertTaskInList(taskTitle)
49
+
50
+ cy.log('✅ Owner created task successfully')
51
+ })
52
+
53
+ it('OWNER_TASK_CREATE_002: should create task with all fields', () => {
54
+ const taskTitle = `Full Task ${Date.now()}`
55
+ const taskDescription = 'Task with all fields filled'
56
+
57
+ // Click create button
58
+ tasks.clickAdd()
59
+
60
+ // Validate form is visible
61
+ tasks.waitForForm()
62
+
63
+ // Fill all fields
64
+ tasks.fillTextField('title', taskTitle)
65
+ tasks.fillTextarea('description', taskDescription)
66
+
67
+ // Submit form
68
+ tasks.submitForm()
69
+
70
+ // Wait for API response
71
+ tasks.api.waitForCreate()
72
+
73
+ // Validate task appears in list
74
+ cy.url().should('include', `/dashboard/${tasks.entitySlug}`)
75
+ tasks.assertTaskInList(taskTitle)
76
+
77
+ cy.log('✅ Owner created full task successfully')
78
+ })
79
+ })
80
+
81
+ describe('READ - Owner can read tasks', { tags: '@smoke' }, () => {
82
+ it('OWNER_TASK_READ_001: should view task list', { tags: '@smoke' }, () => {
83
+ allure.severity('critical')
84
+ // Validate list is visible
85
+ tasks.assertTableVisible()
86
+
87
+ cy.log('✅ Owner can view task list')
88
+ })
89
+
90
+ it('OWNER_TASK_READ_002: should view task details', () => {
91
+ // Check if there are tasks to view
92
+ cy.get('body').then($body => {
93
+ if ($body.find(tasks.selectors.rowGeneric).length > 0) {
94
+ // Click the first task row (navigation via onClick, not <a> tag)
95
+ cy.get(tasks.selectors.rowGeneric).first().click()
96
+
97
+ // Should navigate to detail page
98
+ cy.url().should('match', new RegExp(`/dashboard/${tasks.entitySlug}/[a-z0-9-]+`))
99
+
100
+ cy.log('✅ Owner can view task details')
101
+ } else {
102
+ cy.log('⚠️ No tasks available to view details')
103
+ }
104
+ })
105
+ })
106
+ })
107
+
108
+ describe('UPDATE - Owner can update tasks', () => {
109
+ it('OWNER_TASK_UPDATE_001: should edit task successfully', () => {
110
+ // Check if there are tasks to edit
111
+ cy.get('body').then($body => {
112
+ // Use POM selector for edit actions (dynamic slug)
113
+ if ($body.find(tasks.selectors.rowActionEditGeneric).length > 0) {
114
+ // Click edit button on first task
115
+ cy.get(tasks.selectors.rowActionEditGeneric).first().click()
116
+
117
+ // Validate form is visible
118
+ tasks.waitForForm()
119
+
120
+ // Update title
121
+ const updatedTitle = `Updated Task ${Date.now()}`
122
+ tasks.fillTextField('title', updatedTitle)
123
+
124
+ // Submit form
125
+ tasks.submitForm()
126
+
127
+ // Wait for API response
128
+ tasks.api.waitForUpdate()
129
+
130
+ // Validate update
131
+ cy.url().should('include', `/dashboard/${tasks.entitySlug}`)
132
+ tasks.assertTaskInList(updatedTitle)
133
+
134
+ cy.log('✅ Owner updated task successfully')
135
+ } else {
136
+ cy.log('⚠️ No tasks available to edit')
137
+ }
138
+ })
139
+ })
140
+ })
141
+
142
+ describe('DELETE - Owner can delete tasks', () => {
143
+ it('OWNER_TASK_DELETE_001: should delete task successfully', () => {
144
+ // First, create a task to delete
145
+ const taskTitle = `Delete Test ${Date.now()}`
146
+
147
+ tasks.clickAdd()
148
+ tasks.waitForForm()
149
+ tasks.fillTextField('title', taskTitle)
150
+ tasks.submitForm()
151
+ tasks.api.waitForCreate()
152
+
153
+ // Navigate back to list and wait for it to load
154
+ tasks.visitList()
155
+ tasks.waitForList()
156
+
157
+ // Wait for task to appear in the list
158
+ tasks.assertTaskInList(taskTitle)
159
+
160
+ // Delete the task
161
+ // Two-step delete: EntityDetailHeader AlertDialog -> EntityDetailWrapper Dialog
162
+ tasks.clickRowByText(taskTitle)
163
+ tasks.waitForDetail()
164
+
165
+ // Step 1: Click delete button to open EntityDetailHeader's AlertDialog
166
+ tasks.clickDelete()
167
+
168
+ // Step 2: Click confirm in EntityDetailHeader's AlertDialog
169
+ // This triggers onDelete which opens EntityDetailWrapper's Dialog
170
+ cy.get(tasks.selectors.deleteConfirm).should('be.visible').click()
171
+
172
+ // Step 3: Click confirm in EntityDetailWrapper's Dialog to actually delete
173
+ cy.get(tasks.selectors.parentDeleteConfirm).should('be.visible').click()
174
+
175
+ // Wait for delete API response (deterministic)
176
+ tasks.api.waitForDelete()
177
+
178
+ // Navigate to list and verify deletion
179
+ tasks.visitList()
180
+ tasks.api.waitForList()
181
+ tasks.waitForList()
182
+ tasks.assertTaskNotInList(taskTitle)
183
+
184
+ cy.log('✅ Owner deleted task successfully')
185
+ })
186
+ })
187
+
188
+ after(() => {
189
+ cy.log('✅ Tasks CRUD tests completed')
190
+ })
191
+ })