@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.
- 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.config.ts +150 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/config/role-config.test.ts +529 -0
- package/tests/jest/jest.config.ts +81 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +367 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/user-roles/role-helpers.test.ts +432 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +15 -0
|
@@ -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
|
+
})
|