@nextsparkjs/theme-default 0.1.0-beta.31 → 0.1.0-beta.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -14,33 +14,31 @@
14
14
  * - Assert elements exist in DOM (no form submissions)
15
15
  * - Fast execution (< 30 seconds per describe block)
16
16
  *
17
- * NOTE: Some selectors from CORE_SELECTORS are NOT implemented in the component:
18
- * - settings-profile (component uses profile-main)
19
- * - profile-avatar, profile-avatar-upload (not in current implementation)
20
- * - profile-first-name, profile-last-name, profile-email (native inputs, no data-cy)
21
- * These are documented for future implementation.
17
+ * Test IDs:
18
+ * - SEL_PROF_001: Profile Page Selectors
19
+ *
20
+ * NOTE: Only 2 selectors are NOT implemented (feature doesn't exist):
21
+ * - profile-avatar, profile-avatar-upload (avatar feature not in current implementation)
22
22
  */
23
23
 
24
- import { SettingsPOM } from '../../src/features/SettingsPOM'
25
- import { loginAsDefaultOwner } from '../../src/session-helpers'
24
+ import { SettingsPOM } from '../../../src/features/SettingsPOM'
25
+ import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
26
26
 
27
- describe('Settings Profile Selectors Validation', { tags: ['@ui-selectors'] }, () => {
27
+ describe('Settings Profile Selectors Validation', { tags: ['@ui-selectors', '@settings'] }, () => {
28
28
  const settings = SettingsPOM.create()
29
29
 
30
30
  beforeEach(() => {
31
- loginAsDefaultOwner()
31
+ loginAsDefaultDeveloper()
32
32
  settings.visitProfile()
33
33
  // Wait for profile page to load - use profile form as indicator
34
34
  cy.get(settings.selectors.profileForm, { timeout: 15000 }).should('be.visible')
35
35
  })
36
36
 
37
37
  // ============================================
38
- // PROFILE SELECTORS (9 selectors in CORE_SELECTORS)
39
- // Currently only 3 are implemented in component
38
+ // SEL_PROF_001: PROFILE PAGE SELECTORS
40
39
  // ============================================
41
- describe('Profile Page Selectors', () => {
42
- // NOTE: CORE_SELECTORS defines 'settings-profile' but component uses 'profile-main'
43
- it.skip('should find profile container (selector mismatch: CORE uses settings-profile, component uses profile-main)', () => {
40
+ describe('SEL_PROF_001: Profile Page Selectors', { tags: '@SEL_PROF_001' }, () => {
41
+ it('should find profile container', () => {
44
42
  cy.get(settings.selectors.profileContainer).should('exist')
45
43
  })
46
44
 
@@ -57,16 +55,15 @@ describe('Settings Profile Selectors Validation', { tags: ['@ui-selectors'] }, (
57
55
  cy.get(settings.selectors.profileAvatarUpload).should('exist')
58
56
  })
59
57
 
60
- // NOTE: Native inputs don't have data-cy selectors
61
- it.skip('should find first name input (native input, no data-cy)', () => {
58
+ it('should find first name input', () => {
62
59
  cy.get(settings.selectors.profileFirstName).should('exist')
63
60
  })
64
61
 
65
- it.skip('should find last name input (native input, no data-cy)', () => {
62
+ it('should find last name input', () => {
66
63
  cy.get(settings.selectors.profileLastName).should('exist')
67
64
  })
68
65
 
69
- it.skip('should find email input (native input, no data-cy)', () => {
66
+ it('should find email input', () => {
70
67
  cy.get(settings.selectors.profileEmail).should('exist')
71
68
  })
72
69
 
@@ -0,0 +1,130 @@
1
+ ---
2
+ feature: Settings Teams UI Selectors Validation
3
+ priority: high
4
+ tags: [selectors, settings, teams, ui-validation]
5
+ grepTags: [ui-selectors, settings, SEL_STMS_001, SEL_STMS_002]
6
+ coverage: 2
7
+ ---
8
+
9
+ # Settings Teams UI Selectors Validation
10
+
11
+ > Validates that settings 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_STMS_001: Teams Page Selectors
14
+
15
+ ### Metadata
16
+ - **Priority:** High
17
+ - **Type:** Selector Validation
18
+ - **Tags:** settings, teams, management
19
+ - **Grep:** `@ui-selectors` `@SEL_STMS_001`
20
+ - **Status:** Active (6 passing, 0 skipped)
21
+
22
+ ```gherkin:en
23
+ Scenario: Teams settings page has required selectors
24
+
25
+ Given I am logged in as developer
26
+ And I navigate to the teams settings page
27
+ Then I should find the teams main container
28
+ And I should find the teams header
29
+ And I should find the teams list
30
+ And I should find at least one team item in the list
31
+ And I should find the create team button
32
+ When I click on a team item
33
+ Then I should find the team details section
34
+ ```
35
+
36
+ ```gherkin:es
37
+ Scenario: La pagina de settings de teams tiene los selectores requeridos
38
+
39
+ Given estoy logueado como developer
40
+ And navego a la pagina de settings de teams
41
+ Then deberia encontrar el contenedor principal de teams
42
+ And deberia encontrar el header de teams
43
+ And deberia encontrar la lista de teams
44
+ And deberia encontrar al menos un item de equipo en la lista
45
+ And deberia encontrar el boton de crear equipo
46
+ When hago click en un item de equipo
47
+ Then deberia encontrar la seccion de detalles del equipo
48
+ ```
49
+
50
+ ### Expected Results
51
+ - `teams-settings-main` selector exists ✅
52
+ - `teams-settings-header` selector exists ✅
53
+ - `teams-settings-teams-list` selector exists ✅
54
+ - `team-item-{id}` selector exists for team items ✅
55
+ - `teams-settings-team-details` selector exists when team selected ✅
56
+ - `create-team-button` selector exists ✅
57
+
58
+ ---
59
+
60
+ ## @test SEL_STMS_002: Create Team Dialog Documentation
61
+
62
+ ### Metadata
63
+ - **Priority:** Medium
64
+ - **Type:** Documentation
65
+ - **Tags:** settings, teams, dialog
66
+ - **Grep:** `@ui-selectors` `@SEL_STMS_002`
67
+ - **Status:** Active (1 passing, 0 skipped)
68
+
69
+ ```gherkin:en
70
+ Scenario: Create Team Dialog selectors are documented
71
+
72
+ Given the Create Team Dialog can be opened from teams settings
73
+ Then the following selectors are documented:
74
+ | Selector | Value |
75
+ | create-team-dialog | Dialog container |
76
+ | team-name-input | Name input field |
77
+ | team-slug-input | Slug input field |
78
+ | team-description-input | Description input |
79
+ | cancel-create-team | Cancel button |
80
+ | submit-create-team | Submit button |
81
+ ```
82
+
83
+ ```gherkin:es
84
+ Scenario: Los selectores del dialogo de crear equipo estan documentados
85
+
86
+ Given el dialogo de crear equipo puede abrirse desde settings de teams
87
+ Then los siguientes selectores estan documentados:
88
+ | Selector | Valor |
89
+ | create-team-dialog | Contenedor del dialogo |
90
+ | team-name-input | Campo de nombre |
91
+ | team-slug-input | Campo de slug |
92
+ | team-description-input | Campo de descripcion |
93
+ | cancel-create-team | Boton cancelar |
94
+ | submit-create-team | Boton enviar |
95
+ ```
96
+
97
+ ### Expected Results
98
+ - Create Team Dialog selectors are documented for reference ✅
99
+ - Actual dialog testing done in teams.cy.ts (SEL_TEAM_003)
100
+
101
+ ### Notes
102
+ The Create Team Dialog selectors are shared between:
103
+ - Teams settings page (`/dashboard/settings/teams`)
104
+ - Team switcher create button
105
+
106
+ This test documents the selectors for cross-reference with teams.cy.ts.
107
+
108
+ ---
109
+
110
+ ## Related Components
111
+
112
+ | Component | File | Selectors |
113
+ |-----------|------|-----------|
114
+ | TeamsSettings | `packages/core/templates/app/dashboard/settings/teams/page.tsx` | teams-settings-main, teams-settings-header, teams-settings-teams-list, teams-settings-team-details, team-item-{id} |
115
+ | CreateTeamDialog | `packages/core/src/components/teams/CreateTeamDialog.tsx` | create-team-dialog, cancel-create-team, submit-create-team |
116
+
117
+ ## Related POMs
118
+
119
+ | POM | File | Usage |
120
+ |-----|------|-------|
121
+ | SettingsPOM | `themes/default/tests/cypress/src/features/SettingsPOM.ts` | Teams settings page selectors |
122
+ | TeamSwitcherPOM | `themes/default/tests/cypress/src/components/TeamSwitcherPOM.ts` | Create team dialog selectors |
123
+
124
+ ## Test Summary
125
+
126
+ | Test ID | Description | Status | Tests |
127
+ |---------|-------------|--------|-------|
128
+ | SEL_STMS_001 | Teams Page Selectors | Active | 6 |
129
+ | SEL_STMS_002 | Create Team Dialog Documentation | Active | 1 |
130
+ | **Total** | | **All Active** | **7** |
@@ -13,25 +13,29 @@
13
13
  * - Navigate to teams settings page (requires login)
14
14
  * - Assert elements exist in DOM (no form submissions)
15
15
  * - Fast execution (< 30 seconds per describe block)
16
+ *
17
+ * Test IDs:
18
+ * - SEL_STMS_001: Teams Page Selectors
19
+ * - SEL_STMS_002: Create Team Dialog (documentation only)
16
20
  */
17
21
 
18
- import { SettingsPOM } from '../../src/features/SettingsPOM'
19
- import { loginAsDefaultOwner } from '../../src/session-helpers'
22
+ import { SettingsPOM } from '../../../src/features/SettingsPOM'
23
+ import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
20
24
 
21
- describe('Settings Teams Selectors Validation', { tags: ['@ui-selectors'] }, () => {
25
+ describe('Settings Teams Selectors Validation', { tags: ['@ui-selectors', '@settings'] }, () => {
22
26
  const settings = SettingsPOM.create()
23
27
 
24
28
  beforeEach(() => {
25
- loginAsDefaultOwner()
29
+ loginAsDefaultDeveloper()
26
30
  cy.visit('/dashboard/settings/teams', { timeout: 60000 })
27
31
  // Wait for teams page to load - either main or loading should appear
28
32
  cy.get('[data-cy="teams-settings-main"], [data-cy="teams-settings-loading"]', { timeout: 15000 }).should('exist')
29
33
  })
30
34
 
31
35
  // ============================================
32
- // TEAMS SETTINGS SELECTORS (6 selectors in CORE_SELECTORS)
36
+ // SEL_STMS_001: TEAMS PAGE SELECTORS
33
37
  // ============================================
34
- describe('Teams Page Selectors', () => {
38
+ describe('SEL_STMS_001: Teams Page Selectors', { tags: '@SEL_STMS_001' }, () => {
35
39
  it('should find teams main container', () => {
36
40
  // Wait for loading to finish
37
41
  cy.get('[data-cy="teams-settings-main"]', { timeout: 15000 }).should('exist')
@@ -41,22 +45,18 @@ describe('Settings Teams Selectors Validation', { tags: ['@ui-selectors'] }, ()
41
45
  cy.get('[data-cy="teams-settings-header"]', { timeout: 15000 }).should('exist')
42
46
  })
43
47
 
44
- // Note: Loading skeleton appears briefly during initial load
45
- it.skip('should find loading skeleton (only visible during loading)', () => {
46
- cy.get('[data-cy="teams-settings-loading"]').should('exist')
47
- })
48
-
49
- // Note: Single user message only appears for users not in any team
50
- it.skip('should find single user message (only for users without teams)', () => {
51
- cy.get('[data-cy="teams-settings-single-user"]').should('exist')
52
- })
53
-
54
48
  it('should find teams list', () => {
55
49
  cy.get('[data-cy="teams-settings-teams-list"]', { timeout: 15000 }).should('exist')
56
50
  })
57
51
 
58
- // Note: Team details only appears when a team is selected
59
- it.skip('should find team details section (only when team is selected)', () => {
52
+ it('should find team item in list', () => {
53
+ cy.get('[data-cy^="team-item-"]', { timeout: 15000 }).should('have.length.at.least', 1)
54
+ })
55
+
56
+ it('should find team details section when team is selected', () => {
57
+ // Click on first team to select it
58
+ cy.get('[data-cy^="team-item-"]').first().click()
59
+ // Team details should appear
60
60
  cy.get('[data-cy="teams-settings-team-details"]', { timeout: 15000 }).should('exist')
61
61
  })
62
62
 
@@ -65,4 +65,22 @@ describe('Settings Teams Selectors Validation', { tags: ['@ui-selectors'] }, ()
65
65
  cy.get('[data-cy="create-team-button"]', { timeout: 15000 }).should('exist')
66
66
  })
67
67
  })
68
+
69
+ // ============================================
70
+ // SEL_STMS_002: CREATE TEAM DIALOG
71
+ // Tested in teams.cy.ts, documented here for reference
72
+ // ============================================
73
+ describe('SEL_STMS_002: Create Team Dialog Documentation', { tags: '@SEL_STMS_002' }, () => {
74
+ it('should document create team dialog selectors', () => {
75
+ cy.log('Create Team Dialog selectors are tested in teams.cy.ts')
76
+ cy.log('Dialog selectors:')
77
+ cy.log('- create-team-dialog')
78
+ cy.log('- team-name-input')
79
+ cy.log('- team-slug-input')
80
+ cy.log('- team-description-input')
81
+ cy.log('- cancel-create-team')
82
+ cy.log('- submit-create-team')
83
+ cy.wrap(true).should('be.true')
84
+ })
85
+ })
68
86
  })
@@ -0,0 +1,261 @@
1
+ ---
2
+ feature: Superadmin UI Selectors Validation
3
+ priority: high
4
+ tags: [selectors, superadmin, ui-validation, admin-panel]
5
+ grepTags: [ui-selectors, superadmin, SEL_SADM_001, SEL_SADM_002, SEL_SADM_003, SEL_SADM_004, SEL_SADM_005, SEL_SADM_006]
6
+ coverage: 6
7
+ ---
8
+
9
+ # Superadmin UI Selectors Validation
10
+
11
+ > Validates that superadmin area 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_SADM_001: Superadmin Dashboard Selectors
14
+
15
+ ### Metadata
16
+ - **Priority:** High
17
+ - **Type:** Selector Validation
18
+ - **Tags:** superadmin, dashboard, container
19
+ - **Grep:** `@ui-selectors` `@SEL_SADM_001`
20
+ - **Status:** Active
21
+
22
+ ```gherkin:en
23
+ Scenario: Superadmin dashboard has required selectors
24
+
25
+ Given I am logged in as superadmin
26
+ And I navigate to the superadmin dashboard
27
+ Then I should find the superadmin container
28
+ And I should find the dashboard container
29
+ ```
30
+
31
+ ```gherkin:es
32
+ Scenario: El dashboard de superadmin tiene los selectores requeridos
33
+
34
+ Given estoy logueado como superadmin
35
+ And navego al dashboard de superadmin
36
+ Then deberia encontrar el contenedor de superadmin
37
+ And deberia encontrar el contenedor del dashboard
38
+ ```
39
+
40
+ ### Expected Results
41
+ - `superadmin.container` selector exists (superadmin-container)
42
+ - `superadmin.dashboard.container` selector exists (superadmin-dashboard)
43
+
44
+ ---
45
+
46
+ ## @test SEL_SADM_002: Superadmin Navigation Selectors
47
+
48
+ ### Metadata
49
+ - **Priority:** High
50
+ - **Type:** Selector Validation
51
+ - **Tags:** superadmin, navigation, sidebar
52
+ - **Grep:** `@ui-selectors` `@SEL_SADM_002`
53
+ - **Status:** Active
54
+
55
+ ```gherkin:en
56
+ Scenario: Superadmin navigation has all required links
57
+
58
+ Given I am logged in as superadmin
59
+ And I navigate to the superadmin area
60
+ Then I should find the dashboard nav link
61
+ And I should find the users nav link
62
+ And I should find the teams nav link
63
+ And I should find the team-roles nav link
64
+ And I should find the subscriptions nav link
65
+ And I should find the exit to dashboard link
66
+ ```
67
+
68
+ ```gherkin:es
69
+ Scenario: La navegacion de superadmin tiene todos los links requeridos
70
+
71
+ Given estoy logueado como superadmin
72
+ And navego al area de superadmin
73
+ Then deberia encontrar el link de navegacion a dashboard
74
+ And deberia encontrar el link de navegacion a users
75
+ And deberia encontrar el link de navegacion a teams
76
+ And deberia encontrar el link de navegacion a team-roles
77
+ And deberia encontrar el link de navegacion a subscriptions
78
+ And deberia encontrar el link de salir al dashboard
79
+ ```
80
+
81
+ ### Expected Results
82
+ - `superadmin.navigation.dashboard` selector exists (superadmin-nav-dashboard)
83
+ - `superadmin.navigation.users` selector exists (superadmin-nav-users)
84
+ - `superadmin.navigation.teams` selector exists (superadmin-nav-teams)
85
+ - `superadmin.navigation.teamRoles` selector exists (superadmin-nav-team-roles)
86
+ - `superadmin.navigation.subscriptions` selector exists (superadmin-nav-subscriptions)
87
+ - `superadmin.navigation.exitToDashboard` selector exists (superadmin-sidebar-exit-to-dashboard)
88
+
89
+ ---
90
+
91
+ ## @test SEL_SADM_003: Superadmin Users Page Selectors
92
+
93
+ ### Metadata
94
+ - **Priority:** High
95
+ - **Type:** Selector Validation
96
+ - **Tags:** superadmin, users, management
97
+ - **Grep:** `@ui-selectors` `@SEL_SADM_003`
98
+ - **Status:** Active
99
+
100
+ ```gherkin:en
101
+ Scenario: Superadmin users page has required selectors
102
+
103
+ Given I am logged in as superadmin
104
+ And I navigate to the superadmin users page
105
+ Then I should find the users container
106
+ And I should find the users table
107
+ And I should find the users search input
108
+ ```
109
+
110
+ ```gherkin:es
111
+ Scenario: La pagina de usuarios de superadmin tiene los selectores requeridos
112
+
113
+ Given estoy logueado como superadmin
114
+ And navego a la pagina de usuarios de superadmin
115
+ Then deberia encontrar el contenedor de usuarios
116
+ And deberia encontrar la tabla de usuarios
117
+ And deberia encontrar el input de busqueda de usuarios
118
+ ```
119
+
120
+ ### Expected Results
121
+ - `superadmin.users.container` selector exists (superadmin-users-container)
122
+ - `superadmin.users.table` selector exists (superadmin-users-table)
123
+ - `superadmin.users.search` selector exists (superadmin-users-search)
124
+
125
+ ---
126
+
127
+ ## @test SEL_SADM_004: Superadmin Teams Page Selectors
128
+
129
+ ### Metadata
130
+ - **Priority:** High
131
+ - **Type:** Selector Validation
132
+ - **Tags:** superadmin, teams, management
133
+ - **Grep:** `@ui-selectors` `@SEL_SADM_004`
134
+ - **Status:** Active
135
+
136
+ ```gherkin:en
137
+ Scenario: Superadmin teams page has required selectors
138
+
139
+ Given I am logged in as superadmin
140
+ And I navigate to the superadmin teams page
141
+ Then I should find the teams container
142
+ And I should find the teams table
143
+ And I should find the teams search input
144
+ ```
145
+
146
+ ```gherkin:es
147
+ Scenario: La pagina de equipos de superadmin tiene los selectores requeridos
148
+
149
+ Given estoy logueado como superadmin
150
+ And navego a la pagina de equipos de superadmin
151
+ Then deberia encontrar el contenedor de equipos
152
+ And deberia encontrar la tabla de equipos
153
+ And deberia encontrar el input de busqueda de equipos
154
+ ```
155
+
156
+ ### Expected Results
157
+ - `superadmin.teams.container` selector exists (superadmin-teams-container)
158
+ - `superadmin.teams.table` selector exists (superadmin-teams-table)
159
+ - `superadmin.teams.search` selector exists (superadmin-teams-search)
160
+
161
+ ---
162
+
163
+ ## @test SEL_SADM_005: Superadmin Subscriptions Page Selectors
164
+
165
+ ### Metadata
166
+ - **Priority:** High
167
+ - **Type:** Selector Validation
168
+ - **Tags:** superadmin, subscriptions, billing
169
+ - **Grep:** `@ui-selectors` `@SEL_SADM_005`
170
+ - **Status:** Active
171
+
172
+ ```gherkin:en
173
+ Scenario: Superadmin subscriptions page has required selectors
174
+
175
+ Given I am logged in as superadmin
176
+ And I navigate to the superadmin subscriptions page
177
+ Then I should find the subscriptions container
178
+ And I should find the MRR stat card
179
+ And I should find the plan distribution section
180
+ And I should find the active count stat card
181
+ ```
182
+
183
+ ```gherkin:es
184
+ Scenario: La pagina de suscripciones de superadmin tiene los selectores requeridos
185
+
186
+ Given estoy logueado como superadmin
187
+ And navego a la pagina de suscripciones de superadmin
188
+ Then deberia encontrar el contenedor de suscripciones
189
+ And deberia encontrar la tarjeta de estadisticas MRR
190
+ And deberia encontrar la seccion de distribucion de planes
191
+ And deberia encontrar la tarjeta de conteo activo
192
+ ```
193
+
194
+ ### Expected Results
195
+ - `superadmin.subscriptions.container` selector exists (superadmin-subscriptions-container)
196
+ - `superadmin.subscriptions.mrr` selector exists (superadmin-subscriptions-mrr)
197
+ - `superadmin.subscriptions.planDistribution` selector exists (superadmin-subscriptions-plan-distribution)
198
+ - `superadmin.subscriptions.activeCount` selector exists (superadmin-subscriptions-active-count)
199
+
200
+ ---
201
+
202
+ ## @test SEL_SADM_006: Dynamic Selectors (Pattern Validation)
203
+
204
+ ### Metadata
205
+ - **Priority:** Medium
206
+ - **Type:** Selector Validation
207
+ - **Tags:** superadmin, dynamic, patterns
208
+ - **Grep:** `@ui-selectors` `@SEL_SADM_006`
209
+ - **Status:** Active
210
+
211
+ ```gherkin:en
212
+ Scenario: Dynamic selectors return valid patterns
213
+
214
+ Given I am logged in as superadmin
215
+ And I navigate to the superadmin users page
216
+ Then the userRow selector should return a valid pattern
217
+ And the userView selector should return a valid pattern
218
+ And the teamRow selector should return a valid pattern
219
+ And the subscriptionsPlanCount selector should return a valid pattern
220
+ ```
221
+
222
+ ```gherkin:es
223
+ Scenario: Los selectores dinamicos retornan patrones validos
224
+
225
+ Given estoy logueado como superadmin
226
+ And navego a la pagina de usuarios de superadmin
227
+ Then el selector userRow deberia retornar un patron valido
228
+ And el selector userView deberia retornar un patron valido
229
+ And el selector teamRow deberia retornar un patron valido
230
+ And el selector subscriptionsPlanCount deberia retornar un patron valido
231
+ ```
232
+
233
+ ### Expected Results
234
+ - `superadmin.users.row` pattern includes 'superadmin-user-row'
235
+ - `superadmin.users.viewButton` pattern includes 'superadmin-user-view'
236
+ - `superadmin.teams.row` pattern includes 'superadmin-team-row'
237
+ - `superadmin.subscriptions.planCount` pattern includes 'superadmin-subscriptions-plan-count'
238
+
239
+ ### Notes
240
+ These tests validate that dynamic selector functions (those that accept parameters like `id` or `plan`) return correctly formatted selector strings. They do not test actual DOM elements.
241
+
242
+ ---
243
+
244
+ ## Related Components
245
+
246
+ | Component | File | Selectors |
247
+ |-----------|------|-----------|
248
+ | SuperadminLayout | `packages/core/templates/app/superadmin/layout.tsx` | superadmin-container |
249
+ | SuperadminSidebar | `packages/core/src/components/superadmin/layouts/SuperadminSidebar.tsx` | superadmin-nav-* |
250
+ | SuperadminDashboard | `packages/core/templates/app/superadmin/page.tsx` | superadmin-dashboard |
251
+ | UsersPage | `packages/core/templates/app/superadmin/users/page.tsx` | superadmin-users-* |
252
+ | TeamsPage | `packages/core/templates/app/superadmin/teams/page.tsx` | superadmin-teams-* |
253
+ | SubscriptionsPage | `packages/core/templates/app/superadmin/subscriptions/page.tsx` | superadmin-subscriptions-* |
254
+ | UsersTable | `packages/core/src/components/users/tables/UsersTable.tsx` | superadmin-users-table, superadmin-user-row-{id} |
255
+ | TeamsTable | `packages/core/src/components/superadmin/tables/TeamsTable.tsx` | superadmin-teams-table, superadmin-team-row-{id} |
256
+
257
+ ## Related POMs
258
+
259
+ | POM | File | Usage |
260
+ |-----|------|-------|
261
+ | SuperadminPOM | `themes/default/tests/cypress/src/features/SuperadminPOM.ts` | Superadmin area interactions and selectors |
@@ -14,19 +14,27 @@
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_SADM_001: Superadmin Dashboard Selectors
19
+ * - SEL_SADM_002: Superadmin Navigation Selectors
20
+ * - SEL_SADM_003: Superadmin Users Page Selectors
21
+ * - SEL_SADM_004: Superadmin Teams Page Selectors
22
+ * - SEL_SADM_005: Superadmin Subscriptions Page Selectors
23
+ * - SEL_SADM_006: Dynamic Selectors (Pattern Validation)
24
+ *
17
25
  * NOTE: Requires superadmin role to access /superadmin/* pages.
18
26
  */
19
27
 
20
- import { SuperadminPOM } from '../../src/features/SuperadminPOM'
21
- import { loginAsDefaultSuperadmin } from '../../src/session-helpers'
28
+ import { SuperadminPOM } from '../../../src/features/SuperadminPOM'
29
+ import { loginAsDefaultSuperadmin } from '../../../src/session-helpers'
22
30
 
23
- describe('Superadmin Selectors Validation', { tags: ['@ui-selectors'] }, () => {
31
+ describe('Superadmin Selectors Validation', { tags: ['@ui-selectors', '@superadmin'] }, () => {
24
32
  const superadmin = SuperadminPOM.create()
25
33
 
26
34
  // ============================================
27
- // SUPERADMIN DASHBOARD (2 selectors)
35
+ // SEL_SADM_001: SUPERADMIN DASHBOARD
28
36
  // ============================================
29
- describe('Superadmin Dashboard', () => {
37
+ describe('SEL_SADM_001: Superadmin Dashboard', { tags: '@SEL_SADM_001' }, () => {
30
38
  beforeEach(() => {
31
39
  loginAsDefaultSuperadmin()
32
40
  cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
@@ -43,9 +51,9 @@ describe('Superadmin Selectors Validation', { tags: ['@ui-selectors'] }, () => {
43
51
  })
44
52
 
45
53
  // ============================================
46
- // SUPERADMIN NAVIGATION (6 selectors)
54
+ // SEL_SADM_002: SUPERADMIN NAVIGATION
47
55
  // ============================================
48
- describe('Superadmin Navigation', () => {
56
+ describe('SEL_SADM_002: Superadmin Navigation', { tags: '@SEL_SADM_002' }, () => {
49
57
  beforeEach(() => {
50
58
  loginAsDefaultSuperadmin()
51
59
  cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
@@ -78,9 +86,9 @@ describe('Superadmin Selectors Validation', { tags: ['@ui-selectors'] }, () => {
78
86
  })
79
87
 
80
88
  // ============================================
81
- // SUPERADMIN USERS PAGE (3 selectors)
89
+ // SEL_SADM_003: SUPERADMIN USERS PAGE
82
90
  // ============================================
83
- describe('Superadmin Users Page', () => {
91
+ describe('SEL_SADM_003: Superadmin Users Page', { tags: '@SEL_SADM_003' }, () => {
84
92
  beforeEach(() => {
85
93
  loginAsDefaultSuperadmin()
86
94
  cy.visit('/superadmin/users', { timeout: 60000, failOnStatusCode: false })
@@ -101,9 +109,9 @@ describe('Superadmin Selectors Validation', { tags: ['@ui-selectors'] }, () => {
101
109
  })
102
110
 
103
111
  // ============================================
104
- // SUPERADMIN TEAMS PAGE (4 selectors)
112
+ // SEL_SADM_004: SUPERADMIN TEAMS PAGE
105
113
  // ============================================
106
- describe('Superadmin Teams Page', () => {
114
+ describe('SEL_SADM_004: Superadmin Teams Page', { tags: '@SEL_SADM_004' }, () => {
107
115
  beforeEach(() => {
108
116
  loginAsDefaultSuperadmin()
109
117
  cy.visit('/superadmin/teams', { timeout: 60000, failOnStatusCode: false })
@@ -124,9 +132,9 @@ describe('Superadmin Selectors Validation', { tags: ['@ui-selectors'] }, () => {
124
132
  })
125
133
 
126
134
  // ============================================
127
- // SUPERADMIN SUBSCRIPTIONS PAGE (4 selectors)
135
+ // SEL_SADM_005: SUPERADMIN SUBSCRIPTIONS PAGE
128
136
  // ============================================
129
- describe('Superadmin Subscriptions Page', () => {
137
+ describe('SEL_SADM_005: Superadmin Subscriptions Page', { tags: '@SEL_SADM_005' }, () => {
130
138
  beforeEach(() => {
131
139
  loginAsDefaultSuperadmin()
132
140
  cy.visit('/superadmin/subscriptions', { timeout: 60000, failOnStatusCode: false })
@@ -151,10 +159,10 @@ describe('Superadmin Selectors Validation', { tags: ['@ui-selectors'] }, () => {
151
159
  })
152
160
 
153
161
  // ============================================
154
- // DYNAMIC SELECTORS (require specific data)
162
+ // SEL_SADM_006: DYNAMIC SELECTORS (PATTERN VALIDATION)
155
163
  // These test the selector pattern, not actual elements
156
164
  // ============================================
157
- describe('Dynamic Selectors (Pattern Validation)', () => {
165
+ describe('SEL_SADM_006: Dynamic Selectors (Pattern Validation)', { tags: '@SEL_SADM_006' }, () => {
158
166
  beforeEach(() => {
159
167
  loginAsDefaultSuperadmin()
160
168
  cy.visit('/superadmin/users', { timeout: 60000, failOnStatusCode: false })