@nextsparkjs/theme-default 0.1.0-beta.44 → 0.1.0-beta.45
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/components/ai-chat/ChatPanel.tsx +7 -7
- package/components/ai-chat/Message.tsx +2 -2
- package/components/ai-chat/MessageInput.tsx +3 -3
- package/components/ai-chat/MessageList.tsx +3 -3
- package/components/ai-chat/TypingIndicator.tsx +2 -2
- package/entities/customers/api/docs.md +107 -0
- package/entities/customers/api/presets.ts +80 -0
- package/entities/pages/api/docs.md +114 -0
- package/entities/pages/api/presets.ts +72 -0
- package/entities/posts/api/docs.md +120 -0
- package/entities/posts/api/presets.ts +74 -0
- package/entities/tasks/api/docs.md +126 -0
- package/entities/tasks/api/presets.ts +84 -0
- package/lib/selectors.ts +2 -2
- package/messages/de/admin.json +45 -0
- package/messages/en/admin.json +45 -0
- package/messages/es/admin.json +45 -0
- package/messages/fr/admin.json +45 -0
- package/messages/it/admin.json +45 -0
- package/messages/pt/admin.json +45 -0
- package/package.json +3 -3
- package/styles/globals.css +24 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +491 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +475 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +14 -14
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +3 -3
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +38 -73
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +21 -42
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +117 -38
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +35 -12
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +50 -59
- package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +15 -23
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +395 -155
- package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +795 -174
- package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
- package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +269 -99
- package/tests/cypress/src/core/DashboardEntityPOM.ts +1 -1
- package/tests/cypress/src/features/DashboardPOM.ts +49 -28
- package/tests/cypress/src/features/PageBuilderPOM.ts +20 -0
- package/tests/cypress/src/features/SettingsPOM.ts +511 -166
- package/tests/cypress/src/features/SuperadminPOM.ts +679 -159
- package/tests/cypress/src/features/index.ts +10 -10
- package/tests/cypress/e2e/_utils/selectors/pages-editor.bdd.md +0 -207
- package/tests/cypress/e2e/_utils/selectors/pages-editor.cy.ts +0 -211
- package/tests/cypress/e2e/_utils/selectors/posts-editor.bdd.md +0 -184
- package/tests/cypress/e2e/_utils/selectors/posts-editor.cy.ts +0 -350
|
@@ -2,125 +2,159 @@
|
|
|
2
2
|
feature: Tasks Entity UI Selectors Validation
|
|
3
3
|
priority: high
|
|
4
4
|
tags: [selectors, tasks, entities, ui-validation]
|
|
5
|
-
grepTags: [ui-selectors, tasks,
|
|
6
|
-
coverage:
|
|
5
|
+
grepTags: [ui-selectors, entities, tasks, entities-list, SEL_TASK_PAGE_001, SEL_TASK_LIST_001, SEL_TASK_LIST_002, SEL_TASK_LIST_003, SEL_TASK_LIST_004, SEL_TASK_LIST_005, SEL_TASK_LIST_006, SEL_TASK_LIST_007, SEL_TASK_HEADER_001, SEL_TASK_DETAIL_001, SEL_TASK_FORM_001]
|
|
6
|
+
coverage: 11
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Tasks Entity UI Selectors Validation
|
|
10
10
|
|
|
11
|
-
> Validates that
|
|
11
|
+
> Validates that all entity selectors exist in the DOM. Organized by the 6 first-level keys in ENTITIES_SELECTORS: PAGE, LIST, HEADER, DETAIL, FORM, CHILD.
|
|
12
12
|
|
|
13
|
-
**IMPORTANT:** Uses `TasksPOM` which extends `DashboardEntityPOM`. All dynamic selectors use entity slug `tasks`.
|
|
13
|
+
**IMPORTANT:** Uses `TasksPOM` which extends `DashboardEntityPOM`. All dynamic selectors use entity slug `tasks`. Follows ENTITIES_SELECTORS structure from `entities.selectors.ts`.
|
|
14
14
|
|
|
15
15
|
**Login:** Uses Carlos Mendoza (owner) via `loginAsDefaultOwner()` - requires team context for entity API calls.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
**Structure (matches entities.selectors.ts):**
|
|
18
|
+
1. PAGE - Page-level container
|
|
19
|
+
2. LIST - List view (search, filters, table, pagination, bulk, confirm)
|
|
20
|
+
3. HEADER - Entity detail header (view/edit/create modes)
|
|
21
|
+
4. DETAIL - Detail view container
|
|
22
|
+
5. FORM - Form container, fields, and actions
|
|
23
|
+
6. CHILD - Child entity management (not applicable for tasks)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## @test SEL_TASK_PAGE_001: Page Container
|
|
28
|
+
|
|
29
|
+
### Metadata
|
|
30
|
+
- **Priority:** Medium
|
|
31
|
+
- **Type:** Selector Validation
|
|
32
|
+
- **Tags:** tasks, page, container
|
|
33
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_PAGE_001`
|
|
34
|
+
- **Status:** Skipped (not implemented in EntityList)
|
|
35
|
+
|
|
36
|
+
```gherkin:en
|
|
37
|
+
Scenario: Tasks page has page container selector
|
|
38
|
+
|
|
39
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
40
|
+
And I navigate to /dashboard/tasks
|
|
41
|
+
When the list page loads
|
|
42
|
+
Then I should find the page container element
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```gherkin:es
|
|
46
|
+
Scenario: La pagina de tasks tiene selector de contenedor de pagina
|
|
47
|
+
|
|
48
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
49
|
+
And navego a /dashboard/tasks
|
|
50
|
+
When la pagina de lista carga
|
|
51
|
+
Then deberia encontrar el elemento contenedor de pagina
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Expected Results
|
|
55
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
56
|
+
|---------------|--------------|---------------|--------|
|
|
57
|
+
| entities.page.container | tasks.selectors.page | tasks-page | **NOT IMPLEMENTED** |
|
|
58
|
+
|
|
59
|
+
### Notes
|
|
60
|
+
Page container selector not currently implemented in EntityList component. The page container would wrap the entire entity list view.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## @test SEL_TASK_LIST_001: Search Selectors
|
|
18
65
|
|
|
19
66
|
### Metadata
|
|
20
67
|
- **Priority:** High
|
|
21
68
|
- **Type:** Selector Validation
|
|
22
|
-
- **Tags:** tasks, list,
|
|
23
|
-
- **Grep:** `@ui-selectors` `@
|
|
24
|
-
- **Status:** Active (
|
|
69
|
+
- **Tags:** tasks, list, search
|
|
70
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_001`
|
|
71
|
+
- **Status:** Active (1 passing, 2 skipped)
|
|
25
72
|
|
|
26
73
|
```gherkin:en
|
|
27
|
-
Scenario: Tasks list
|
|
74
|
+
Scenario: Tasks list has search selectors
|
|
28
75
|
|
|
29
76
|
Given I am logged in as owner (Carlos Mendoza)
|
|
30
77
|
And I navigate to /dashboard/tasks
|
|
31
78
|
When the list page loads
|
|
32
|
-
Then I should find the
|
|
33
|
-
And I should find the
|
|
34
|
-
And I should find the search
|
|
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
|
|
79
|
+
Then I should find the search input
|
|
80
|
+
And I should find the search container (not implemented)
|
|
81
|
+
And I should find the search clear button (not implemented)
|
|
42
82
|
```
|
|
43
83
|
|
|
44
84
|
```gherkin:es
|
|
45
|
-
Scenario:
|
|
85
|
+
Scenario: La lista de tasks tiene selectores de busqueda
|
|
46
86
|
|
|
47
87
|
Given estoy logueado como owner (Carlos Mendoza)
|
|
48
88
|
And navego a /dashboard/tasks
|
|
49
89
|
When la pagina de lista carga
|
|
50
|
-
Then deberia encontrar el
|
|
51
|
-
And deberia encontrar el
|
|
52
|
-
And deberia encontrar el
|
|
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
|
|
90
|
+
Then deberia encontrar el input de busqueda
|
|
91
|
+
And deberia encontrar el contenedor de busqueda (no implementado)
|
|
92
|
+
And deberia encontrar el boton de limpiar busqueda (no implementado)
|
|
60
93
|
```
|
|
61
94
|
|
|
62
95
|
### Expected Results
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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 ✅
|
|
96
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
97
|
+
|---------------|--------------|---------------|--------|
|
|
98
|
+
| entities.list.search.input | tasks.selectors.search | tasks-search-input | Implemented |
|
|
99
|
+
| entities.list.search.container | tasks.selectors.searchContainer | tasks-search | **NOT IMPLEMENTED** |
|
|
100
|
+
| entities.list.search.clear | tasks.selectors.searchClear | tasks-search-clear | **NOT IMPLEMENTED** |
|
|
73
101
|
|
|
74
102
|
---
|
|
75
103
|
|
|
76
|
-
## @test
|
|
104
|
+
## @test SEL_TASK_LIST_002: Table Structure Selectors
|
|
77
105
|
|
|
78
106
|
### Metadata
|
|
79
|
-
- **Priority:**
|
|
107
|
+
- **Priority:** High
|
|
80
108
|
- **Type:** Selector Validation
|
|
81
|
-
- **Tags:** tasks,
|
|
82
|
-
- **Grep:** `@ui-selectors` `@
|
|
83
|
-
- **Status:** Active (
|
|
109
|
+
- **Tags:** tasks, list, table
|
|
110
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_002`
|
|
111
|
+
- **Status:** Active (4 passing, 1 skipped)
|
|
84
112
|
|
|
85
113
|
```gherkin:en
|
|
86
|
-
Scenario: Tasks list has
|
|
114
|
+
Scenario: Tasks list has table structure selectors
|
|
87
115
|
|
|
88
116
|
Given I am logged in as owner (Carlos Mendoza)
|
|
89
117
|
And I navigate to /dashboard/tasks
|
|
90
118
|
When the list page loads
|
|
91
|
-
Then I should find the
|
|
92
|
-
And I should find the
|
|
93
|
-
|
|
94
|
-
|
|
119
|
+
Then I should find the table container
|
|
120
|
+
And I should find the table element
|
|
121
|
+
And I should find the add button
|
|
122
|
+
And I should find the select all checkbox
|
|
123
|
+
And I should find the selection count (only when items selected)
|
|
95
124
|
```
|
|
96
125
|
|
|
97
126
|
```gherkin:es
|
|
98
|
-
Scenario:
|
|
127
|
+
Scenario: La lista de tasks tiene selectores de estructura de tabla
|
|
99
128
|
|
|
100
129
|
Given estoy logueado como owner (Carlos Mendoza)
|
|
101
130
|
And navego a /dashboard/tasks
|
|
102
131
|
When la pagina de lista carga
|
|
103
|
-
Then deberia encontrar el
|
|
104
|
-
And deberia encontrar el
|
|
105
|
-
|
|
106
|
-
|
|
132
|
+
Then deberia encontrar el contenedor de tabla
|
|
133
|
+
And deberia encontrar el elemento de tabla
|
|
134
|
+
And deberia encontrar el boton de agregar
|
|
135
|
+
And deberia encontrar el checkbox de seleccionar todo
|
|
136
|
+
And deberia encontrar el conteo de seleccion (solo cuando hay items seleccionados)
|
|
107
137
|
```
|
|
108
138
|
|
|
109
139
|
### Expected Results
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
140
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
141
|
+
|---------------|--------------|---------------|--------|
|
|
142
|
+
| entities.list.table.container | tasks.selectors.tableContainer | tasks-table-container | Implemented |
|
|
143
|
+
| entities.list.table.element | tasks.selectors.table | tasks-table | Implemented |
|
|
144
|
+
| entities.list.addButton | tasks.selectors.addButton | tasks-add | Implemented |
|
|
145
|
+
| entities.list.table.selectAll | tasks.selectors.selectAll | tasks-select-all | Implemented |
|
|
146
|
+
| entities.list.selectionCount | tasks.selectors.selectionCount | tasks-selection-count | **Only visible when items selected** |
|
|
113
147
|
|
|
114
148
|
---
|
|
115
149
|
|
|
116
|
-
## @test
|
|
150
|
+
## @test SEL_TASK_LIST_003: Row Dynamic Selectors
|
|
117
151
|
|
|
118
152
|
### Metadata
|
|
119
153
|
- **Priority:** High
|
|
120
154
|
- **Type:** Selector Validation
|
|
121
|
-
- **Tags:** tasks, rows, dynamic
|
|
122
|
-
- **Grep:** `@ui-selectors` `@
|
|
123
|
-
- **Status:** Active (
|
|
155
|
+
- **Tags:** tasks, list, rows, dynamic
|
|
156
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_003`
|
|
157
|
+
- **Status:** Active (3 passing, 0 skipped)
|
|
124
158
|
|
|
125
159
|
```gherkin:en
|
|
126
160
|
Scenario: Tasks rows have dynamic selectors with ID
|
|
@@ -128,135 +162,147 @@ Scenario: Tasks rows have dynamic selectors with ID
|
|
|
128
162
|
Given I am logged in as owner (Carlos Mendoza)
|
|
129
163
|
And I navigate to /dashboard/tasks
|
|
130
164
|
When the list page loads with at least one task
|
|
131
|
-
Then I should
|
|
165
|
+
Then I should find row elements with rowGeneric pattern
|
|
166
|
+
And I should extract the row ID from data-cy attribute
|
|
132
167
|
And I should find the row element with dynamic selector
|
|
133
168
|
And I should find the row select checkbox with dynamic ID
|
|
134
169
|
And I should find the row menu with dynamic ID
|
|
170
|
+
When I open the row menu
|
|
171
|
+
Then I should find row action selectors (view, edit, delete)
|
|
135
172
|
```
|
|
136
173
|
|
|
137
174
|
```gherkin:es
|
|
138
|
-
Scenario:
|
|
175
|
+
Scenario: Las filas de tasks tienen selectores dinamicos con ID
|
|
139
176
|
|
|
140
177
|
Given estoy logueado como owner (Carlos Mendoza)
|
|
141
178
|
And navego a /dashboard/tasks
|
|
142
179
|
When la pagina de lista carga con al menos una tarea
|
|
143
|
-
Then deberia
|
|
180
|
+
Then deberia encontrar elementos de fila con patron rowGeneric
|
|
181
|
+
And deberia extraer el ID de fila del atributo data-cy
|
|
144
182
|
And deberia encontrar el elemento de fila con selector dinamico
|
|
145
183
|
And deberia encontrar el checkbox de seleccion de fila con ID dinamico
|
|
146
184
|
And deberia encontrar el menu de fila con ID dinamico
|
|
185
|
+
When abro el menu de fila
|
|
186
|
+
Then deberia encontrar selectores de accion de fila (ver, editar, eliminar)
|
|
147
187
|
```
|
|
148
188
|
|
|
149
189
|
### Expected Results
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
190
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
191
|
+
|---------------|--------------|---------------|--------|
|
|
192
|
+
| entities.list.table.row (generic) | tasks.selectors.rowGeneric | tasks-row-* | Implemented |
|
|
193
|
+
| entities.list.table.row.element | tasks.selectors.row(id) | tasks-row-{id} | Implemented |
|
|
194
|
+
| entities.list.table.row.checkbox | tasks.selectors.rowSelect(id) | tasks-row-select-{id} | Implemented |
|
|
195
|
+
| entities.list.table.row.menu | tasks.selectors.rowMenu(id) | tasks-row-menu-{id} | Implemented |
|
|
196
|
+
| entities.list.table.row.action | tasks.selectors.rowAction(action, id) | tasks-action-{action}-{id} | Implemented |
|
|
153
197
|
|
|
154
198
|
---
|
|
155
199
|
|
|
156
|
-
## @test
|
|
200
|
+
## @test SEL_TASK_LIST_004: Pagination Selectors
|
|
157
201
|
|
|
158
202
|
### Metadata
|
|
159
|
-
- **Priority:**
|
|
203
|
+
- **Priority:** Medium
|
|
160
204
|
- **Type:** Selector Validation
|
|
161
|
-
- **Tags:** tasks,
|
|
162
|
-
- **Grep:** `@ui-selectors` `@
|
|
163
|
-
- **Status:** Active (
|
|
205
|
+
- **Tags:** tasks, list, pagination
|
|
206
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_004`
|
|
207
|
+
- **Status:** Active (4 passing, 0 skipped)
|
|
164
208
|
|
|
165
209
|
```gherkin:en
|
|
166
|
-
Scenario: Tasks
|
|
210
|
+
Scenario: Tasks list has pagination selectors
|
|
167
211
|
|
|
168
212
|
Given I am logged in as owner (Carlos Mendoza)
|
|
169
|
-
And I navigate to /dashboard/tasks
|
|
170
|
-
When the
|
|
171
|
-
Then I should find the
|
|
172
|
-
And I should find the
|
|
173
|
-
And I should find the
|
|
174
|
-
And I should find
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
And I should find the status field
|
|
178
|
-
And I should find the priority field
|
|
213
|
+
And I navigate to /dashboard/tasks
|
|
214
|
+
When the list page loads
|
|
215
|
+
Then I should find the pagination container
|
|
216
|
+
And I should find the page info
|
|
217
|
+
And I should find the page size selector
|
|
218
|
+
And I should find pagination navigation controls (first, prev, next, last)
|
|
219
|
+
When I open the page size dropdown
|
|
220
|
+
Then I should find page size options (10, 20)
|
|
179
221
|
```
|
|
180
222
|
|
|
181
223
|
```gherkin:es
|
|
182
|
-
Scenario:
|
|
224
|
+
Scenario: La lista de tasks tiene selectores de paginacion
|
|
183
225
|
|
|
184
226
|
Given estoy logueado como owner (Carlos Mendoza)
|
|
185
|
-
And navego a /dashboard/tasks
|
|
186
|
-
When
|
|
187
|
-
Then deberia encontrar el contenedor
|
|
188
|
-
And deberia encontrar
|
|
189
|
-
And deberia encontrar el
|
|
190
|
-
And deberia encontrar
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
And deberia encontrar el campo de status
|
|
194
|
-
And deberia encontrar el campo de prioridad
|
|
227
|
+
And navego a /dashboard/tasks
|
|
228
|
+
When la pagina de lista carga
|
|
229
|
+
Then deberia encontrar el contenedor de paginacion
|
|
230
|
+
And deberia encontrar la info de pagina
|
|
231
|
+
And deberia encontrar el selector de tamano de pagina
|
|
232
|
+
And deberia encontrar controles de navegacion de paginacion (primero, anterior, siguiente, ultimo)
|
|
233
|
+
When abro el dropdown de tamano de pagina
|
|
234
|
+
Then deberia encontrar opciones de tamano de pagina (10, 20)
|
|
195
235
|
```
|
|
196
236
|
|
|
197
237
|
### Expected Results
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
238
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
239
|
+
|---------------|--------------|---------------|--------|
|
|
240
|
+
| entities.list.pagination.container | tasks.selectors.pagination | tasks-pagination | Implemented |
|
|
241
|
+
| entities.list.pagination.info | tasks.selectors.pageInfo | tasks-page-info | Implemented |
|
|
242
|
+
| entities.list.pagination.pageSize | tasks.selectors.pageSize | tasks-page-size | Implemented |
|
|
243
|
+
| entities.list.pagination.first | tasks.selectors.pageFirst | tasks-page-first | Implemented |
|
|
244
|
+
| entities.list.pagination.prev | tasks.selectors.pagePrev | tasks-page-prev | Implemented |
|
|
245
|
+
| entities.list.pagination.next | tasks.selectors.pageNext | tasks-page-next | Implemented |
|
|
246
|
+
| entities.list.pagination.last | tasks.selectors.pageLast | tasks-page-last | Implemented |
|
|
247
|
+
| entities.list.pagination.pageSizeOption | tasks.selectors.pageSizeOption(size) | tasks-page-size-{size} | Implemented |
|
|
206
248
|
|
|
207
249
|
---
|
|
208
250
|
|
|
209
|
-
## @test
|
|
251
|
+
## @test SEL_TASK_LIST_005: Filter Selectors
|
|
210
252
|
|
|
211
253
|
### Metadata
|
|
212
|
-
- **Priority:**
|
|
254
|
+
- **Priority:** Medium
|
|
213
255
|
- **Type:** Selector Validation
|
|
214
|
-
- **Tags:** tasks,
|
|
215
|
-
- **Grep:** `@ui-selectors` `@
|
|
216
|
-
- **Status:** Active (
|
|
256
|
+
- **Tags:** tasks, list, filters
|
|
257
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_005`
|
|
258
|
+
- **Status:** Active (4 passing, 1 skipped)
|
|
217
259
|
|
|
218
260
|
```gherkin:en
|
|
219
|
-
Scenario: Tasks
|
|
261
|
+
Scenario: Tasks list has filter selectors
|
|
220
262
|
|
|
221
263
|
Given I am logged in as owner (Carlos Mendoza)
|
|
222
264
|
And I navigate to /dashboard/tasks
|
|
223
|
-
When
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
And I should find
|
|
265
|
+
When the list page loads
|
|
266
|
+
Then I should find the status filter trigger
|
|
267
|
+
And I should find the priority filter trigger
|
|
268
|
+
When I open the status filter
|
|
269
|
+
Then I should find the filter content
|
|
270
|
+
And I should find filter options
|
|
271
|
+
And I should find clear all filters button (not implemented)
|
|
229
272
|
```
|
|
230
273
|
|
|
231
274
|
```gherkin:es
|
|
232
|
-
Scenario:
|
|
275
|
+
Scenario: La lista de tasks tiene selectores de filtro
|
|
233
276
|
|
|
234
277
|
Given estoy logueado como owner (Carlos Mendoza)
|
|
235
278
|
And navego a /dashboard/tasks
|
|
236
|
-
When
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
And deberia encontrar
|
|
279
|
+
When la pagina de lista carga
|
|
280
|
+
Then deberia encontrar el trigger del filtro de status
|
|
281
|
+
And deberia encontrar el trigger del filtro de prioridad
|
|
282
|
+
When abro el filtro de status
|
|
283
|
+
Then deberia encontrar el contenido del filtro
|
|
284
|
+
And deberia encontrar opciones de filtro
|
|
285
|
+
And deberia encontrar boton de limpiar todos los filtros (no implementado)
|
|
242
286
|
```
|
|
243
287
|
|
|
244
288
|
### Expected Results
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
289
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
290
|
+
|---------------|--------------|---------------|--------|
|
|
291
|
+
| entities.list.filters.trigger | tasks.selectors.filterTrigger(field) | tasks-filter-{field} | Implemented |
|
|
292
|
+
| entities.list.filters.content | tasks.selectors.filterContent(field) | tasks-filter-{field}-content | Implemented |
|
|
293
|
+
| entities.list.filters.option | tasks.selectors.filterOption(field, value) | tasks-filter-{field}-{value} | Implemented |
|
|
294
|
+
| entities.list.filters.clearAll | tasks.selectors.filterClearAll | tasks-filter-clear-all | **NOT IMPLEMENTED** |
|
|
249
295
|
|
|
250
296
|
---
|
|
251
297
|
|
|
252
|
-
## @test
|
|
298
|
+
## @test SEL_TASK_LIST_006: Bulk Action Selectors
|
|
253
299
|
|
|
254
300
|
### Metadata
|
|
255
301
|
- **Priority:** Medium
|
|
256
302
|
- **Type:** Selector Validation
|
|
257
|
-
- **Tags:** tasks, bulk, actions
|
|
258
|
-
- **Grep:** `@ui-selectors` `@
|
|
259
|
-
- **Status:** Active (
|
|
303
|
+
- **Tags:** tasks, list, bulk, actions
|
|
304
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_006`
|
|
305
|
+
- **Status:** Active (2 passing, 1 skipped)
|
|
260
306
|
|
|
261
307
|
```gherkin:en
|
|
262
308
|
Scenario: Bulk action bar appears after selecting rows
|
|
@@ -268,10 +314,15 @@ Then the bulk action bar should be visible
|
|
|
268
314
|
And I should find the bulk count indicator
|
|
269
315
|
And I should find the bulk delete button
|
|
270
316
|
And I should find the bulk clear button
|
|
317
|
+
And I should find the bulk status button (not enabled)
|
|
318
|
+
When I click bulk delete
|
|
319
|
+
Then I should find the bulk delete dialog
|
|
320
|
+
And I should find bulk delete cancel button
|
|
321
|
+
And I should find bulk delete confirm button
|
|
271
322
|
```
|
|
272
323
|
|
|
273
324
|
```gherkin:es
|
|
274
|
-
Scenario:
|
|
325
|
+
Scenario: La barra de acciones masivas aparece despues de seleccionar filas
|
|
275
326
|
|
|
276
327
|
Given estoy logueado como owner (Carlos Mendoza)
|
|
277
328
|
And navego a /dashboard/tasks
|
|
@@ -280,58 +331,246 @@ Then la barra de acciones masivas deberia ser visible
|
|
|
280
331
|
And deberia encontrar el indicador de conteo masivo
|
|
281
332
|
And deberia encontrar el boton de eliminar masivo
|
|
282
333
|
And deberia encontrar el boton de limpiar seleccion
|
|
334
|
+
And deberia encontrar el boton de status masivo (no habilitado)
|
|
335
|
+
When hago click en eliminar masivo
|
|
336
|
+
Then deberia encontrar el dialogo de eliminar masivo
|
|
337
|
+
And deberia encontrar el boton de cancelar eliminar masivo
|
|
338
|
+
And deberia encontrar el boton de confirmar eliminar masivo
|
|
283
339
|
```
|
|
284
340
|
|
|
285
341
|
### Expected Results
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
342
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
343
|
+
|---------------|--------------|---------------|--------|
|
|
344
|
+
| entities.list.bulk.bar | tasks.selectors.bulkBar | tasks-bulk-bar | Implemented |
|
|
345
|
+
| entities.list.bulk.count | tasks.selectors.bulkCount | tasks-bulk-count | Implemented |
|
|
346
|
+
| entities.list.bulk.deleteButton | tasks.selectors.bulkDelete | tasks-bulk-delete | Implemented |
|
|
347
|
+
| entities.list.bulk.clearButton | tasks.selectors.bulkClear | tasks-bulk-clear | Implemented |
|
|
348
|
+
| entities.list.bulk.statusButton | tasks.selectors.bulkStatus | tasks-bulk-status | **enableChangeStatus not enabled** |
|
|
349
|
+
| entities.list.bulk.deleteDialog | tasks.selectors.bulkDeleteDialog | tasks-bulk-delete-dialog | Implemented |
|
|
350
|
+
| entities.list.bulk.deleteCancel | tasks.selectors.bulkDeleteCancel | tasks-bulk-delete-cancel | Implemented |
|
|
351
|
+
| entities.list.bulk.deleteConfirm | tasks.selectors.bulkDeleteConfirm | tasks-bulk-delete-confirm | Implemented |
|
|
293
352
|
|
|
294
353
|
---
|
|
295
354
|
|
|
296
|
-
## @test
|
|
355
|
+
## @test SEL_TASK_LIST_007: Confirm Dialog Selectors
|
|
297
356
|
|
|
298
357
|
### Metadata
|
|
299
358
|
- **Priority:** Medium
|
|
300
359
|
- **Type:** Selector Validation
|
|
301
|
-
- **Tags:** tasks,
|
|
302
|
-
- **Grep:** `@ui-selectors` `@
|
|
360
|
+
- **Tags:** tasks, list, confirm, dialog
|
|
361
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_007`
|
|
303
362
|
- **Status:** Active (1 passing, 0 skipped)
|
|
304
363
|
|
|
305
364
|
```gherkin:en
|
|
306
|
-
Scenario:
|
|
365
|
+
Scenario: Confirm dialog appears for row delete action
|
|
307
366
|
|
|
308
367
|
Given I am logged in as owner (Carlos Mendoza)
|
|
309
|
-
And I navigate to
|
|
310
|
-
When I
|
|
311
|
-
|
|
312
|
-
|
|
368
|
+
And I navigate to /dashboard/tasks
|
|
369
|
+
When I open the row menu for a task
|
|
370
|
+
And I click the delete action
|
|
371
|
+
Then the confirm dialog should be visible
|
|
313
372
|
And I should find the cancel button
|
|
373
|
+
And I should find the confirm action button
|
|
314
374
|
When I click cancel
|
|
315
375
|
Then the dialog should close
|
|
316
376
|
```
|
|
317
377
|
|
|
318
378
|
```gherkin:es
|
|
319
|
-
Scenario:
|
|
379
|
+
Scenario: El dialogo de confirmacion aparece para la accion de eliminar fila
|
|
320
380
|
|
|
321
381
|
Given estoy logueado como owner (Carlos Mendoza)
|
|
322
|
-
And navego a
|
|
323
|
-
When
|
|
324
|
-
|
|
325
|
-
|
|
382
|
+
And navego a /dashboard/tasks
|
|
383
|
+
When abro el menu de fila para una tarea
|
|
384
|
+
And hago click en la accion de eliminar
|
|
385
|
+
Then el dialogo de confirmacion deberia ser visible
|
|
326
386
|
And deberia encontrar el boton de cancelar
|
|
387
|
+
And deberia encontrar el boton de confirmar accion
|
|
327
388
|
When hago click en cancelar
|
|
328
389
|
Then el dialogo deberia cerrarse
|
|
329
390
|
```
|
|
330
391
|
|
|
331
392
|
### Expected Results
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
393
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
394
|
+
|---------------|--------------|---------------|--------|
|
|
395
|
+
| entities.list.confirm.dialog | tasks.selectors.confirmDialog | tasks-confirm-dialog | Implemented |
|
|
396
|
+
| entities.list.confirm.cancel | tasks.selectors.confirmCancel | tasks-confirm-cancel | Implemented |
|
|
397
|
+
| entities.list.confirm.action | tasks.selectors.confirmAction | tasks-confirm-action | Implemented |
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## @test SEL_TASK_HEADER_001: Header Selectors (all modes)
|
|
402
|
+
|
|
403
|
+
### Metadata
|
|
404
|
+
- **Priority:** High
|
|
405
|
+
- **Type:** Selector Validation
|
|
406
|
+
- **Tags:** tasks, header, modes
|
|
407
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_HEADER_001`
|
|
408
|
+
- **Status:** Active (5 passing, 1 skipped)
|
|
409
|
+
|
|
410
|
+
```gherkin:en
|
|
411
|
+
Scenario: Create mode header has selectors
|
|
412
|
+
|
|
413
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
414
|
+
And I navigate to /dashboard/tasks/new
|
|
415
|
+
When the create form loads
|
|
416
|
+
Then I should find the create header
|
|
417
|
+
And I should find the back button
|
|
418
|
+
And I should find header title (not implemented in create mode)
|
|
419
|
+
|
|
420
|
+
Scenario: View mode header has selectors
|
|
421
|
+
|
|
422
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
423
|
+
And I navigate to a task detail page
|
|
424
|
+
When the detail page loads
|
|
425
|
+
Then I should find the view header
|
|
426
|
+
And I should find the back button
|
|
427
|
+
And I should find the edit button
|
|
428
|
+
And I should find the delete button
|
|
429
|
+
When I click delete
|
|
430
|
+
Then I should find the delete dialog
|
|
431
|
+
And I should find delete confirm button
|
|
432
|
+
And I should find delete cancel button
|
|
433
|
+
|
|
434
|
+
Scenario: Edit mode header has selectors
|
|
435
|
+
|
|
436
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
437
|
+
And I navigate to edit a task
|
|
438
|
+
When the edit form loads
|
|
439
|
+
Then I should find the edit header
|
|
440
|
+
And I should find the back button
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
```gherkin:es
|
|
444
|
+
Scenario: El header de modo crear tiene selectores
|
|
445
|
+
|
|
446
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
447
|
+
And navego a /dashboard/tasks/new
|
|
448
|
+
When el formulario de creacion carga
|
|
449
|
+
Then deberia encontrar el header de crear
|
|
450
|
+
And deberia encontrar el boton de volver
|
|
451
|
+
And deberia encontrar el titulo del header (no implementado en modo crear)
|
|
452
|
+
|
|
453
|
+
Scenario: El header de modo ver tiene selectores
|
|
454
|
+
|
|
455
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
456
|
+
And navego a una pagina de detalle de tarea
|
|
457
|
+
When la pagina de detalle carga
|
|
458
|
+
Then deberia encontrar el header de ver
|
|
459
|
+
And deberia encontrar el boton de volver
|
|
460
|
+
And deberia encontrar el boton de editar
|
|
461
|
+
And deberia encontrar el boton de eliminar
|
|
462
|
+
When hago click en eliminar
|
|
463
|
+
Then deberia encontrar el dialogo de eliminar
|
|
464
|
+
And deberia encontrar el boton de confirmar eliminar
|
|
465
|
+
And deberia encontrar el boton de cancelar eliminar
|
|
466
|
+
|
|
467
|
+
Scenario: El header de modo editar tiene selectores
|
|
468
|
+
|
|
469
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
470
|
+
And navego a editar una tarea
|
|
471
|
+
When el formulario de edicion carga
|
|
472
|
+
Then deberia encontrar el header de editar
|
|
473
|
+
And deberia encontrar el boton de volver
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
### Expected Results
|
|
477
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
478
|
+
|---------------|--------------|---------------|--------|
|
|
479
|
+
| entities.header.container (create) | tasks.selectors.createHeader | tasks-create-header | Implemented |
|
|
480
|
+
| entities.header.container (view) | tasks.selectors.viewHeader | tasks-view-header | Implemented |
|
|
481
|
+
| entities.header.container (edit) | tasks.selectors.editHeader | tasks-edit-header | Implemented |
|
|
482
|
+
| entities.header.backButton | tasks.selectors.backButton | tasks-back | Implemented |
|
|
483
|
+
| entities.header.title | tasks.selectors.title | tasks-header-title | **NOT IMPLEMENTED** |
|
|
484
|
+
| entities.header.editButton | tasks.selectors.editButton | tasks-edit-btn | Implemented |
|
|
485
|
+
| entities.header.deleteButton | tasks.selectors.deleteButton | tasks-delete-btn | Implemented |
|
|
486
|
+
| entities.header.deleteDialog | tasks.selectors.deleteDialog | tasks-delete-dialog | Implemented |
|
|
487
|
+
| entities.header.deleteConfirm | tasks.selectors.deleteConfirm | tasks-delete-confirm | Implemented |
|
|
488
|
+
| entities.header.deleteCancel | tasks.selectors.deleteCancel | tasks-delete-cancel | Implemented |
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## @test SEL_TASK_DETAIL_001: Detail Container
|
|
493
|
+
|
|
494
|
+
### Metadata
|
|
495
|
+
- **Priority:** High
|
|
496
|
+
- **Type:** Selector Validation
|
|
497
|
+
- **Tags:** tasks, detail, container
|
|
498
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_DETAIL_001`
|
|
499
|
+
- **Status:** Active (1 passing, 0 skipped)
|
|
500
|
+
|
|
501
|
+
```gherkin:en
|
|
502
|
+
Scenario: Task detail page has container selector
|
|
503
|
+
|
|
504
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
505
|
+
And I navigate to /dashboard/tasks
|
|
506
|
+
When I get a task ID from the list
|
|
507
|
+
And I navigate to the task detail page
|
|
508
|
+
Then I should find the detail container
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
```gherkin:es
|
|
512
|
+
Scenario: La pagina de detalle de tarea tiene selector de contenedor
|
|
513
|
+
|
|
514
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
515
|
+
And navego a /dashboard/tasks
|
|
516
|
+
When obtengo un ID de tarea de la lista
|
|
517
|
+
And navego a la pagina de detalle de la tarea
|
|
518
|
+
Then deberia encontrar el contenedor de detalle
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
### Expected Results
|
|
522
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
523
|
+
|---------------|--------------|---------------|--------|
|
|
524
|
+
| entities.detail.container | tasks.selectors.detail | tasks-detail | Implemented |
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## @test SEL_TASK_FORM_001: Form Selectors
|
|
529
|
+
|
|
530
|
+
### Metadata
|
|
531
|
+
- **Priority:** High
|
|
532
|
+
- **Type:** Selector Validation
|
|
533
|
+
- **Tags:** tasks, form, fields
|
|
534
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_FORM_001`
|
|
535
|
+
- **Status:** Active (6 passing, 0 skipped)
|
|
536
|
+
|
|
537
|
+
```gherkin:en
|
|
538
|
+
Scenario: Task form has all required selectors
|
|
539
|
+
|
|
540
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
541
|
+
And I navigate to /dashboard/tasks/new
|
|
542
|
+
When the create form loads
|
|
543
|
+
Then I should find the form container
|
|
544
|
+
And I should find the submit button
|
|
545
|
+
And I should find the title field
|
|
546
|
+
And I should find the description field
|
|
547
|
+
And I should find the status field
|
|
548
|
+
And I should find the priority field
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
```gherkin:es
|
|
552
|
+
Scenario: El formulario de tarea tiene todos los selectores requeridos
|
|
553
|
+
|
|
554
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
555
|
+
And navego a /dashboard/tasks/new
|
|
556
|
+
When el formulario de creacion carga
|
|
557
|
+
Then deberia encontrar el contenedor del formulario
|
|
558
|
+
And deberia encontrar el boton de submit
|
|
559
|
+
And deberia encontrar el campo de titulo
|
|
560
|
+
And deberia encontrar el campo de descripcion
|
|
561
|
+
And deberia encontrar el campo de status
|
|
562
|
+
And deberia encontrar el campo de prioridad
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
### Expected Results
|
|
566
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
567
|
+
|---------------|--------------|---------------|--------|
|
|
568
|
+
| entities.form.container | tasks.selectors.form | tasks-form | Implemented |
|
|
569
|
+
| entities.form.submitButton | tasks.selectors.submitButton | tasks-form-submit | Implemented |
|
|
570
|
+
| entities.form.field (title) | tasks.selectors.field('title') | tasks-field-title | Implemented |
|
|
571
|
+
| entities.form.field (description) | tasks.selectors.field('description') | tasks-field-description | Implemented |
|
|
572
|
+
| entities.form.field (status) | tasks.selectors.field('status') | tasks-field-status | Implemented |
|
|
573
|
+
| entities.form.field (priority) | tasks.selectors.field('priority') | tasks-field-priority | Implemented |
|
|
335
574
|
|
|
336
575
|
---
|
|
337
576
|
|
|
@@ -343,7 +582,8 @@ Then el dialogo deberia cerrarse
|
|
|
343
582
|
| EntityForm | `packages/core/src/components/entities/EntityForm.tsx` | form, submit, fields |
|
|
344
583
|
| EntityDetail | `packages/core/src/components/entities/EntityDetail.tsx` | detail, header, actions |
|
|
345
584
|
| BulkActionsBar | `packages/core/src/components/entities/BulkActionsBar.tsx` | bulk-bar, count, delete, clear |
|
|
346
|
-
|
|
|
585
|
+
| ConfirmDialog | `packages/core/src/components/entities/ConfirmDialog.tsx` | dialog, confirm, cancel |
|
|
586
|
+
| EntityHeader | `packages/core/src/components/entities/EntityHeader.tsx` | header (create/view/edit), back, actions |
|
|
347
587
|
|
|
348
588
|
## Related POMs
|
|
349
589
|
|