@nextsparkjs/theme-default 0.1.0-beta.31 → 0.1.0-beta.35
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/lib/selectors.ts +5 -1
- package/package.json +2 -2
- package/tests/cypress/e2e/{_devtools → _utils/devtools}/access.cy.ts +3 -3
- package/tests/cypress/e2e/{_devtools → _utils/devtools}/navigation.cy.ts +3 -3
- package/tests/cypress/e2e/{_devtools → _utils/devtools}/pages.cy.ts +3 -3
- package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/auth.cy.ts +39 -35
- package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
- package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +111 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/dashboard-sidebar.cy.ts +35 -6
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +200 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/dashboard-topnav.cy.ts +30 -43
- package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/devtools.cy.ts +77 -14
- package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/global-search.cy.ts +15 -10
- package/tests/cypress/e2e/_utils/selectors/pages-editor.bdd.md +207 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/pages-editor.cy.ts +44 -12
- package/tests/cypress/e2e/_utils/selectors/posts-editor.bdd.md +184 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/posts-editor.cy.ts +107 -39
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/public.cy.ts +1 -1
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-api-keys.cy.ts +30 -25
- package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-billing.cy.ts +10 -7
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +138 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-layout.cy.ts +12 -8
- package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-password.cy.ts +10 -7
- package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-profile.cy.ts +15 -18
- package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-teams.cy.ts +36 -18
- package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/superadmin.cy.ts +23 -15
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +353 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/tasks.cy.ts +11 -10
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/taxonomies.cy.ts +1 -1
- package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/teams.cy.ts +90 -37
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-teams.cy.ts +4 -4
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-users.cy.ts +4 -4
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/dashboard.cy.ts +4 -4
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/subscriptions-overview.cy.ts +4 -4
- package/tests/cypress/e2e/api/{entities → _core/users}/users-security.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{auth → _core/auth}/login-logout.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{auth → _core/auth}/password-reset.cy.ts +1 -1
- package/tests/cypress/e2e/uat/{billing → _core/billing}/extended.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/feature-gates.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/page.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/status.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/team-switch.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/usage.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{devtools → _core/devtools}/api-tester.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{scheduled-actions → _core/scheduled-actions}/devtools-ui.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{teams → _core/teams}/roles-matrix.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{teams → _core/teams}/switcher.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{roles → features/roles}/editor-role.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{roles → features/roles}/member-restrictions.cy.ts +3 -3
- package/tests/cypress/e2e/uat/{roles → features/roles}/owner-full-crud.cy.ts +2 -2
- package/tests/cypress/src/core/DashboardEntityPOM.ts +2 -2
- package/tests/cypress/src/features/DashboardPOM.ts +2 -2
- package/tests/cypress/src/features/DevtoolsPOM.ts +12 -1
- package/tests/cypress/src/session-helpers.ts +35 -17
- package/tests/cypress/support/e2e.ts +2 -1
- package/tests/cypress.config.ts +29 -10
- package/tests/tsconfig.json +13 -7
- package/tests/cypress/e2e/_selectors/billing.cy.ts +0 -89
- package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +0 -113
- package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +0 -89
- /package/tests/cypress/e2e/{_devtools → _utils/devtools}/access.bdd.md +0 -0
- /package/tests/cypress/e2e/{_devtools → _utils/devtools}/navigation.bdd.md +0 -0
- /package/tests/cypress/e2e/{_devtools → _utils/devtools}/pages.bdd.md +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/README.md +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/sector7-superadmin-teams.narration.json +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/sector7-superadmin.cy.ts +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/teams-system.doc.cy.ts +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/teams-system.narration.json +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-teams.bdd.md +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-users.bdd.md +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/dashboard.bdd.md +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/subscriptions-overview.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/BillingAPIController.js +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/check-action.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/checkout.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/lifecycle.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/README.md +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/business.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/downgrade.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/fixtures/billing-plans.json +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/free.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/pro.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/starter.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/portal.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{devtools → _core/devtools}/registries.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{devtools → _core/devtools}/registries.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/cron-endpoint.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/cron-endpoint.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/devtools-endpoint.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/devtools-endpoint.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/scheduling.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/scheduling.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{settings → _core/settings}/api-keys.crud.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{entities → _core/users}/users-crud.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{entities → _core/users}/users-metas.cy.ts +0 -0
- /package/tests/cypress/e2e/api/entities/{customers-crud.cy.ts → customers/customers-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{customers-metas.cy.ts → customers/customers-metas.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{blocks-scope.cy.ts → pages/blocks-scope.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{pages-crud.cy.ts → pages/pages-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{pages-status.cy.ts → pages/pages-status.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{post-categories-crud.cy.ts → posts/post-categories-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{posts-crud.cy.ts → posts/posts-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{posts-status.cy.ts → posts/posts-status.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{tasks-crud.cy.ts → tasks/tasks-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{tasks-metas.cy.ts → tasks/tasks-metas.cy.ts} +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/developer-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/developer-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/superadmin-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/superadmin-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/custom-roles/editor-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/custom-roles/editor-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/login-logout.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/password-reset.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/admin-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/admin-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/member-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/member-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/owner-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/owner-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/extended.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/feature-gates.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/page.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/status.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/team-switch.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/usage.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{blocks → _core/blocks}/hero.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{blocks → _core/blocks}/hero.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{scheduled-actions → _core/scheduled-actions}/devtools-ui.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{teams → _core/teams}/roles-matrix.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{teams → _core/teams}/switcher.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{teams → _core/teams}/team-switcher.md +0 -0
- /package/tests/cypress/e2e/uat/{roles → features/roles}/editor-role.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{roles → features/roles}/member-restrictions.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{roles → features/roles}/owner-full-crud.bdd.md +0 -0
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Tasks Entity UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, tasks, entities, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, tasks, SEL_TASK_001, SEL_TASK_002, SEL_TASK_003, SEL_TASK_004, SEL_TASK_005, SEL_TASK_006, SEL_TASK_007]
|
|
6
|
+
coverage: 7
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Tasks Entity UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that Tasks entity component selectors exist in the DOM. This test validates the POM architecture with dynamic selectors works correctly for entity CRUD operations. Only checks selector presence, not full CRUD functionality.
|
|
12
|
+
|
|
13
|
+
**IMPORTANT:** Uses `TasksPOM` which extends `DashboardEntityPOM`. All dynamic selectors use entity slug `tasks`.
|
|
14
|
+
|
|
15
|
+
**Login:** Uses Carlos Mendoza (owner) via `loginAsDefaultOwner()` - requires team context for entity API calls.
|
|
16
|
+
|
|
17
|
+
## @test SEL_TASK_001: List Page Selectors
|
|
18
|
+
|
|
19
|
+
### Metadata
|
|
20
|
+
- **Priority:** High
|
|
21
|
+
- **Type:** Selector Validation
|
|
22
|
+
- **Tags:** tasks, list, table, pagination
|
|
23
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_001`
|
|
24
|
+
- **Status:** Active (10 passing, 0 skipped)
|
|
25
|
+
|
|
26
|
+
```gherkin:en
|
|
27
|
+
Scenario: Tasks list page has all required selectors
|
|
28
|
+
|
|
29
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
30
|
+
And I navigate to /dashboard/tasks
|
|
31
|
+
When the list page loads
|
|
32
|
+
Then I should find the table container element
|
|
33
|
+
And I should find the add button
|
|
34
|
+
And I should find the search input
|
|
35
|
+
And I should find the search container
|
|
36
|
+
And I should find the select all checkbox
|
|
37
|
+
And I should find the pagination container
|
|
38
|
+
And I should find pagination controls (first, prev, next, last)
|
|
39
|
+
And I should find the page size selector
|
|
40
|
+
And I should find the page info
|
|
41
|
+
And I should find at least one row with dynamic selector
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```gherkin:es
|
|
45
|
+
Scenario: Pagina de lista de tasks tiene todos los selectores requeridos
|
|
46
|
+
|
|
47
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
48
|
+
And navego a /dashboard/tasks
|
|
49
|
+
When la pagina de lista carga
|
|
50
|
+
Then deberia encontrar el elemento contenedor de tabla
|
|
51
|
+
And deberia encontrar el boton de agregar
|
|
52
|
+
And deberia encontrar el input de busqueda
|
|
53
|
+
And deberia encontrar el contenedor de busqueda
|
|
54
|
+
And deberia encontrar el checkbox de seleccionar todo
|
|
55
|
+
And deberia encontrar el contenedor de paginacion
|
|
56
|
+
And deberia encontrar controles de paginacion (primero, anterior, siguiente, ultimo)
|
|
57
|
+
And deberia encontrar el selector de tamano de pagina
|
|
58
|
+
And deberia encontrar la info de pagina
|
|
59
|
+
And deberia encontrar al menos una fila con selector dinamico
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Expected Results
|
|
63
|
+
- `tasks-table-container` selector exists ✅
|
|
64
|
+
- `tasks-add` selector exists ✅
|
|
65
|
+
- `tasks-search` selector exists ✅
|
|
66
|
+
- `tasks-search-container` selector exists ✅
|
|
67
|
+
- `tasks-select-all` selector exists ✅
|
|
68
|
+
- `tasks-pagination` selector exists ✅
|
|
69
|
+
- `tasks-page-first/prev/next/last` selectors exist ✅
|
|
70
|
+
- `tasks-page-size` selector exists ✅
|
|
71
|
+
- `tasks-page-info` selector exists ✅
|
|
72
|
+
- `tasks-row-{id}` dynamic selectors exist ✅
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## @test SEL_TASK_002: Filter Selectors
|
|
77
|
+
|
|
78
|
+
### Metadata
|
|
79
|
+
- **Priority:** Medium
|
|
80
|
+
- **Type:** Selector Validation
|
|
81
|
+
- **Tags:** tasks, filters, status, priority
|
|
82
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_002`
|
|
83
|
+
- **Status:** Active (3 passing, 0 skipped)
|
|
84
|
+
|
|
85
|
+
```gherkin:en
|
|
86
|
+
Scenario: Tasks list has filter selectors
|
|
87
|
+
|
|
88
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
89
|
+
And I navigate to /dashboard/tasks
|
|
90
|
+
When the list page loads
|
|
91
|
+
Then I should find the status filter trigger
|
|
92
|
+
And I should find the priority filter trigger
|
|
93
|
+
When I open the status filter
|
|
94
|
+
Then I should find the filter options content
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```gherkin:es
|
|
98
|
+
Scenario: Lista de tasks tiene selectores de filtro
|
|
99
|
+
|
|
100
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
101
|
+
And navego a /dashboard/tasks
|
|
102
|
+
When la pagina de lista carga
|
|
103
|
+
Then deberia encontrar el trigger del filtro de status
|
|
104
|
+
And deberia encontrar el trigger del filtro de prioridad
|
|
105
|
+
When abro el filtro de status
|
|
106
|
+
Then deberia encontrar el contenido de opciones del filtro
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Expected Results
|
|
110
|
+
- `tasks-filter-status-trigger` selector exists ✅
|
|
111
|
+
- `tasks-filter-priority-trigger` selector exists ✅
|
|
112
|
+
- `tasks-filter-status-content` selector visible when opened ✅
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## @test SEL_TASK_003: Row Dynamic Selectors
|
|
117
|
+
|
|
118
|
+
### Metadata
|
|
119
|
+
- **Priority:** High
|
|
120
|
+
- **Type:** Selector Validation
|
|
121
|
+
- **Tags:** tasks, rows, dynamic
|
|
122
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_003`
|
|
123
|
+
- **Status:** Active (1 passing, 0 skipped)
|
|
124
|
+
|
|
125
|
+
```gherkin:en
|
|
126
|
+
Scenario: Tasks rows have dynamic selectors with ID
|
|
127
|
+
|
|
128
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
129
|
+
And I navigate to /dashboard/tasks
|
|
130
|
+
When the list page loads with at least one task
|
|
131
|
+
Then I should extract the row ID from data-cy attribute
|
|
132
|
+
And I should find the row element with dynamic selector
|
|
133
|
+
And I should find the row select checkbox with dynamic ID
|
|
134
|
+
And I should find the row menu with dynamic ID
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```gherkin:es
|
|
138
|
+
Scenario: Filas de tasks tienen selectores dinamicos con ID
|
|
139
|
+
|
|
140
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
141
|
+
And navego a /dashboard/tasks
|
|
142
|
+
When la pagina de lista carga con al menos una tarea
|
|
143
|
+
Then deberia extraer el ID de fila del atributo data-cy
|
|
144
|
+
And deberia encontrar el elemento de fila con selector dinamico
|
|
145
|
+
And deberia encontrar el checkbox de seleccion de fila con ID dinamico
|
|
146
|
+
And deberia encontrar el menu de fila con ID dinamico
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Expected Results
|
|
150
|
+
- `tasks-row-{id}` dynamic selector works ✅
|
|
151
|
+
- `tasks-row-select-{id}` dynamic selector works ✅
|
|
152
|
+
- `tasks-row-menu-{id}` dynamic selector works ✅
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## @test SEL_TASK_004: Create Page Selectors
|
|
157
|
+
|
|
158
|
+
### Metadata
|
|
159
|
+
- **Priority:** High
|
|
160
|
+
- **Type:** Selector Validation
|
|
161
|
+
- **Tags:** tasks, create, form, fields
|
|
162
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_004`
|
|
163
|
+
- **Status:** Active (8 passing, 0 skipped)
|
|
164
|
+
|
|
165
|
+
```gherkin:en
|
|
166
|
+
Scenario: Tasks create page has form selectors
|
|
167
|
+
|
|
168
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
169
|
+
And I navigate to /dashboard/tasks/new
|
|
170
|
+
When the create form loads
|
|
171
|
+
Then I should find the form container
|
|
172
|
+
And I should find the submit button
|
|
173
|
+
And I should find the create header
|
|
174
|
+
And I should find the back button
|
|
175
|
+
And I should find the title field
|
|
176
|
+
And I should find the description field
|
|
177
|
+
And I should find the status field
|
|
178
|
+
And I should find the priority field
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
```gherkin:es
|
|
182
|
+
Scenario: Pagina de creacion de tasks tiene selectores de formulario
|
|
183
|
+
|
|
184
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
185
|
+
And navego a /dashboard/tasks/new
|
|
186
|
+
When el formulario de creacion carga
|
|
187
|
+
Then deberia encontrar el contenedor del formulario
|
|
188
|
+
And deberia encontrar el boton de submit
|
|
189
|
+
And deberia encontrar el header de creacion
|
|
190
|
+
And deberia encontrar el boton de volver
|
|
191
|
+
And deberia encontrar el campo de titulo
|
|
192
|
+
And deberia encontrar el campo de descripcion
|
|
193
|
+
And deberia encontrar el campo de status
|
|
194
|
+
And deberia encontrar el campo de prioridad
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Expected Results
|
|
198
|
+
- `tasks-form` selector exists ✅
|
|
199
|
+
- `tasks-form-submit` selector exists ✅
|
|
200
|
+
- `tasks-create-header` selector exists ✅
|
|
201
|
+
- `tasks-back` selector exists ✅
|
|
202
|
+
- `tasks-field-title` selector exists ✅
|
|
203
|
+
- `tasks-field-description` selector exists ✅
|
|
204
|
+
- `tasks-field-status` selector exists ✅
|
|
205
|
+
- `tasks-field-priority` selector exists ✅
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## @test SEL_TASK_005: Detail Page Selectors
|
|
210
|
+
|
|
211
|
+
### Metadata
|
|
212
|
+
- **Priority:** High
|
|
213
|
+
- **Type:** Selector Validation
|
|
214
|
+
- **Tags:** tasks, detail, view, actions
|
|
215
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_005`
|
|
216
|
+
- **Status:** Active (1 passing, 0 skipped)
|
|
217
|
+
|
|
218
|
+
```gherkin:en
|
|
219
|
+
Scenario: Tasks detail page has view selectors
|
|
220
|
+
|
|
221
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
222
|
+
And I navigate to /dashboard/tasks
|
|
223
|
+
When I get a task ID from the list
|
|
224
|
+
And I navigate to the task detail page
|
|
225
|
+
Then I should find the view header
|
|
226
|
+
And I should find the edit button
|
|
227
|
+
And I should find the delete button
|
|
228
|
+
And I should find the back button
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
```gherkin:es
|
|
232
|
+
Scenario: Pagina de detalle de tasks tiene selectores de vista
|
|
233
|
+
|
|
234
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
235
|
+
And navego a /dashboard/tasks
|
|
236
|
+
When obtengo un ID de tarea de la lista
|
|
237
|
+
And navego a la pagina de detalle de la tarea
|
|
238
|
+
Then deberia encontrar el header de vista
|
|
239
|
+
And deberia encontrar el boton de editar
|
|
240
|
+
And deberia encontrar el boton de eliminar
|
|
241
|
+
And deberia encontrar el boton de volver
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Expected Results
|
|
245
|
+
- `tasks-view-header` selector exists ✅
|
|
246
|
+
- `tasks-edit-btn` selector exists ✅
|
|
247
|
+
- `tasks-delete-btn` selector exists ✅
|
|
248
|
+
- `tasks-back` selector exists ✅
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## @test SEL_TASK_006: Bulk Actions Selectors
|
|
253
|
+
|
|
254
|
+
### Metadata
|
|
255
|
+
- **Priority:** Medium
|
|
256
|
+
- **Type:** Selector Validation
|
|
257
|
+
- **Tags:** tasks, bulk, actions, selection
|
|
258
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_006`
|
|
259
|
+
- **Status:** Active (1 passing, 0 skipped)
|
|
260
|
+
|
|
261
|
+
```gherkin:en
|
|
262
|
+
Scenario: Bulk action bar appears after selecting rows
|
|
263
|
+
|
|
264
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
265
|
+
And I navigate to /dashboard/tasks
|
|
266
|
+
When I select a row using the row checkbox
|
|
267
|
+
Then the bulk action bar should be visible
|
|
268
|
+
And I should find the bulk count indicator
|
|
269
|
+
And I should find the bulk delete button
|
|
270
|
+
And I should find the bulk clear button
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
```gherkin:es
|
|
274
|
+
Scenario: Barra de acciones masivas aparece despues de seleccionar filas
|
|
275
|
+
|
|
276
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
277
|
+
And navego a /dashboard/tasks
|
|
278
|
+
When selecciono una fila usando el checkbox de fila
|
|
279
|
+
Then la barra de acciones masivas deberia ser visible
|
|
280
|
+
And deberia encontrar el indicador de conteo masivo
|
|
281
|
+
And deberia encontrar el boton de eliminar masivo
|
|
282
|
+
And deberia encontrar el boton de limpiar seleccion
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Expected Results
|
|
286
|
+
- `tasks-bulk-bar` visible when rows selected ✅
|
|
287
|
+
- `tasks-bulk-count` selector exists ✅
|
|
288
|
+
- `tasks-bulk-delete` selector exists ✅
|
|
289
|
+
- `tasks-bulk-clear` selector exists ✅
|
|
290
|
+
|
|
291
|
+
### Notes
|
|
292
|
+
`bulkStatus` not tested - `enableChangeStatus` not enabled in EntityListWrapper.
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## @test SEL_TASK_007: Delete Dialog Selectors
|
|
297
|
+
|
|
298
|
+
### Metadata
|
|
299
|
+
- **Priority:** Medium
|
|
300
|
+
- **Type:** Selector Validation
|
|
301
|
+
- **Tags:** tasks, delete, dialog, confirmation
|
|
302
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_007`
|
|
303
|
+
- **Status:** Active (1 passing, 0 skipped)
|
|
304
|
+
|
|
305
|
+
```gherkin:en
|
|
306
|
+
Scenario: Delete dialog has confirmation selectors
|
|
307
|
+
|
|
308
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
309
|
+
And I navigate to a task detail page
|
|
310
|
+
When I click the delete button
|
|
311
|
+
Then the delete dialog should be visible
|
|
312
|
+
And I should find the confirm delete button
|
|
313
|
+
And I should find the cancel button
|
|
314
|
+
When I click cancel
|
|
315
|
+
Then the dialog should close
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
```gherkin:es
|
|
319
|
+
Scenario: Dialogo de eliminacion tiene selectores de confirmacion
|
|
320
|
+
|
|
321
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
322
|
+
And navego a una pagina de detalle de tarea
|
|
323
|
+
When hago click en el boton de eliminar
|
|
324
|
+
Then el dialogo de eliminacion deberia ser visible
|
|
325
|
+
And deberia encontrar el boton de confirmar eliminacion
|
|
326
|
+
And deberia encontrar el boton de cancelar
|
|
327
|
+
When hago click en cancelar
|
|
328
|
+
Then el dialogo deberia cerrarse
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### Expected Results
|
|
332
|
+
- `tasks-delete-dialog` visible when delete clicked ✅
|
|
333
|
+
- `tasks-delete-confirm` selector exists ✅
|
|
334
|
+
- `tasks-delete-cancel` selector exists ✅
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Related Components
|
|
339
|
+
|
|
340
|
+
| Component | File | Selectors |
|
|
341
|
+
|-----------|------|-----------|
|
|
342
|
+
| EntityTable | `packages/core/src/components/entities/EntityTable.tsx` | table-container, search, add, pagination, rows |
|
|
343
|
+
| EntityForm | `packages/core/src/components/entities/EntityForm.tsx` | form, submit, fields |
|
|
344
|
+
| EntityDetail | `packages/core/src/components/entities/EntityDetail.tsx` | detail, header, actions |
|
|
345
|
+
| BulkActionsBar | `packages/core/src/components/entities/BulkActionsBar.tsx` | bulk-bar, count, delete, clear |
|
|
346
|
+
| DeleteDialog | `packages/core/src/components/entities/DeleteDialog.tsx` | dialog, confirm, cancel |
|
|
347
|
+
|
|
348
|
+
## Related POMs
|
|
349
|
+
|
|
350
|
+
| POM | File | Usage |
|
|
351
|
+
|-----|------|-------|
|
|
352
|
+
| TasksPOM | `themes/default/tests/cypress/src/entities/TasksPOM.ts` | Entity-specific selectors and methods |
|
|
353
|
+
| DashboardEntityPOM | `themes/default/tests/cypress/src/core/DashboardEntityPOM.ts` | Base entity POM with dynamic selectors |
|
|
@@ -14,17 +14,18 @@
|
|
|
14
14
|
* - Assert elements exist in DOM (no full CRUD operations)
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { TasksPOM } from '
|
|
18
|
-
import { loginAsDefaultOwner } from '
|
|
17
|
+
import { TasksPOM } from '../../../src/entities/TasksPOM'
|
|
18
|
+
import { loginAsDefaultOwner } from '../../../src/session-helpers'
|
|
19
19
|
|
|
20
|
-
describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
20
|
+
describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors', '@tasks'] }, () => {
|
|
21
21
|
const tasks = TasksPOM.create()
|
|
22
22
|
|
|
23
23
|
beforeEach(() => {
|
|
24
|
+
// Login as Carlos Mendoza (owner) - has proper team context via setupTeamContext()
|
|
24
25
|
loginAsDefaultOwner()
|
|
25
26
|
})
|
|
26
27
|
|
|
27
|
-
describe('List Page Selectors', () => {
|
|
28
|
+
describe('SEL_TASK_001: List Page Selectors', { tags: '@SEL_TASK_001' }, () => {
|
|
28
29
|
beforeEach(() => {
|
|
29
30
|
tasks.visitList()
|
|
30
31
|
tasks.waitForList()
|
|
@@ -78,7 +79,7 @@ describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors'] }, () =>
|
|
|
78
79
|
})
|
|
79
80
|
})
|
|
80
81
|
|
|
81
|
-
describe('Filter Selectors', () => {
|
|
82
|
+
describe('SEL_TASK_002: Filter Selectors', { tags: '@SEL_TASK_002' }, () => {
|
|
82
83
|
beforeEach(() => {
|
|
83
84
|
tasks.visitList()
|
|
84
85
|
tasks.waitForList()
|
|
@@ -98,7 +99,7 @@ describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors'] }, () =>
|
|
|
98
99
|
})
|
|
99
100
|
})
|
|
100
101
|
|
|
101
|
-
describe('Row Dynamic Selectors', () => {
|
|
102
|
+
describe('SEL_TASK_003: Row Dynamic Selectors', { tags: '@SEL_TASK_003' }, () => {
|
|
102
103
|
beforeEach(() => {
|
|
103
104
|
tasks.visitList()
|
|
104
105
|
tasks.waitForList()
|
|
@@ -122,7 +123,7 @@ describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors'] }, () =>
|
|
|
122
123
|
})
|
|
123
124
|
})
|
|
124
125
|
|
|
125
|
-
describe('Create Page Selectors', () => {
|
|
126
|
+
describe('SEL_TASK_004: Create Page Selectors', { tags: '@SEL_TASK_004' }, () => {
|
|
126
127
|
beforeEach(() => {
|
|
127
128
|
tasks.visitCreate()
|
|
128
129
|
tasks.waitForForm()
|
|
@@ -161,7 +162,7 @@ describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors'] }, () =>
|
|
|
161
162
|
})
|
|
162
163
|
})
|
|
163
164
|
|
|
164
|
-
describe('Detail Page Selectors', () => {
|
|
165
|
+
describe('SEL_TASK_005: Detail Page Selectors', { tags: '@SEL_TASK_005' }, () => {
|
|
165
166
|
it('should find detail page elements after navigating to a task', () => {
|
|
166
167
|
// First get a task ID from the list
|
|
167
168
|
tasks.visitList()
|
|
@@ -186,7 +187,7 @@ describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors'] }, () =>
|
|
|
186
187
|
})
|
|
187
188
|
})
|
|
188
189
|
|
|
189
|
-
describe('Bulk Actions Selectors', () => {
|
|
190
|
+
describe('SEL_TASK_006: Bulk Actions Selectors', { tags: '@SEL_TASK_006' }, () => {
|
|
190
191
|
beforeEach(() => {
|
|
191
192
|
tasks.visitList()
|
|
192
193
|
tasks.waitForList()
|
|
@@ -211,7 +212,7 @@ describe('Tasks Entity Selectors Validation', { tags: ['@ui-selectors'] }, () =>
|
|
|
211
212
|
})
|
|
212
213
|
})
|
|
213
214
|
|
|
214
|
-
describe('Delete Dialog Selectors', () => {
|
|
215
|
+
describe('SEL_TASK_007: Delete Dialog Selectors', { tags: '@SEL_TASK_007' }, () => {
|
|
215
216
|
it('should find delete dialog elements', () => {
|
|
216
217
|
// Navigate to a task detail
|
|
217
218
|
tasks.visitList()
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* NOTE: There IS an API at /api/v1/post-categories but no UI page.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import { CategoriesPOM } from '
|
|
19
|
+
import { CategoriesPOM } from '../../../src/components/CategoriesPOM'
|
|
20
20
|
|
|
21
21
|
describe('Taxonomies Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
22
22
|
// ============================================
|