@nextsparkjs/theme-default 0.1.0-beta.30 → 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.
Files changed (149) hide show
  1. package/lib/selectors.ts +5 -1
  2. package/package.json +2 -2
  3. package/tests/cypress/e2e/{_devtools → _utils/devtools}/access.cy.ts +3 -3
  4. package/tests/cypress/e2e/{_devtools → _utils/devtools}/navigation.cy.ts +3 -3
  5. package/tests/cypress/e2e/{_devtools → _utils/devtools}/pages.cy.ts +3 -3
  6. package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
  7. package/tests/cypress/e2e/{_selectors → _utils/selectors}/auth.cy.ts +39 -35
  8. package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
  9. package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
  10. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
  11. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
  12. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
  13. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
  14. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +111 -0
  15. package/tests/cypress/e2e/{_selectors → _utils/selectors}/dashboard-sidebar.cy.ts +35 -6
  16. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +200 -0
  17. package/tests/cypress/e2e/{_selectors → _utils/selectors}/dashboard-topnav.cy.ts +30 -43
  18. package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
  19. package/tests/cypress/e2e/{_selectors → _utils/selectors}/devtools.cy.ts +77 -14
  20. package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
  21. package/tests/cypress/e2e/{_selectors → _utils/selectors}/global-search.cy.ts +15 -10
  22. package/tests/cypress/e2e/_utils/selectors/pages-editor.bdd.md +207 -0
  23. package/tests/cypress/e2e/{_selectors → _utils/selectors}/pages-editor.cy.ts +44 -12
  24. package/tests/cypress/e2e/_utils/selectors/posts-editor.bdd.md +184 -0
  25. package/tests/cypress/e2e/{_selectors → _utils/selectors}/posts-editor.cy.ts +107 -39
  26. package/tests/cypress/e2e/{_selectors → _utils/selectors}/public.cy.ts +1 -1
  27. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
  28. package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-api-keys.cy.ts +30 -25
  29. package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
  30. package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-billing.cy.ts +10 -7
  31. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +138 -0
  32. package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-layout.cy.ts +12 -8
  33. package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
  34. package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-password.cy.ts +10 -7
  35. package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
  36. package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-profile.cy.ts +15 -18
  37. package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
  38. package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-teams.cy.ts +36 -18
  39. package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
  40. package/tests/cypress/e2e/{_selectors → _utils/selectors}/superadmin.cy.ts +23 -15
  41. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +353 -0
  42. package/tests/cypress/e2e/{_selectors → _utils/selectors}/tasks.cy.ts +11 -10
  43. package/tests/cypress/e2e/{_selectors → _utils/selectors}/taxonomies.cy.ts +1 -1
  44. package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
  45. package/tests/cypress/e2e/{_selectors → _utils/selectors}/teams.cy.ts +90 -37
  46. package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-teams.cy.ts +4 -4
  47. package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-users.cy.ts +4 -4
  48. package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/dashboard.cy.ts +4 -4
  49. package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/subscriptions-overview.cy.ts +4 -4
  50. package/tests/cypress/e2e/api/{entities → _core/users}/users-security.cy.ts +2 -2
  51. package/tests/cypress/e2e/uat/{auth → _core/auth}/login-logout.cy.ts +2 -2
  52. package/tests/cypress/e2e/uat/{auth → _core/auth}/password-reset.cy.ts +1 -1
  53. package/tests/cypress/e2e/uat/{billing → _core/billing}/extended.cy.ts +2 -2
  54. package/tests/cypress/e2e/uat/{billing → _core/billing}/feature-gates.cy.ts +2 -2
  55. package/tests/cypress/e2e/uat/{billing → _core/billing}/page.cy.ts +2 -2
  56. package/tests/cypress/e2e/uat/{billing → _core/billing}/status.cy.ts +2 -2
  57. package/tests/cypress/e2e/uat/{billing → _core/billing}/team-switch.cy.ts +2 -2
  58. package/tests/cypress/e2e/uat/{billing → _core/billing}/usage.cy.ts +2 -2
  59. package/tests/cypress/e2e/uat/{devtools → _core/devtools}/api-tester.cy.ts +2 -2
  60. package/tests/cypress/e2e/uat/{scheduled-actions → _core/scheduled-actions}/devtools-ui.cy.ts +2 -2
  61. package/tests/cypress/e2e/uat/{teams → _core/teams}/roles-matrix.cy.ts +2 -2
  62. package/tests/cypress/e2e/uat/{teams → _core/teams}/switcher.cy.ts +2 -2
  63. package/tests/cypress/e2e/uat/{roles → features/roles}/editor-role.cy.ts +2 -2
  64. package/tests/cypress/e2e/uat/{roles → features/roles}/member-restrictions.cy.ts +3 -3
  65. package/tests/cypress/e2e/uat/{roles → features/roles}/owner-full-crud.cy.ts +2 -2
  66. package/tests/cypress/src/core/DashboardEntityPOM.ts +2 -2
  67. package/tests/cypress/src/features/DashboardPOM.ts +2 -2
  68. package/tests/cypress/src/features/DevtoolsPOM.ts +12 -1
  69. package/tests/cypress/src/session-helpers.ts +35 -17
  70. package/tests/cypress/support/e2e.ts +2 -1
  71. package/tests/cypress.config.ts +29 -10
  72. package/tests/tsconfig.json +13 -7
  73. package/tests/cypress/e2e/_selectors/billing.cy.ts +0 -89
  74. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +0 -113
  75. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +0 -89
  76. /package/tests/cypress/e2e/{_devtools → _utils/devtools}/access.bdd.md +0 -0
  77. /package/tests/cypress/e2e/{_devtools → _utils/devtools}/navigation.bdd.md +0 -0
  78. /package/tests/cypress/e2e/{_devtools → _utils/devtools}/pages.bdd.md +0 -0
  79. /package/tests/cypress/e2e/{_docs → _utils/docs}/README.md +0 -0
  80. /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/sector7-superadmin-teams.narration.json +0 -0
  81. /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/sector7-superadmin.cy.ts +0 -0
  82. /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/teams-system.doc.cy.ts +0 -0
  83. /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/teams-system.narration.json +0 -0
  84. /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-teams.bdd.md +0 -0
  85. /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-users.bdd.md +0 -0
  86. /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/dashboard.bdd.md +0 -0
  87. /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/subscriptions-overview.bdd.md +0 -0
  88. /package/tests/cypress/e2e/api/{billing → _core/billing}/BillingAPIController.js +0 -0
  89. /package/tests/cypress/e2e/api/{billing → _core/billing}/check-action.cy.ts +0 -0
  90. /package/tests/cypress/e2e/api/{billing → _core/billing}/checkout.cy.ts +0 -0
  91. /package/tests/cypress/e2e/api/{billing → _core/billing}/lifecycle.cy.ts +0 -0
  92. /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/README.md +0 -0
  93. /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/business.cy.ts +0 -0
  94. /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/downgrade.cy.ts +0 -0
  95. /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/fixtures/billing-plans.json +0 -0
  96. /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/free.cy.ts +0 -0
  97. /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/pro.cy.ts +0 -0
  98. /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/starter.cy.ts +0 -0
  99. /package/tests/cypress/e2e/api/{billing → _core/billing}/portal.cy.ts +0 -0
  100. /package/tests/cypress/e2e/api/{devtools → _core/devtools}/registries.bdd.md +0 -0
  101. /package/tests/cypress/e2e/api/{devtools → _core/devtools}/registries.cy.ts +0 -0
  102. /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/cron-endpoint.bdd.md +0 -0
  103. /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/cron-endpoint.cy.ts +0 -0
  104. /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/devtools-endpoint.bdd.md +0 -0
  105. /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/devtools-endpoint.cy.ts +0 -0
  106. /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/scheduling.bdd.md +0 -0
  107. /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/scheduling.cy.ts +0 -0
  108. /package/tests/cypress/e2e/api/{settings → _core/settings}/api-keys.crud.cy.ts +0 -0
  109. /package/tests/cypress/e2e/api/{entities → _core/users}/users-crud.cy.ts +0 -0
  110. /package/tests/cypress/e2e/api/{entities → _core/users}/users-metas.cy.ts +0 -0
  111. /package/tests/cypress/e2e/api/entities/{customers-crud.cy.ts → customers/customers-crud.cy.ts} +0 -0
  112. /package/tests/cypress/e2e/api/entities/{customers-metas.cy.ts → customers/customers-metas.cy.ts} +0 -0
  113. /package/tests/cypress/e2e/api/entities/{blocks-scope.cy.ts → pages/blocks-scope.cy.ts} +0 -0
  114. /package/tests/cypress/e2e/api/entities/{pages-crud.cy.ts → pages/pages-crud.cy.ts} +0 -0
  115. /package/tests/cypress/e2e/api/entities/{pages-status.cy.ts → pages/pages-status.cy.ts} +0 -0
  116. /package/tests/cypress/e2e/api/entities/{post-categories-crud.cy.ts → posts/post-categories-crud.cy.ts} +0 -0
  117. /package/tests/cypress/e2e/api/entities/{posts-crud.cy.ts → posts/posts-crud.cy.ts} +0 -0
  118. /package/tests/cypress/e2e/api/entities/{posts-status.cy.ts → posts/posts-status.cy.ts} +0 -0
  119. /package/tests/cypress/e2e/api/entities/{tasks-crud.cy.ts → tasks/tasks-crud.cy.ts} +0 -0
  120. /package/tests/cypress/e2e/api/entities/{tasks-metas.cy.ts → tasks/tasks-metas.cy.ts} +0 -0
  121. /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/developer-login.bdd.md +0 -0
  122. /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/developer-login.cy.ts +0 -0
  123. /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/superadmin-login.bdd.md +0 -0
  124. /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/superadmin-login.cy.ts +0 -0
  125. /package/tests/cypress/e2e/uat/{auth → _core/auth}/custom-roles/editor-login.bdd.md +0 -0
  126. /package/tests/cypress/e2e/uat/{auth → _core/auth}/custom-roles/editor-login.cy.ts +0 -0
  127. /package/tests/cypress/e2e/uat/{auth → _core/auth}/login-logout.bdd.md +0 -0
  128. /package/tests/cypress/e2e/uat/{auth → _core/auth}/password-reset.bdd.md +0 -0
  129. /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/admin-login.bdd.md +0 -0
  130. /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/admin-login.cy.ts +0 -0
  131. /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/member-login.bdd.md +0 -0
  132. /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/member-login.cy.ts +0 -0
  133. /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/owner-login.bdd.md +0 -0
  134. /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/owner-login.cy.ts +0 -0
  135. /package/tests/cypress/e2e/uat/{billing → _core/billing}/extended.bdd.md +0 -0
  136. /package/tests/cypress/e2e/uat/{billing → _core/billing}/feature-gates.bdd.md +0 -0
  137. /package/tests/cypress/e2e/uat/{billing → _core/billing}/page.bdd.md +0 -0
  138. /package/tests/cypress/e2e/uat/{billing → _core/billing}/status.bdd.md +0 -0
  139. /package/tests/cypress/e2e/uat/{billing → _core/billing}/team-switch.bdd.md +0 -0
  140. /package/tests/cypress/e2e/uat/{billing → _core/billing}/usage.bdd.md +0 -0
  141. /package/tests/cypress/e2e/uat/{blocks → _core/blocks}/hero.bdd.md +0 -0
  142. /package/tests/cypress/e2e/uat/{blocks → _core/blocks}/hero.cy.ts +0 -0
  143. /package/tests/cypress/e2e/uat/{scheduled-actions → _core/scheduled-actions}/devtools-ui.bdd.md +0 -0
  144. /package/tests/cypress/e2e/uat/{teams → _core/teams}/roles-matrix.bdd.md +0 -0
  145. /package/tests/cypress/e2e/uat/{teams → _core/teams}/switcher.bdd.md +0 -0
  146. /package/tests/cypress/e2e/uat/{teams → _core/teams}/team-switcher.md +0 -0
  147. /package/tests/cypress/e2e/uat/{roles → features/roles}/editor-role.bdd.md +0 -0
  148. /package/tests/cypress/e2e/uat/{roles → features/roles}/member-restrictions.bdd.md +0 -0
  149. /package/tests/cypress/e2e/uat/{roles → features/roles}/owner-full-crud.bdd.md +0 -0
