@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.
Files changed (48) hide show
  1. package/components/ai-chat/ChatPanel.tsx +7 -7
  2. package/components/ai-chat/Message.tsx +2 -2
  3. package/components/ai-chat/MessageInput.tsx +3 -3
  4. package/components/ai-chat/MessageList.tsx +3 -3
  5. package/components/ai-chat/TypingIndicator.tsx +2 -2
  6. package/entities/customers/api/docs.md +107 -0
  7. package/entities/customers/api/presets.ts +80 -0
  8. package/entities/pages/api/docs.md +114 -0
  9. package/entities/pages/api/presets.ts +72 -0
  10. package/entities/posts/api/docs.md +120 -0
  11. package/entities/posts/api/presets.ts +74 -0
  12. package/entities/tasks/api/docs.md +126 -0
  13. package/entities/tasks/api/presets.ts +84 -0
  14. package/lib/selectors.ts +2 -2
  15. package/messages/de/admin.json +45 -0
  16. package/messages/en/admin.json +45 -0
  17. package/messages/es/admin.json +45 -0
  18. package/messages/fr/admin.json +45 -0
  19. package/messages/it/admin.json +45 -0
  20. package/messages/pt/admin.json +45 -0
  21. package/package.json +3 -3
  22. package/styles/globals.css +24 -0
  23. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +491 -0
  24. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +475 -0
  25. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  26. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +14 -14
  27. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +3 -3
  28. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +38 -73
  29. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +21 -42
  30. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +117 -38
  31. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +35 -12
  32. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +50 -59
  33. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +15 -23
  34. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +395 -155
  35. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +795 -174
  36. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  37. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  38. package/tests/cypress/src/core/BlockEditorBasePOM.ts +269 -99
  39. package/tests/cypress/src/core/DashboardEntityPOM.ts +1 -1
  40. package/tests/cypress/src/features/DashboardPOM.ts +49 -28
  41. package/tests/cypress/src/features/PageBuilderPOM.ts +20 -0
  42. package/tests/cypress/src/features/SettingsPOM.ts +511 -166
  43. package/tests/cypress/src/features/SuperadminPOM.ts +679 -159
  44. package/tests/cypress/src/features/index.ts +10 -10
  45. package/tests/cypress/e2e/_utils/selectors/pages-editor.bdd.md +0 -207
  46. package/tests/cypress/e2e/_utils/selectors/pages-editor.cy.ts +0 -211
  47. package/tests/cypress/e2e/_utils/selectors/posts-editor.bdd.md +0 -184
  48. 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, SEL_TASK_001, SEL_TASK_002, SEL_TASK_003, SEL_TASK_004, SEL_TASK_005, SEL_TASK_006, SEL_TASK_007]
6
- coverage: 7
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 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.
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
- ## @test SEL_TASK_001: List Page Selectors
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, table, pagination
23
- - **Grep:** `@ui-selectors` `@SEL_TASK_001`
24
- - **Status:** Active (10 passing, 0 skipped)
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 page has all required selectors
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 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
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: Pagina de lista de tasks tiene todos los selectores requeridos
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 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
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
- - `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 ✅
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 SEL_TASK_002: Filter Selectors
104
+ ## @test SEL_TASK_LIST_002: Table Structure Selectors
77
105
 
78
106
  ### Metadata
79
- - **Priority:** Medium
107
+ - **Priority:** High
80
108
  - **Type:** Selector Validation
81
- - **Tags:** tasks, filters, status, priority
82
- - **Grep:** `@ui-selectors` `@SEL_TASK_002`
83
- - **Status:** Active (3 passing, 0 skipped)
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 filter selectors
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 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
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: Lista de tasks tiene selectores de filtro
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 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
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
- - `tasks-filter-status-trigger` selector exists
111
- - `tasks-filter-priority-trigger` selector exists ✅
112
- - `tasks-filter-status-content` selector visible when opened ✅
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 SEL_TASK_003: Row Dynamic Selectors
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` `@SEL_TASK_003`
123
- - **Status:** Active (1 passing, 0 skipped)
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 extract the row ID from data-cy attribute
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: Filas de tasks tienen selectores dinamicos con ID
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 extraer el ID de fila del atributo data-cy
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
- - `tasks-row-{id}` dynamic selector works
151
- - `tasks-row-select-{id}` dynamic selector works ✅
152
- - `tasks-row-menu-{id}` dynamic selector works ✅
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 SEL_TASK_004: Create Page Selectors
200
+ ## @test SEL_TASK_LIST_004: Pagination Selectors
157
201
 
158
202
  ### Metadata
159
- - **Priority:** High
203
+ - **Priority:** Medium
160
204
  - **Type:** Selector Validation
161
- - **Tags:** tasks, create, form, fields
162
- - **Grep:** `@ui-selectors` `@SEL_TASK_004`
163
- - **Status:** Active (8 passing, 0 skipped)
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 create page has form selectors
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/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
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: Pagina de creacion de tasks tiene selectores de formulario
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/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
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
- - `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
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 SEL_TASK_005: Detail Page Selectors
251
+ ## @test SEL_TASK_LIST_005: Filter Selectors
210
252
 
211
253
  ### Metadata
212
- - **Priority:** High
254
+ - **Priority:** Medium
213
255
  - **Type:** Selector Validation
214
- - **Tags:** tasks, detail, view, actions
215
- - **Grep:** `@ui-selectors` `@SEL_TASK_005`
216
- - **Status:** Active (1 passing, 0 skipped)
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 detail page has view selectors
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 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
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: Pagina de detalle de tasks tiene selectores de vista
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 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
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
- - `tasks-view-header` selector exists
246
- - `tasks-edit-btn` selector exists ✅
247
- - `tasks-delete-btn` selector exists
248
- - `tasks-back` selector exists
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 SEL_TASK_006: Bulk Actions Selectors
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, selection
258
- - **Grep:** `@ui-selectors` `@SEL_TASK_006`
259
- - **Status:** Active (1 passing, 0 skipped)
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: Barra de acciones masivas aparece despues de seleccionar filas
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
- - `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.
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 SEL_TASK_007: Delete Dialog Selectors
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, delete, dialog, confirmation
302
- - **Grep:** `@ui-selectors` `@SEL_TASK_007`
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: Delete dialog has confirmation selectors
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 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
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: Dialogo de eliminacion tiene selectores de confirmacion
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 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
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
- - `tasks-delete-dialog` visible when delete clicked ✅
333
- - `tasks-delete-confirm` selector exists ✅
334
- - `tasks-delete-cancel` selector exists
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
- | DeleteDialog | `packages/core/src/components/entities/DeleteDialog.tsx` | dialog, confirm, cancel |
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