@@ -0,0 +1,278 @@
1
+ ---
2
+ feature: Teams UI Selectors Validation
3
+ priority: high
4
+ tags: [selectors, teams, ui-validation, multi-tenant]
5
+ grepTags: [ui-selectors, teams, SEL_TEAM_001, SEL_TEAM_003, SEL_TEAM_004, SEL_TEAM_006, SEL_TEAM_007, SEL_TEAM_008, multi-team, mobile]
6
+ coverage: 6
7
+ ---
8
+
9
+ # Teams UI Selectors Validation
10
+
11
+ > Validates that teams selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Runs as Phase 12 sub-gate before functional tests.
12
+
13
+ ## @test SEL_TEAM_001: Team Switcher Selectors
14
+
15
+ ### Metadata
16
+ - **Priority:** High
17
+ - **Type:** Selector Validation
18
+ - **Tags:** teams, switcher, sidebar
19
+ - **Grep:** `@ui-selectors` `@SEL_TEAM_001`
20
+ - **Status:** Active (5 passing)
21
+
22
+ ```gherkin:en
23
+ Scenario: Team switcher has complete structure
24
+
25
+ Given I am logged in as developer
26
+ And I navigate to the dashboard
27
+ And the sidebar is expanded
28
+ Then I should find the team switcher compact trigger
29
+ When I click the team switcher trigger
30
+ Then I should find the team switcher dropdown
31
+ And I should find at least one team option
32
+ And I should find the manage teams link
33
+ ```
34
+
35
+ ```gherkin:es
36
+ Scenario: El switcher de equipos tiene estructura completa
37
+
38
+ Given estoy logueado como developer
39
+ And navego al dashboard
40
+ And el sidebar esta expandido
41
+ Then deberia encontrar el trigger del team switcher compacto
42
+ When hago click en el trigger del team switcher
43
+ Then deberia encontrar el dropdown del team switcher
44
+ And deberia encontrar al menos una opcion de equipo
45
+ And deberia encontrar el link de administrar equipos
46
+ ```
47
+
48
+ ### Expected Results
49
+ - `teams.switcher.compact` selector exists (team-switcher-compact) ✅
50
+ - `teams.switcher.dropdown` selector exists when opened (team-switcher-dropdown) ✅
51
+ - `teams.switcher.option` selector exists for team options (team-option-{slug}) ✅
52
+ - `teams.switcher.manageLink` selector exists (manage-teams-link) ✅
53
+ - Create button documentation ✅
54
+
55
+ ---
56
+
57
+ ## @test SEL_TEAM_003: Create Team Dialog Documentation
58
+
59
+ ### Metadata
60
+ - **Priority:** Low
61
+ - **Type:** Documentation
62
+ - **Tags:** teams, create, dialog
63
+ - **Grep:** `@ui-selectors` `@SEL_TEAM_003`
64
+ - **Status:** Active (documentation only)
65
+
66
+ ```gherkin:en
67
+ Scenario: Create Team Dialog selectors are documented
68
+
69
+ Given the Create Team Dialog is on the settings/teams page
70
+ Then the following selectors are tested in settings-teams.cy.ts:
71
+ | Selector | Value |
72
+ | create-team-dialog | Dialog container |
73
+ | team-name-input | Name input field |
74
+ | team-slug-input | Slug input field |
75
+ | team-description-input | Description input |
76
+ | cancel-create-team | Cancel button |
77
+ | submit-create-team | Submit button |
78
+ ```
79
+
80
+ ```gherkin:es
81
+ Scenario: Los selectores del dialogo de crear equipo estan documentados
82
+
83
+ Given el dialogo de crear equipo esta en la pagina settings/teams
84
+ Then los siguientes selectores se prueban en settings-teams.cy.ts:
85
+ | Selector | Valor |
86
+ | create-team-dialog | Contenedor del dialogo |
87
+ | team-name-input | Campo de nombre |
88
+ | team-slug-input | Campo de slug |
89
+ | team-description-input | Campo de descripcion |
90
+ | cancel-create-team | Boton cancelar |
91
+ | submit-create-team | Boton enviar |
92
+ ```
93
+
94
+ ### Notes
95
+ This test documents that Create Team Dialog selectors are tested in `settings-teams.cy.ts`, not here.
96
+
97
+ ---
98
+
99
+ ## @test SEL_TEAM_004: Dashboard Sidebar Selectors
100
+
101
+ ### Metadata
102
+ - **Priority:** High
103
+ - **Type:** Selector Validation
104
+ - **Tags:** sidebar, dashboard
105
+ - **Grep:** `@ui-selectors` `@SEL_TEAM_004`
106
+ - **Status:** Active (2 passing)
107
+
108
+ ```gherkin:en
109
+ Scenario: Dashboard sidebar has required selectors
110
+
111
+ Given I am logged in as developer
112
+ And I navigate to the dashboard
113
+ Then I should find the sidebar main container
114
+ And I should find the sidebar toggle button
115
+ ```
116
+
117
+ ```gherkin:es
118
+ Scenario: El sidebar del dashboard tiene los selectores requeridos
119
+
120
+ Given estoy logueado como developer
121
+ And navego al dashboard
122
+ Then deberia encontrar el contenedor principal del sidebar
123
+ And deberia encontrar el boton toggle del sidebar
124
+ ```
125
+
126
+ ### Expected Results
127
+ - `dashboard.sidebar.main` selector exists ✅
128
+ - `dashboard.topnav.sidebarToggle` selector exists ✅
129
+
130
+ ---
131
+
132
+ ## @test SEL_TEAM_006: Team Members Documentation
133
+
134
+ ### Metadata
135
+ - **Priority:** Low
136
+ - **Type:** Documentation
137
+ - **Tags:** teams, members, settings
138
+ - **Grep:** `@ui-selectors` `@SEL_TEAM_006`
139
+ - **Status:** Active (documentation only)
140
+
141
+ ```gherkin:en
142
+ Scenario: Team members selectors are documented
143
+
144
+ Given team members management is on the settings/teams page
145
+ Then the team members selectors are tested in settings-teams.cy.ts
146
+ And the path is /dashboard/settings/teams
147
+ ```
148
+
149
+ ```gherkin:es
150
+ Scenario: Los selectores de miembros del equipo estan documentados
151
+
152
+ Given la gestion de miembros del equipo esta en la pagina settings/teams
153
+ Then los selectores de miembros del equipo se prueban en settings-teams.cy.ts
154
+ And la ruta es /dashboard/settings/teams
155
+ ```
156
+
157
+ ### Notes
158
+ This test documents that Team Members selectors are tested in `settings-teams.cy.ts`, not here.
159
+
160
+ ---
161
+
162
+ ## @test SEL_TEAM_007: Multi-Team Switch Modal
163
+
164
+ ### Metadata
165
+ - **Priority:** High
166
+ - **Type:** Selector Validation
167
+ - **Tags:** teams, modal, switch, multi-team
168
+ - **Grep:** `@ui-selectors` `@SEL_TEAM_007` `@multi-team`
169
+ - **Status:** Active (2 passing)
170
+ - **User:** Carlos Mendoza (loginAsDefaultOwner) - has multiple teams
171
+
172
+ ```gherkin:en
173
+ Scenario: Team switch modal appears during team change
174
+
175
+ Given I am logged in as Carlos Mendoza (owner with multiple teams)
176
+ And I navigate to the dashboard
177
+ And the sidebar is expanded
178
+ When I open the team switcher dropdown
179
+ Then I should find at least 2 team options
180
+ When I click on a different team
181
+ Then I should find the team switch modal
182
+ ```
183
+
184
+ ```gherkin:es
185
+ Scenario: El modal de cambio de equipo aparece durante el cambio
186
+
187
+ Given estoy logueado como Carlos Mendoza (owner con multiples equipos)
188
+ And navego al dashboard
189
+ And el sidebar esta expandido
190
+ When abro el dropdown del team switcher
191
+ Then deberia encontrar al menos 2 opciones de equipo
192
+ When hago click en un equipo diferente
193
+ Then deberia encontrar el modal de cambio de equipo
194
+ ```
195
+
196
+ ### Expected Results
197
+ - Multiple team options exist (at least 2) ✅
198
+ - `teams.switchModal.container` selector exists during switch (team-switch-modal) ✅
199
+
200
+ ### Notes
201
+ This test uses `loginAsDefaultOwner()` which logs in as Carlos Mendoza, a user with multiple teams:
202
+ - Carlos Personal (personal team)
203
+ - Everpoint Labs (owner)
204
+ - Other teams where he has membership
205
+
206
+ ---
207
+
208
+ ## @test SEL_TEAM_008: Mobile Team Switcher
209
+
210
+ ### Metadata
211
+ - **Priority:** Medium
212
+ - **Type:** Selector Validation
213
+ - **Tags:** teams, mobile, responsive
214
+ - **Grep:** `@ui-selectors` `@SEL_TEAM_008` `@mobile`
215
+ - **Status:** Active (3 passing)
216
+ - **Viewport:** iphone-x (375x812)
217
+
218
+ ```gherkin:en
219
+ Scenario: Mobile team switcher has required selectors
220
+
221
+ Given I set the viewport to iphone-x
222
+ And I am logged in as developer
223
+ And I navigate to the dashboard
224
+ Then I should find the mobile more button
225
+ When I tap the more button
226
+ Then I should find the mobile more sheet
227
+ And I should find the mobile team switcher inside the sheet
228
+ ```
229
+
230
+ ```gherkin:es
231
+ Scenario: El team switcher movil tiene los selectores requeridos
232
+
233
+ Given configuro el viewport a iphone-x
234
+ And estoy logueado como developer
235
+ And navego al dashboard
236
+ Then deberia encontrar el boton more movil
237
+ When toco el boton more
238
+ Then deberia encontrar el sheet more movil
239
+ And deberia encontrar el team switcher movil dentro del sheet
240
+ ```
241
+
242
+ ### Expected Results
243
+ - `dashboard.mobile.bottomNav.item` with id `more` exists ✅
244
+ - `dashboard.mobile.moreSheet.content` exists when opened ✅
245
+ - `dashboard.mobile.moreSheet.teamSwitcher` exists in sheet ✅
246
+
247
+ ### Notes
248
+ This test uses `cy.viewport('iphone-x')` before login to ensure the mobile layout is rendered.
249
+
250
+ ---
251
+
252
+ ## Related Components
253
+
254
+ | Component | File | Selectors |
255
+ |-----------|------|-----------|
256
+ | TeamSwitcherCompact | `packages/core/src/components/teams/TeamSwitcherCompact.tsx` | team-switcher-compact, team-switcher-dropdown, team-option-{slug}, manage-teams-link |
257
+ | TeamSwitchModal | `packages/core/src/components/teams/TeamSwitchModal.tsx` | team-switch-modal |
258
+ | Sidebar | `packages/core/src/components/dashboard/layouts/Sidebar.tsx` | sidebar-main |
259
+ | TopNavbar | `packages/core/src/components/dashboard/layouts/TopNavbar.tsx` | topnav-sidebar-toggle |
260
+ | MobileMoreSheet | `packages/core/src/components/dashboard/mobile/MobileMoreSheet.tsx` | mobile-more-sheet, mobile-more-sheet-team-switcher |
261
+
262
+ ## Related POMs
263
+
264
+ | POM | File | Usage |
265
+ |-----|------|-------|
266
+ | TeamSwitcherPOM | `themes/default/tests/cypress/src/components/TeamSwitcherPOM.ts` | Team switcher interactions and selectors |
267
+
268
+ ## Test Summary
269
+
270
+ | Test ID | Description | Status | Tests |
271
+ |---------|-------------|--------|-------|
272
+ | SEL_TEAM_001 | Team Switcher Selectors | Active | 5 |
273
+ | SEL_TEAM_003 | Create Team Dialog Documentation | Active | 1 |
274
+ | SEL_TEAM_004 | Dashboard Sidebar Selectors | Active | 2 |
275
+ | SEL_TEAM_006 | Team Members Documentation | Active | 1 |
276
+ | SEL_TEAM_007 | Multi-Team Switch Modal | Active | 2 |
277
+ | SEL_TEAM_008 | Mobile Team Switcher | Active | 3 |
278
+ | **Total** | | **All Active** | **14** |
@@ -14,26 +14,34 @@
14
14
  * - Assert elements exist in DOM (no form submissions)
15
15
  * - Fast execution (< 30 seconds per describe block)
16
16
  *
17
+ * Test IDs:
18
+ * - SEL_TEAM_001: Team Switcher Selectors
19
+ * - SEL_TEAM_003: Create Team Dialog Documentation
20
+ * - SEL_TEAM_004: Dashboard Sidebar Selectors
21
+ * - SEL_TEAM_006: Team Members Documentation
22
+ * - SEL_TEAM_007: Multi-Team Switch Modal (Carlos Mendoza - multiple teams)
23
+ * - SEL_TEAM_008: Mobile Team Switcher (iphone-x viewport)
24
+ *
17
25
  * NOTE: Some selectors require specific states (dialog open, team selected).
18
26
  * Many selectors from CORE_SELECTORS are dynamically scoped.
19
27
  */
20
28
 
21
- import { TeamSwitcherPOM } from '../../src/components/TeamSwitcherPOM'
22
- import { loginAsDefaultOwner } from '../../src/session-helpers'
29
+ import { TeamSwitcherPOM } from '../../../src/components/TeamSwitcherPOM'
30
+ import { loginAsDefaultDeveloper, loginAsDefaultOwner } from '../../../src/session-helpers'
23
31
 
24
- describe('Teams Selectors Validation', { tags: ['@ui-selectors'] }, () => {
32
+ describe('Teams Selectors Validation', { tags: ['@ui-selectors', '@teams'] }, () => {
25
33
  const teamSwitcher = TeamSwitcherPOM.create()
26
34
 
27
35
  beforeEach(() => {
28
- loginAsDefaultOwner()
36
+ loginAsDefaultDeveloper()
29
37
  cy.visit('/dashboard', { timeout: 60000, failOnStatusCode: false })
30
38
  cy.url().should('include', '/dashboard')
31
39
  })
32
40
 
33
41
  // ============================================
34
- // TEAM SWITCHER SELECTORS (6 selectors)
42
+ // SEL_TEAM_001: TEAM SWITCHER SELECTORS
35
43
  // ============================================
36
- describe('Team Switcher Selectors', () => {
44
+ describe('SEL_TEAM_001: Team Switcher Selectors', { tags: '@SEL_TEAM_001' }, () => {
37
45
  beforeEach(() => {
38
46
  teamSwitcher.ensureSidebarExpanded()
39
47
  })
@@ -68,22 +76,11 @@ describe('Teams Selectors Validation', { tags: ['@ui-selectors'] }, () => {
68
76
  })
69
77
 
70
78
  // ============================================
71
- // TEAM SWITCH MODAL SELECTORS (1 selector)
72
- // ============================================
73
- describe('Team Switch Modal Selectors', () => {
74
- // Note: Switch modal only appears when switching to a different team
75
- // This test validates the selector exists by attempting a switch
76
- it.skip('should find switch modal during team change (requires multiple teams)', () => {
77
- cy.get(teamSwitcher.selectors.switchModal).should('exist')
78
- })
79
- })
80
-
81
- // ============================================
82
- // CREATE TEAM DIALOG SELECTORS (7 selectors)
79
+ // SEL_TEAM_003: CREATE TEAM DIALOG DOCUMENTATION
83
80
  // NOTE: Create Team Dialog is opened from settings/teams page
84
81
  // Those selectors are tested in settings-teams.cy.ts
85
82
  // ============================================
86
- describe('Create Team Dialog Selectors', () => {
83
+ describe('SEL_TEAM_003: Create Team Dialog Documentation', { tags: '@SEL_TEAM_003' }, () => {
87
84
  it('should document that Create Team Dialog is in settings', () => {
88
85
  cy.log('Create Team Dialog selectors:')
89
86
  cy.log('- create-team-dialog')
@@ -98,9 +95,9 @@ describe('Teams Selectors Validation', { tags: ['@ui-selectors'] }, () => {
98
95
  })
99
96
 
100
97
  // ============================================
101
- // SIDEBAR SELECTORS (2 selectors)
98
+ // SEL_TEAM_004: DASHBOARD SIDEBAR SELECTORS
102
99
  // ============================================
103
- describe('Dashboard Sidebar Selectors', () => {
100
+ describe('SEL_TEAM_004: Dashboard Sidebar Selectors', { tags: '@SEL_TEAM_004' }, () => {
104
101
  it('should find sidebar main container', () => {
105
102
  cy.get(teamSwitcher.selectors.sidebar).should('exist')
106
103
  })
@@ -111,32 +108,88 @@ describe('Teams Selectors Validation', { tags: ['@ui-selectors'] }, () => {
111
108
  })
112
109
 
113
110
  // ============================================
114
- // MOBILE SELECTORS (3 selectors) - SKIP for desktop
111
+ // SEL_TEAM_006: TEAM MEMBERS DOCUMENTATION
112
+ // These are tested in settings-teams.cy.ts
115
113
  // ============================================
116
- describe('Mobile Team Switcher Selectors', () => {
117
- // Note: Mobile selectors only visible on small viewports
118
- it.skip('should find mobile more button (mobile viewport only)', () => {
119
- cy.get(teamSwitcher.selectors.mobileMoreButton).should('exist')
114
+ describe('SEL_TEAM_006: Team Members Documentation', { tags: '@SEL_TEAM_006' }, () => {
115
+ it('should document team members are in settings', () => {
116
+ cy.log('Team members selectors are tested in settings-teams.cy.ts')
117
+ cy.log('Path: /dashboard/settings/teams')
118
+ cy.wrap(true).should('be.true')
120
119
  })
120
+ })
121
+ })
122
+
123
+ // ============================================
124
+ // MULTI-TEAM USER TESTS (Carlos Mendoza - Owner)
125
+ // Uses a separate session with multiple teams
126
+ // ============================================
127
+ describe('Teams Selectors - Multi-Team User', { tags: ['@ui-selectors', '@teams', '@multi-team'] }, () => {
128
+ const teamSwitcher = TeamSwitcherPOM.create()
121
129
 
122
- it.skip('should find mobile more sheet (mobile viewport only)', () => {
123
- cy.get(teamSwitcher.selectors.mobileMoreSheet).should('exist')
130
+ beforeEach(() => {
131
+ loginAsDefaultOwner()
132
+ cy.visit('/dashboard', { timeout: 60000, failOnStatusCode: false })
133
+ cy.url().should('include', '/dashboard')
134
+ })
135
+
136
+ // ============================================
137
+ // SEL_TEAM_007: TEAM SWITCH MODAL (Multi-Team)
138
+ // Carlos Mendoza has multiple teams to test switching
139
+ // ============================================
140
+ describe('SEL_TEAM_007: Team Switch Modal', { tags: '@SEL_TEAM_007' }, () => {
141
+ beforeEach(() => {
142
+ teamSwitcher.ensureSidebarExpanded()
124
143
  })
125
144
 
126
- it.skip('should find mobile team switcher (mobile viewport only)', () => {
127
- cy.get(teamSwitcher.selectors.mobileTeamSwitcher).should('exist')
145
+ it('should find multiple team options in dropdown', () => {
146
+ teamSwitcher.open()
147
+ cy.get(teamSwitcher.selectors.teamOption).should('have.length.at.least', 2)
148
+ })
149
+
150
+ it('should find switch modal when changing teams', () => {
151
+ teamSwitcher.open()
152
+ // Get the second team option (different from current)
153
+ cy.get(teamSwitcher.selectors.teamOption).eq(1).click()
154
+ // Switch modal should appear during team change
155
+ cy.get(teamSwitcher.selectors.switchModal, { timeout: 10000 }).should('exist')
128
156
  })
129
157
  })
158
+ })
159
+
160
+ // ============================================
161
+ // MOBILE VIEWPORT TESTS
162
+ // Uses mobile viewport to test responsive selectors
163
+ // ============================================
164
+ describe('Teams Selectors - Mobile Viewport', { tags: ['@ui-selectors', '@teams', '@mobile'] }, () => {
165
+ const teamSwitcher = TeamSwitcherPOM.create()
166
+
167
+ beforeEach(() => {
168
+ // Set mobile viewport BEFORE login/visit
169
+ cy.viewport('iphone-x')
170
+ loginAsDefaultDeveloper()
171
+ cy.visit('/dashboard', { timeout: 60000, failOnStatusCode: false })
172
+ cy.url().should('include', '/dashboard')
173
+ })
130
174
 
131
175
  // ============================================
132
- // TEAM MEMBERS SELECTORS (Section at settings)
133
- // These are tested in settings-teams.cy.ts
176
+ // SEL_TEAM_008: MOBILE TEAM SWITCHER SELECTORS
177
+ // Tests mobile-specific UI elements
134
178
  // ============================================
135
- describe('Team Members Selectors', () => {
136
- it('should document team members are in settings', () => {
137
- cy.log('Team members selectors are tested in settings-teams.cy.ts')
138
- cy.log('Path: /dashboard/settings/teams')
139
- cy.wrap(true).should('be.true')
179
+ describe('SEL_TEAM_008: Mobile Team Switcher', { tags: '@SEL_TEAM_008' }, () => {
180
+ it('should find mobile more button', () => {
181
+ cy.get(teamSwitcher.selectors.mobileMoreButton).should('exist')
182
+ })
183
+
184
+ it('should find mobile more sheet when opened', () => {
185
+ cy.get(teamSwitcher.selectors.mobileMoreButton).click()
186
+ cy.get(teamSwitcher.selectors.mobileMoreSheet).should('be.visible')
187
+ })
188
+
189
+ it('should find mobile team switcher in sheet', () => {
190
+ cy.get(teamSwitcher.selectors.mobileMoreButton).click()
191
+ cy.get(teamSwitcher.selectors.mobileMoreSheet).should('be.visible')
192
+ cy.get(teamSwitcher.selectors.mobileTeamSwitcher).should('exist')
140
193
  })
141
194
  })
142
195
  })
@@ -9,16 +9,16 @@
9
9
  * - Team filtering and search
10
10
  * - Cross-team navigation
11
11
  *
12
- * Tags: @uat, @feat-superadmin, @superadmin, @teams
12
+ * Tags: @uat, @area-superadmin, @teams
13
13
  */
14
14
 
15
15
  import * as allure from 'allure-cypress'
16
16
 
17
- import { loginAsDefaultSuperadmin } from '../../src/session-helpers'
18
- import { SuperadminPOM } from '../../src/features/SuperadminPOM'
17
+ import { loginAsDefaultSuperadmin } from '../../../src/session-helpers'
18
+ import { SuperadminPOM } from '../../../src/features/SuperadminPOM'
19
19
 
20
20
  describe('Sector7 - All Teams Management', {
21
- tags: ['@uat', '@feat-superadmin', '@superadmin', '@teams']
21
+ tags: ['@uat', '@area-superadmin', '@teams']
22
22
  }, () => {
23
23
  const superadmin = SuperadminPOM.create()
24
24
 
@@ -9,16 +9,16 @@
9
9
  * - User search and filtering
10
10
  * - User status and role display
11
11
  *
12
- * Tags: @uat, @feat-superadmin, @superadmin, @users
12
+ * Tags: @uat, @area-superadmin, @users
13
13
  */
14
14
 
15
15
  import * as allure from 'allure-cypress'
16
16
 
17
- import { loginAsDefaultSuperadmin } from '../../src/session-helpers'
18
- import { SuperadminPOM } from '../../src/features/SuperadminPOM'
17
+ import { loginAsDefaultSuperadmin } from '../../../src/session-helpers'
18
+ import { SuperadminPOM } from '../../../src/features/SuperadminPOM'
19
19
 
20
20
  describe('Sector7 - All Users Management', {
21
- tags: ['@uat', '@feat-superadmin', '@superadmin', '@users']
21
+ tags: ['@uat', '@area-superadmin', '@users']
22
22
  }, () => {
23
23
  const superadmin = SuperadminPOM.create()
24
24
 
@@ -9,16 +9,16 @@
9
9
  * - Quick stats display
10
10
  * - Recent activity
11
11
  *
12
- * Tags: @uat, @feat-superadmin, @superadmin, @dashboard
12
+ * Tags: @uat, @area-superadmin, @dashboard
13
13
  */
14
14
 
15
15
  import * as allure from 'allure-cypress'
16
16
 
17
- import { loginAsDefaultSuperadmin } from '../../src/session-helpers'
18
- import { SuperadminPOM } from '../../src/features/SuperadminPOM'
17
+ import { loginAsDefaultSuperadmin } from '../../../src/session-helpers'
18
+ import { SuperadminPOM } from '../../../src/features/SuperadminPOM'
19
19
 
20
20
  describe('Admin - Superadmin Dashboard', {
21
- tags: ['@uat', '@feat-superadmin', '@superadmin', '@dashboard']
21
+ tags: ['@uat', '@area-superadmin', '@dashboard']
22
22
  }, () => {
23
23
  const superadmin = SuperadminPOM.create()
24
24
 
@@ -11,16 +11,16 @@
11
11
  *
12
12
  * Note: The route is /superadmin/subscriptions (not /billing)
13
13
  *
14
- * Tags: @uat, @feat-superadmin, @superadmin, @subscriptions
14
+ * Tags: @uat, @area-superadmin, @subscriptions
15
15
  */
16
16
 
17
17
  import * as allure from 'allure-cypress'
18
18
 
19
- import { loginAsDefaultSuperadmin } from '../../src/session-helpers'
20
- import { SuperadminPOM } from '../../src/features/SuperadminPOM'
19
+ import { loginAsDefaultSuperadmin } from '../../../src/session-helpers'
20
+ import { SuperadminPOM } from '../../../src/features/SuperadminPOM'
21
21
 
22
22
  describe('Superadmin - Subscriptions Overview', {
23
- tags: ['@uat', '@feat-superadmin', '@superadmin', '@subscriptions']
23
+ tags: ['@uat', '@area-superadmin', '@subscriptions']
24
24
  }, () => {
25
25
  const superadmin = SuperadminPOM.create()
26
26
 
@@ -14,8 +14,8 @@
14
14
 
15
15
  import * as allure from 'allure-cypress'
16
16
 
17
- import { DevKeyringPOM as DevKeyring } from '../../../src/components/DevKeyringPOM'
18
- import { getThemeUsers } from '../../../src/session-helpers'
17
+ import { DevKeyringPOM as DevKeyring } from '../../../../src/components/DevKeyringPOM'
18
+ import { getThemeUsers } from '../../../../src/session-helpers'
19
19
 
20
20
  describe('Users API - Security & Access Control', {
21
21
  tags: ['@api', '@feat-users', '@security', '@regression']
@@ -2,8 +2,8 @@
2
2
 
3
3
  import * as allure from 'allure-cypress'
4
4
 
5
- import { DevKeyringPOM } from '../../../src/components/DevKeyringPOM'
6
- import { DEFAULT_THEME_USERS } from '../../../src/session-helpers'
5
+ import { DevKeyringPOM } from '../../../../src/components/DevKeyringPOM'
6
+ import { DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
7
7
 
8
8
  describe('Authentication - DevKeyring Flow', {
9
9
  tags: ['@uat', '@feat-auth', '@smoke', '@regression']
@@ -18,7 +18,7 @@
18
18
 
19
19
  import * as allure from 'allure-cypress'
20
20
 
21
- import { AuthPOM } from '../../../src/core/AuthPOM'
21
+ import { AuthPOM } from '../../../../src/core/AuthPOM'
22
22
 
23
23
  describe('Authentication - Password Reset Flow', {
24
24
  tags: ['@uat', '@feat-auth', '@password-reset']
@@ -1,8 +1,8 @@
1
1
  /// <reference types="cypress" />
2
2
 
3
3
  import * as allure from 'allure-cypress'
4
- import { BillingPOM } from '../../../src/features/BillingPOM'
5
- import { loginAsDefaultOwner } from '../../../src/session-helpers'
4
+ import { BillingPOM } from '../../../../src/features/BillingPOM'
5
+ import { loginAsDefaultOwner } from '../../../../src/session-helpers'
6
6
 
7
7
  /**
8
8
  * Billing Extended UAT Tests
@@ -1,12 +1,12 @@
1
1
  /// <reference types="cypress" />
2
2
 
3
3
  import * as allure from 'allure-cypress'
4
- import { BillingPOM } from '../../../src/features/BillingPOM'
4
+ import { BillingPOM } from '../../../../src/features/BillingPOM'
5
5
  import {
6
6
  loginAsFreePlanUser,
7
7
  loginAsProPlanUser,
8
8
  loginAsEnterprisePlanUser,
9
- } from '../../../src/session-helpers'
9
+ } from '../../../../src/session-helpers'
10
10
 
11
11
  /**
12
12
  * Feature Gates UAT Tests
@@ -1,13 +1,13 @@
1
1
  /// <reference types="cypress" />
2
2
 
3
3
  import * as allure from 'allure-cypress'
4
- import { BillingPOM } from '../../../src/features/BillingPOM'
4
+ import { BillingPOM } from '../../../../src/features/BillingPOM'
5
5
  import {
6
6
  loginAsFreePlanUser,
7
7
  loginAsProPlanUser,
8
8
  loginAsEnterprisePlanUser,
9
9
  BILLING_TEAMS
10
- } from '../../../src/session-helpers'
10
+ } from '../../../../src/session-helpers'
11
11
 
12
12
  /**
13
13
  * Billing Page UAT Tests
@@ -1,12 +1,12 @@
1
1
  /// <reference types="cypress" />
2
2
 
3
3
  import * as allure from 'allure-cypress'
4
- import { BillingPOM } from '../../../src/features/BillingPOM'
4
+ import { BillingPOM } from '../../../../src/features/BillingPOM'
5
5
  import {
6
6
  loginAsFreePlanUser,
7
7
  loginAsProPlanUser,
8
8
  loginAsEnterprisePlanUser
9
- } from '../../../src/session-helpers'
9
+ } from '../../../../src/session-helpers'
10
10
 
11
11
  /**
12
12
  * Billing Subscription Status UAT Tests
@@ -1,12 +1,12 @@
1
1
  /// <reference types="cypress" />
2
2
 
3
3
  import * as allure from 'allure-cypress'
4
- import { BillingPOM } from '../../../src/features/BillingPOM'
4
+ import { BillingPOM } from '../../../../src/features/BillingPOM'
5
5
  import {
6
6
  loginAsFreePlanUser,
7
7
  loginAsProPlanUser,
8
8
  BILLING_TEAMS
9
- } from '../../../src/session-helpers'
9
+ } from '../../../../src/session-helpers'
10
10
 
11
11
  /**
12
12
  * Billing Team Switch UAT Tests