@nextsparkjs/theme-default 0.1.0-beta.31 → 0.1.0-beta.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/selectors.ts +5 -1
- package/package.json +2 -2
- package/tests/cypress/e2e/{_devtools → _utils/devtools}/access.cy.ts +3 -3
- package/tests/cypress/e2e/{_devtools → _utils/devtools}/navigation.cy.ts +3 -3
- package/tests/cypress/e2e/{_devtools → _utils/devtools}/pages.cy.ts +3 -3
- package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/auth.cy.ts +39 -35
- package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
- package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +111 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/dashboard-sidebar.cy.ts +35 -6
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +200 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/dashboard-topnav.cy.ts +30 -43
- package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/devtools.cy.ts +77 -14
- package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/global-search.cy.ts +15 -10
- package/tests/cypress/e2e/_utils/selectors/pages-editor.bdd.md +207 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/pages-editor.cy.ts +44 -12
- package/tests/cypress/e2e/_utils/selectors/posts-editor.bdd.md +184 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/posts-editor.cy.ts +107 -39
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/public.cy.ts +1 -1
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-api-keys.cy.ts +30 -25
- package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-billing.cy.ts +10 -7
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +138 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-layout.cy.ts +12 -8
- package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-password.cy.ts +10 -7
- package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-profile.cy.ts +15 -18
- package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/settings-teams.cy.ts +36 -18
- package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/superadmin.cy.ts +23 -15
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +353 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/tasks.cy.ts +11 -10
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/taxonomies.cy.ts +1 -1
- package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
- package/tests/cypress/e2e/{_selectors → _utils/selectors}/teams.cy.ts +90 -37
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-teams.cy.ts +4 -4
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-users.cy.ts +4 -4
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/dashboard.cy.ts +4 -4
- package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/subscriptions-overview.cy.ts +4 -4
- package/tests/cypress/e2e/api/{entities → _core/users}/users-security.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{auth → _core/auth}/login-logout.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{auth → _core/auth}/password-reset.cy.ts +1 -1
- package/tests/cypress/e2e/uat/{billing → _core/billing}/extended.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/feature-gates.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/page.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/status.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/team-switch.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{billing → _core/billing}/usage.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{devtools → _core/devtools}/api-tester.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{scheduled-actions → _core/scheduled-actions}/devtools-ui.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{teams → _core/teams}/roles-matrix.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{teams → _core/teams}/switcher.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{roles → features/roles}/editor-role.cy.ts +2 -2
- package/tests/cypress/e2e/uat/{roles → features/roles}/member-restrictions.cy.ts +3 -3
- package/tests/cypress/e2e/uat/{roles → features/roles}/owner-full-crud.cy.ts +2 -2
- package/tests/cypress/src/core/DashboardEntityPOM.ts +2 -2
- package/tests/cypress/src/features/DashboardPOM.ts +2 -2
- package/tests/cypress/src/features/DevtoolsPOM.ts +12 -1
- package/tests/cypress/src/session-helpers.ts +35 -17
- package/tests/cypress/support/e2e.ts +2 -1
- package/tests/cypress.config.ts +29 -10
- package/tests/tsconfig.json +13 -7
- package/tests/cypress/e2e/_selectors/billing.cy.ts +0 -89
- package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +0 -113
- package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +0 -89
- /package/tests/cypress/e2e/{_devtools → _utils/devtools}/access.bdd.md +0 -0
- /package/tests/cypress/e2e/{_devtools → _utils/devtools}/navigation.bdd.md +0 -0
- /package/tests/cypress/e2e/{_devtools → _utils/devtools}/pages.bdd.md +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/README.md +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/sector7-superadmin-teams.narration.json +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/sector7-superadmin.cy.ts +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/teams-system.doc.cy.ts +0 -0
- /package/tests/cypress/e2e/{_docs → _utils/docs}/tutorials/teams-system.narration.json +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-teams.bdd.md +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/all-users.bdd.md +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/dashboard.bdd.md +0 -0
- /package/tests/cypress/e2e/{_superadmin → _utils/superadmin}/subscriptions-overview.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/BillingAPIController.js +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/check-action.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/checkout.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/lifecycle.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/README.md +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/business.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/downgrade.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/fixtures/billing-plans.json +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/free.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/pro.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/plans/starter.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{billing → _core/billing}/portal.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{devtools → _core/devtools}/registries.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{devtools → _core/devtools}/registries.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/cron-endpoint.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/cron-endpoint.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/devtools-endpoint.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/devtools-endpoint.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/scheduling.bdd.md +0 -0
- /package/tests/cypress/e2e/api/{scheduled-actions → _core/scheduled-actions}/scheduling.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{settings → _core/settings}/api-keys.crud.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{entities → _core/users}/users-crud.cy.ts +0 -0
- /package/tests/cypress/e2e/api/{entities → _core/users}/users-metas.cy.ts +0 -0
- /package/tests/cypress/e2e/api/entities/{customers-crud.cy.ts → customers/customers-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{customers-metas.cy.ts → customers/customers-metas.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{blocks-scope.cy.ts → pages/blocks-scope.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{pages-crud.cy.ts → pages/pages-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{pages-status.cy.ts → pages/pages-status.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{post-categories-crud.cy.ts → posts/post-categories-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{posts-crud.cy.ts → posts/posts-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{posts-status.cy.ts → posts/posts-status.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{tasks-crud.cy.ts → tasks/tasks-crud.cy.ts} +0 -0
- /package/tests/cypress/e2e/api/entities/{tasks-metas.cy.ts → tasks/tasks-metas.cy.ts} +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/developer-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/developer-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/superadmin-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/app-roles/superadmin-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/custom-roles/editor-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/custom-roles/editor-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/login-logout.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/password-reset.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/admin-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/admin-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/member-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/member-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/owner-login.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{auth → _core/auth}/team-roles/owner-login.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/extended.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/feature-gates.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/page.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/status.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/team-switch.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{billing → _core/billing}/usage.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{blocks → _core/blocks}/hero.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{blocks → _core/blocks}/hero.cy.ts +0 -0
- /package/tests/cypress/e2e/uat/{scheduled-actions → _core/scheduled-actions}/devtools-ui.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{teams → _core/teams}/roles-matrix.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{teams → _core/teams}/switcher.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{teams → _core/teams}/team-switcher.md +0 -0
- /package/tests/cypress/e2e/uat/{roles → features/roles}/editor-role.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{roles → features/roles}/member-restrictions.bdd.md +0 -0
- /package/tests/cypress/e2e/uat/{roles → features/roles}/owner-full-crud.bdd.md +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: Dashboard Mobile
|
|
3
|
+
*
|
|
4
|
+
* This test validates that dashboard mobile selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate DashboardPOM mobile selectors work correctly
|
|
9
|
+
* - Ensure all dashboard.mobile.* selectors are implemented
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Navigate to dashboard (requires login)
|
|
14
|
+
* - Assert elements exist in DOM (no form submissions)
|
|
15
|
+
*
|
|
16
|
+
* Test IDs:
|
|
17
|
+
* - SEL_DMOB_DOC: Mobile Testing Documentation
|
|
18
|
+
* - SEL_DMOB_001: Mobile Topbar Selectors (skipped - requires mobile viewport)
|
|
19
|
+
* - SEL_DMOB_002: Mobile Bottom Nav Selectors (skipped - requires mobile viewport)
|
|
20
|
+
* - SEL_DMOB_003: Mobile More Sheet Selectors (skipped - requires mobile viewport)
|
|
21
|
+
* - SEL_DMOB_004: Mobile Quick Create Selectors (skipped - requires mobile viewport)
|
|
22
|
+
*
|
|
23
|
+
* IMPORTANT: Mobile selectors are ONLY visible on small viewports (< 1024px).
|
|
24
|
+
* All tests are marked as skip for desktop testing.
|
|
25
|
+
* To test mobile, use: cy.viewport('iphone-x') or similar.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { DashboardPOM } from '../../../src/features/DashboardPOM'
|
|
29
|
+
|
|
30
|
+
describe('Dashboard Mobile Selectors Validation', { tags: ['@ui-selectors', '@mobile'] }, () => {
|
|
31
|
+
const dashboard = DashboardPOM.create()
|
|
32
|
+
|
|
33
|
+
// ============================================
|
|
34
|
+
// SEL_DMOB_DOC: DOCUMENTATION
|
|
35
|
+
// ============================================
|
|
36
|
+
describe('SEL_DMOB_DOC: Mobile Testing Documentation', { tags: '@SEL_DMOB_DOC' }, () => {
|
|
37
|
+
it('should document how to test mobile selectors', () => {
|
|
38
|
+
cy.log('=== DASHBOARD MOBILE SELECTORS ===')
|
|
39
|
+
cy.log('')
|
|
40
|
+
cy.log('IMPORTANT: Mobile selectors require viewport < 1024px')
|
|
41
|
+
cy.log('To test: Add cy.viewport("iphone-x") in beforeEach')
|
|
42
|
+
cy.log('Or run with: --config viewportWidth=375,viewportHeight=812')
|
|
43
|
+
cy.log('')
|
|
44
|
+
cy.log('Mobile Topbar (lg:hidden):')
|
|
45
|
+
cy.log('- mobile-topbar-header, mobile-topbar-user-profile')
|
|
46
|
+
cy.log('- mobile-topbar-notifications, mobile-topbar-theme-toggle')
|
|
47
|
+
cy.log('')
|
|
48
|
+
cy.log('Mobile Bottom Nav:')
|
|
49
|
+
cy.log('- mobile-bottom-nav, mobile-bottom-nav-item-{slug}')
|
|
50
|
+
cy.log('')
|
|
51
|
+
cy.log('Mobile More Sheet:')
|
|
52
|
+
cy.log('- mobile-more-sheet-content, mobile-more-sheet-item-{slug}')
|
|
53
|
+
cy.log('- mobile-more-sheet-superadmin, mobile-more-sheet-team-switcher')
|
|
54
|
+
cy.log('- mobile-more-sheet-signout')
|
|
55
|
+
cy.log('')
|
|
56
|
+
cy.log('Mobile Quick Create:')
|
|
57
|
+
cy.log('- mobile-quick-create-content, mobile-quick-create-item-{slug}')
|
|
58
|
+
cy.wrap(true).should('be.true')
|
|
59
|
+
})
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
// ============================================
|
|
63
|
+
// SEL_DMOB_001: MOBILE TOPBAR (4 selectors)
|
|
64
|
+
// NOTE: Only visible on mobile viewports
|
|
65
|
+
// ============================================
|
|
66
|
+
describe('SEL_DMOB_001: Mobile Topbar Selectors', { tags: '@SEL_DMOB_001' }, () => {
|
|
67
|
+
it.skip('should find mobile topbar header (requires mobile viewport)', () => {
|
|
68
|
+
// Requires: cy.viewport('iphone-x')
|
|
69
|
+
cy.get(dashboard.selectors.mobileTopbarHeader).should('exist')
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it.skip('should find mobile user profile button (requires mobile viewport)', () => {
|
|
73
|
+
cy.get(dashboard.selectors.mobileTopbarUserProfile).should('exist')
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it.skip('should find mobile notifications button (requires mobile viewport)', () => {
|
|
77
|
+
cy.get(dashboard.selectors.mobileTopbarNotifications).should('exist')
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it.skip('should find mobile theme toggle (requires mobile viewport)', () => {
|
|
81
|
+
cy.get(dashboard.selectors.mobileTopbarThemeToggle).should('exist')
|
|
82
|
+
})
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
// ============================================
|
|
86
|
+
// SEL_DMOB_002: MOBILE BOTTOM NAV (2 selectors)
|
|
87
|
+
// ============================================
|
|
88
|
+
describe('SEL_DMOB_002: Mobile Bottom Nav Selectors', { tags: '@SEL_DMOB_002' }, () => {
|
|
89
|
+
it.skip('should find mobile bottom nav (requires mobile viewport)', () => {
|
|
90
|
+
cy.get(dashboard.selectors.mobileBottomNav).should('exist')
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
it.skip('should find mobile bottom nav item (requires mobile viewport)', () => {
|
|
94
|
+
// Example: dashboard, entities, create, more
|
|
95
|
+
cy.get(dashboard.selectors.mobileBottomNavItem('dashboard')).should('exist')
|
|
96
|
+
})
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
// ============================================
|
|
100
|
+
// SEL_DMOB_003: MOBILE MORE SHEET (5 selectors)
|
|
101
|
+
// ============================================
|
|
102
|
+
describe('SEL_DMOB_003: Mobile More Sheet Selectors', { tags: '@SEL_DMOB_003' }, () => {
|
|
103
|
+
it.skip('should find mobile more sheet content (requires mobile viewport)', () => {
|
|
104
|
+
cy.get(dashboard.selectors.mobileMoreSheetContent).should('exist')
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it.skip('should find mobile more sheet item (requires mobile viewport)', () => {
|
|
108
|
+
cy.get(dashboard.selectors.mobileMoreSheetItem('settings')).should('exist')
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it.skip('should find mobile more sheet sector7 link (requires mobile viewport)', () => {
|
|
112
|
+
cy.get(dashboard.selectors.mobileMoreSheetSuperadmin).should('exist')
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
it.skip('should find mobile more sheet team switcher (requires mobile viewport)', () => {
|
|
116
|
+
cy.get(dashboard.selectors.mobileMoreSheetTeamSwitcher).should('exist')
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
it.skip('should find mobile more sheet signout button (requires mobile viewport)', () => {
|
|
120
|
+
cy.get(dashboard.selectors.mobileMoreSheetSignout).should('exist')
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
// ============================================
|
|
125
|
+
// SEL_DMOB_004: MOBILE QUICK CREATE SHEET (2 selectors)
|
|
126
|
+
// ============================================
|
|
127
|
+
describe('SEL_DMOB_004: Mobile Quick Create Selectors', { tags: '@SEL_DMOB_004' }, () => {
|
|
128
|
+
it.skip('should find mobile quick create sheet content (requires mobile viewport)', () => {
|
|
129
|
+
cy.get(dashboard.selectors.mobileQuickCreateContent).should('exist')
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
it.skip('should find mobile quick create item (requires mobile viewport)', () => {
|
|
133
|
+
// Example: tasks, customers, posts, pages
|
|
134
|
+
cy.get(dashboard.selectors.mobileQuickCreateItem('tasks')).should('exist')
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
})
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Dashboard Navigation UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, dashboard, navigation, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, dashboard, SEL_DASH_001, SEL_DASH_002, SEL_DASH_003]
|
|
6
|
+
coverage: 3
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Dashboard Navigation UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that dashboard navigation 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_DASH_001: Navigation Structure
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** High
|
|
17
|
+
- **Type:** Selector Validation
|
|
18
|
+
- **Tags:** navigation, structure, sidebar
|
|
19
|
+
- **Grep:** `@ui-selectors` `@SEL_DASH_001`
|
|
20
|
+
- **Status:** Active
|
|
21
|
+
|
|
22
|
+
```gherkin:en
|
|
23
|
+
Scenario: Dashboard navigation has complete structure
|
|
24
|
+
|
|
25
|
+
Given I am logged in as developer
|
|
26
|
+
And I navigate to the dashboard
|
|
27
|
+
Then I should find the main navigation container
|
|
28
|
+
And I should find the dashboard link
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```gherkin:es
|
|
32
|
+
Scenario: Navegacion del dashboard tiene estructura completa
|
|
33
|
+
|
|
34
|
+
Given estoy logueado como developer
|
|
35
|
+
And navego al dashboard
|
|
36
|
+
Then deberia encontrar el contenedor principal de navegacion
|
|
37
|
+
And deberia encontrar el link de dashboard
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Expected Results
|
|
41
|
+
- `dashboard.navigation.main` selector exists (nav-main)
|
|
42
|
+
- `dashboard.navigation.dashboardLink` selector exists (nav-link-dashboard)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## @test SEL_DASH_002: Entity Links
|
|
47
|
+
|
|
48
|
+
### Metadata
|
|
49
|
+
- **Priority:** High
|
|
50
|
+
- **Type:** Selector Validation
|
|
51
|
+
- **Tags:** navigation, entities, links
|
|
52
|
+
- **Grep:** `@ui-selectors` `@SEL_DASH_002`
|
|
53
|
+
- **Status:** Active
|
|
54
|
+
|
|
55
|
+
```gherkin:en
|
|
56
|
+
Scenario: Dashboard navigation has entity links
|
|
57
|
+
|
|
58
|
+
Given I am logged in as developer
|
|
59
|
+
And I navigate to the dashboard
|
|
60
|
+
Then I should find the tasks entity link
|
|
61
|
+
And I should find the customers entity link
|
|
62
|
+
And I should find the posts entity link
|
|
63
|
+
And I should find the pages entity link
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```gherkin:es
|
|
67
|
+
Scenario: Navegacion del dashboard tiene links de entidades
|
|
68
|
+
|
|
69
|
+
Given estoy logueado como developer
|
|
70
|
+
And navego al dashboard
|
|
71
|
+
Then deberia encontrar el link de entidad tasks
|
|
72
|
+
And deberia encontrar el link de entidad customers
|
|
73
|
+
And deberia encontrar el link de entidad posts
|
|
74
|
+
And deberia encontrar el link de entidad pages
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Expected Results
|
|
78
|
+
- `dashboard.navigation.entityLink` with slug `tasks` exists (nav-link-entity-tasks)
|
|
79
|
+
- `dashboard.navigation.entityLink` with slug `customers` exists (nav-link-entity-customers)
|
|
80
|
+
- `dashboard.navigation.entityLink` with slug `posts` exists (nav-link-entity-posts)
|
|
81
|
+
- `dashboard.navigation.entityLink` with slug `pages` exists (nav-link-entity-pages)
|
|
82
|
+
|
|
83
|
+
### Notes
|
|
84
|
+
Entity links are dynamic based on:
|
|
85
|
+
- Entity configuration (enabled, showInMenu)
|
|
86
|
+
- User permissions
|
|
87
|
+
- Theme configuration
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## @test SEL_DASH_003: Navigation Sections
|
|
92
|
+
|
|
93
|
+
### Metadata
|
|
94
|
+
- **Priority:** Medium
|
|
95
|
+
- **Type:** Selector Validation
|
|
96
|
+
- **Tags:** navigation, sections, dynamic
|
|
97
|
+
- **Grep:** `@ui-selectors` `@SEL_DASH_003`
|
|
98
|
+
- **Status:** Skipped - requires customSidebarSections in app.config.ts
|
|
99
|
+
|
|
100
|
+
```gherkin:en
|
|
101
|
+
Scenario: Dashboard navigation has section structure
|
|
102
|
+
|
|
103
|
+
Given I am logged in as developer
|
|
104
|
+
And I navigate to the dashboard
|
|
105
|
+
And the theme has custom sidebar sections configured
|
|
106
|
+
Then I should find section containers by ID
|
|
107
|
+
And I should find section labels
|
|
108
|
+
And I should find section items
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```gherkin:es
|
|
112
|
+
Scenario: Navegacion del dashboard tiene estructura de secciones
|
|
113
|
+
|
|
114
|
+
Given estoy logueado como developer
|
|
115
|
+
And navego al dashboard
|
|
116
|
+
And el tema tiene secciones de sidebar personalizadas configuradas
|
|
117
|
+
Then deberia encontrar contenedores de seccion por ID
|
|
118
|
+
And deberia encontrar etiquetas de seccion
|
|
119
|
+
And deberia encontrar items de seccion
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Expected Results (when sections are configured)
|
|
123
|
+
- `dashboard.navigation.section` with ID exists (nav-section-{id})
|
|
124
|
+
- `dashboard.navigation.sectionLabel` with ID exists (nav-section-label-{id})
|
|
125
|
+
- `dashboard.navigation.sectionItem` with IDs exists (nav-section-item-{sectionId}-{itemId})
|
|
126
|
+
|
|
127
|
+
### Notes
|
|
128
|
+
All tests in this section are skipped because:
|
|
129
|
+
- Requires `customSidebarSections` to be defined in `app.config.ts`
|
|
130
|
+
- **IMPORTANT:** Enabling `customSidebarSections` REPLACES the default entity-based navigation entirely
|
|
131
|
+
- The sidebar will only show items defined in the sections (no automatic entity links)
|
|
132
|
+
- Requires translation keys for each section and item (e.g., `navigation.content`, `navigation.posts`)
|
|
133
|
+
- For themes with custom sections (e.g., LMS themes), enable these tests with the actual section/item IDs
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Related Components
|
|
138
|
+
|
|
139
|
+
| Component | File | Selectors |
|
|
140
|
+
|-----------|------|-----------|
|
|
141
|
+
| DynamicNavigation | `packages/core/src/components/dashboard/navigation/DynamicNavigation.tsx` | nav-main, nav-link-dashboard, nav-link-entity-{slug}, nav-section-{id}, nav-section-label-{id}, nav-section-item-{sectionId}-{itemId} |
|
|
142
|
+
|
|
143
|
+
## Related POMs
|
|
144
|
+
|
|
145
|
+
| POM | File | Usage |
|
|
146
|
+
|-----|------|-------|
|
|
147
|
+
| DashboardPOM | `themes/default/tests/cypress/src/features/DashboardPOM.ts` | Navigation selectors and methods |
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: Dashboard Navigation
|
|
3
|
+
*
|
|
4
|
+
* This test validates that dashboard navigation selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate DashboardPOM navigation selectors work correctly
|
|
9
|
+
* - Ensure all dashboard.navigation.* selectors are implemented
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Navigate to dashboard (requires login)
|
|
14
|
+
* - Assert elements exist in DOM (no form submissions)
|
|
15
|
+
* - Fast execution (< 30 seconds per describe block)
|
|
16
|
+
*
|
|
17
|
+
* Test IDs:
|
|
18
|
+
* - SEL_DASH_001: Navigation Structure
|
|
19
|
+
* - SEL_DASH_002: Entity Links
|
|
20
|
+
* - SEL_DASH_003: Navigation Sections (skipped - requires customSidebarSections which replaces default nav)
|
|
21
|
+
*
|
|
22
|
+
* NOTE: Entity links are dynamic based on permissions.
|
|
23
|
+
* Section selectors require knowing the exact section IDs from theme config.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { DashboardPOM } from '../../../src/features/DashboardPOM'
|
|
27
|
+
import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
|
|
28
|
+
|
|
29
|
+
describe('Dashboard Navigation Selectors Validation', { tags: ['@ui-selectors', '@dashboard'] }, () => {
|
|
30
|
+
const dashboard = DashboardPOM.create()
|
|
31
|
+
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
loginAsDefaultDeveloper()
|
|
34
|
+
cy.visit('/dashboard', { timeout: 60000, failOnStatusCode: false })
|
|
35
|
+
cy.url().should('include', '/dashboard')
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
// ============================================
|
|
39
|
+
// SEL_DASH_001: NAVIGATION STRUCTURE
|
|
40
|
+
// ============================================
|
|
41
|
+
describe('SEL_DASH_001: Navigation Structure', { tags: '@SEL_DASH_001' }, () => {
|
|
42
|
+
it('should find nav main container', () => {
|
|
43
|
+
cy.get(dashboard.selectors.navMain).should('exist')
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('should find dashboard link', () => {
|
|
47
|
+
cy.get(dashboard.selectors.navDashboard).should('exist')
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
// ============================================
|
|
52
|
+
// SEL_DASH_002: ENTITY LINKS
|
|
53
|
+
// ============================================
|
|
54
|
+
describe('SEL_DASH_002: Entity Links', { tags: '@SEL_DASH_002' }, () => {
|
|
55
|
+
it('should find tasks entity link', () => {
|
|
56
|
+
cy.get(dashboard.selectors.navEntity('tasks')).should('exist')
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('should find customers entity link', () => {
|
|
60
|
+
cy.get(dashboard.selectors.navEntity('customers')).should('exist')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('should find posts entity link', () => {
|
|
64
|
+
cy.get(dashboard.selectors.navEntity('posts')).should('exist')
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it('should find pages entity link', () => {
|
|
68
|
+
cy.get(dashboard.selectors.navEntity('pages')).should('exist')
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
// ============================================
|
|
73
|
+
// SEL_DASH_003: NAVIGATION SECTIONS
|
|
74
|
+
// ============================================
|
|
75
|
+
/**
|
|
76
|
+
* SKIPPED: These tests require `customSidebarSections` in app.config.ts
|
|
77
|
+
*
|
|
78
|
+
* IMPORTANT: Enabling `customSidebarSections` REPLACES the default entity-based
|
|
79
|
+
* navigation entirely. The sidebar will only show what's defined in the sections.
|
|
80
|
+
*
|
|
81
|
+
* Requirements to enable these tests:
|
|
82
|
+
* 1. Add `customSidebarSections` array to app.config.ts
|
|
83
|
+
* 2. Add all required translation keys (navigation.{sectionId}, navigation.{itemId})
|
|
84
|
+
* 3. Update tests with the actual section/item IDs from your config
|
|
85
|
+
*
|
|
86
|
+
* Example config:
|
|
87
|
+
* ```
|
|
88
|
+
* customSidebarSections: [
|
|
89
|
+
* {
|
|
90
|
+
* id: 'content',
|
|
91
|
+
* labelKey: 'navigation.content',
|
|
92
|
+
* icon: 'FileText',
|
|
93
|
+
* order: 1,
|
|
94
|
+
* items: [
|
|
95
|
+
* { id: 'posts', labelKey: 'navigation.posts', href: '/dashboard/posts', icon: 'Newspaper' },
|
|
96
|
+
* ],
|
|
97
|
+
* },
|
|
98
|
+
* ]
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
describe('SEL_DASH_003: Navigation Sections', { tags: '@SEL_DASH_003' }, () => {
|
|
102
|
+
it.skip('should find section by ID (requires customSidebarSections in app.config.ts)', () => {
|
|
103
|
+
// cy.get(dashboard.selectors.navSection('content')).should('exist')
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it.skip('should find section label (requires customSidebarSections in app.config.ts)', () => {
|
|
107
|
+
// cy.get(dashboard.selectors.navSectionLabel('content')).should('exist')
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
it.skip('should find section item (requires customSidebarSections in app.config.ts)', () => {
|
|
111
|
+
// cy.get(dashboard.selectors.navSectionItem('content', 'posts')).should('exist')
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
})
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Dashboard Sidebar UI Selectors Validation
|
|
3
|
+
priority: medium
|
|
4
|
+
tags: [selectors, sidebar, dashboard, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, sidebar, SEL_DBAR_001, SEL_DBAR_DOC]
|
|
6
|
+
coverage: 2
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Dashboard Sidebar UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that dashboard sidebar component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Some tests are skipped due to misalignment between CORE_SELECTORS definitions and component implementations.
|
|
12
|
+
|
|
13
|
+
**IMPORTANT:** Sidebar is only visible on desktop viewports (>= 1024px) when authenticated. The component uses `createCyId()` which sometimes produces different selectors than defined in CORE_SELECTORS.
|
|
14
|
+
|
|
15
|
+
## @test SEL_DBAR_001: Sidebar Structure
|
|
16
|
+
|
|
17
|
+
### Metadata
|
|
18
|
+
- **Priority:** High
|
|
19
|
+
- **Type:** Selector Validation
|
|
20
|
+
- **Tags:** sidebar, structure, desktop
|
|
21
|
+
- **Grep:** `@ui-selectors` `@SEL_DBAR_001`
|
|
22
|
+
- **Status:** Partial - 1 passing, 3 skipped
|
|
23
|
+
|
|
24
|
+
```gherkin:en
|
|
25
|
+
Scenario: Dashboard sidebar has required structure selectors
|
|
26
|
+
|
|
27
|
+
Given I am logged in as a valid user
|
|
28
|
+
And I am viewing the dashboard on desktop viewport
|
|
29
|
+
Then I should find the sidebar main container
|
|
30
|
+
And the sidebar header should exist (skipped - selector mismatch)
|
|
31
|
+
And the sidebar content should exist (skipped - not implemented)
|
|
32
|
+
And the sidebar footer should exist (skipped - not implemented)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```gherkin:es
|
|
36
|
+
Scenario: Sidebar del dashboard tiene selectores de estructura requeridos
|
|
37
|
+
|
|
38
|
+
Given estoy logueado como usuario valido
|
|
39
|
+
And estoy viendo el dashboard en viewport desktop
|
|
40
|
+
Then deberia encontrar el contenedor principal del sidebar
|
|
41
|
+
And deberia existir el header del sidebar (skipped - selectores desalineados)
|
|
42
|
+
And deberia existir el contenido del sidebar (skipped - no implementado)
|
|
43
|
+
And deberia existir el footer del sidebar (skipped - no implementado)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Expected Results
|
|
47
|
+
- `sidebar-main` selector exists (WORKING)
|
|
48
|
+
- `sidebar-header` skipped - component uses `sidebar-header-section` instead
|
|
49
|
+
- `sidebar-content` skipped - not implemented in Sidebar.tsx
|
|
50
|
+
- `sidebar-footer` skipped - not implemented in Sidebar.tsx
|
|
51
|
+
|
|
52
|
+
### Notes
|
|
53
|
+
The Sidebar.tsx component uses these data-cy attributes:
|
|
54
|
+
- `sidebar-main` - Main sidebar container (aligned with CORE_SELECTORS)
|
|
55
|
+
- `sidebar-header-section` - NOT `sidebar-header`
|
|
56
|
+
- `sidebar-logo` - Logo container
|
|
57
|
+
- `sidebar-nav` - Navigation container
|
|
58
|
+
- `sidebar-nav-items` - Navigation items wrapper
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## @test SEL_DBAR_DOC: Selector Documentation
|
|
63
|
+
|
|
64
|
+
### Metadata
|
|
65
|
+
- **Priority:** Low
|
|
66
|
+
- **Type:** Documentation
|
|
67
|
+
- **Tags:** sidebar, documentation
|
|
68
|
+
- **Grep:** `@ui-selectors` `@SEL_DBAR_DOC`
|
|
69
|
+
- **Status:** Active
|
|
70
|
+
|
|
71
|
+
```gherkin:en
|
|
72
|
+
Scenario: Document all sidebar component selectors
|
|
73
|
+
|
|
74
|
+
Given the sidebar selector tests are running
|
|
75
|
+
Then the test should log all sidebar selectors
|
|
76
|
+
And document which selectors are implemented vs defined in CORE_SELECTORS
|
|
77
|
+
And document any selector/component mismatches
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```gherkin:es
|
|
81
|
+
Scenario: Documentar todos los selectores de componente sidebar
|
|
82
|
+
|
|
83
|
+
Given los tests de selectores de sidebar estan corriendo
|
|
84
|
+
Then el test deberia loguear todos los selectores de sidebar
|
|
85
|
+
And documentar que selectores estan implementados vs definidos en CORE_SELECTORS
|
|
86
|
+
And documentar cualquier desalineacion entre selectores y componentes
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Expected Results
|
|
90
|
+
- Test logs all sidebar selectors for reference
|
|
91
|
+
- Documents implemented vs not-implemented selectors
|
|
92
|
+
- Notes selector naming mismatches
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Known Issues
|
|
97
|
+
|
|
98
|
+
### Selector/Component Misalignment
|
|
99
|
+
|
|
100
|
+
| CORE_SELECTORS Path | Expected data-cy | Component Uses | Status |
|
|
101
|
+
|---------------------|-----------------|----------------|--------|
|
|
102
|
+
| `dashboard.sidebar.main` | `sidebar-main` | `sidebar-main` | ✅ Aligned |
|
|
103
|
+
| `dashboard.sidebar.header` | `sidebar-header` | `sidebar-header-section` | ⚠️ Mismatch |
|
|
104
|
+
| `dashboard.sidebar.content` | `sidebar-content` | N/A | ❌ Not implemented |
|
|
105
|
+
| `dashboard.sidebar.footer` | `sidebar-footer` | N/A | ❌ Not implemented |
|
|
106
|
+
|
|
107
|
+
### Recommendation
|
|
108
|
+
Future fix should either:
|
|
109
|
+
1. Update CORE_SELECTORS to match component (`sidebar-header-section`)
|
|
110
|
+
2. Update component to match CORE_SELECTORS (`sidebar-header`)
|
|
111
|
+
3. Add missing selectors to component (`sidebar-content`, `sidebar-footer`)
|
|
@@ -14,30 +14,35 @@
|
|
|
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_DBAR_001: Sidebar Structure
|
|
19
|
+
* - SEL_DBAR_DOC: Sidebar Selector Documentation
|
|
20
|
+
*
|
|
17
21
|
* NOTE: Sidebar is only visible on desktop viewports when authenticated.
|
|
22
|
+
* Some selectors are skipped due to misalignment between CORE_SELECTORS and component implementation.
|
|
18
23
|
*/
|
|
19
24
|
|
|
20
|
-
import { DashboardPOM } from '
|
|
21
|
-
import {
|
|
25
|
+
import { DashboardPOM } from '../../../src/features/DashboardPOM'
|
|
26
|
+
import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
|
|
22
27
|
|
|
23
|
-
describe('Dashboard Sidebar Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
28
|
+
describe('Dashboard Sidebar Selectors Validation', { tags: ['@ui-selectors', '@sidebar'] }, () => {
|
|
24
29
|
const dashboard = DashboardPOM.create()
|
|
25
30
|
|
|
26
31
|
beforeEach(() => {
|
|
27
|
-
|
|
32
|
+
loginAsDefaultDeveloper()
|
|
28
33
|
cy.visit('/dashboard', { timeout: 60000, failOnStatusCode: false })
|
|
29
34
|
cy.url().should('include', '/dashboard')
|
|
30
35
|
})
|
|
31
36
|
|
|
32
37
|
// ============================================
|
|
33
|
-
// SIDEBAR STRUCTURE
|
|
38
|
+
// SEL_DBAR_001: SIDEBAR STRUCTURE
|
|
34
39
|
// NOTE: Component uses createCyId() with different values than CORE_SELECTORS
|
|
35
40
|
// - sidebar-main: implemented correctly
|
|
36
41
|
// - sidebar-header: NOT implemented (component uses sidebar-header-section)
|
|
37
42
|
// - sidebar-content: NOT implemented
|
|
38
43
|
// - sidebar-footer: NOT implemented
|
|
39
44
|
// ============================================
|
|
40
|
-
describe('Sidebar Structure', () => {
|
|
45
|
+
describe('SEL_DBAR_001: Sidebar Structure', { tags: '@SEL_DBAR_001' }, () => {
|
|
41
46
|
it('should find sidebar main container', () => {
|
|
42
47
|
cy.get(dashboard.selectors.sidebarMain).should('exist')
|
|
43
48
|
})
|
|
@@ -57,4 +62,28 @@ describe('Dashboard Sidebar Selectors Validation', { tags: ['@ui-selectors'] },
|
|
|
57
62
|
cy.get(dashboard.selectors.sidebarFooter).should('exist')
|
|
58
63
|
})
|
|
59
64
|
})
|
|
65
|
+
|
|
66
|
+
// ============================================
|
|
67
|
+
// SEL_DBAR_DOC: DOCUMENTATION
|
|
68
|
+
// ============================================
|
|
69
|
+
describe('SEL_DBAR_DOC: Selector Documentation', { tags: '@SEL_DBAR_DOC' }, () => {
|
|
70
|
+
it('should document sidebar component selectors', () => {
|
|
71
|
+
cy.log('=== DASHBOARD SIDEBAR SELECTORS ===')
|
|
72
|
+
cy.log('')
|
|
73
|
+
cy.log('Implemented (working):')
|
|
74
|
+
cy.log('- sidebar-main: Main sidebar container')
|
|
75
|
+
cy.log('')
|
|
76
|
+
cy.log('Selector/Component Mismatch:')
|
|
77
|
+
cy.log('- sidebar-header: CORE_SELECTORS defines, component uses sidebar-header-section')
|
|
78
|
+
cy.log('')
|
|
79
|
+
cy.log('Not Implemented in Component:')
|
|
80
|
+
cy.log('- sidebar-content: No data-cy attribute in Sidebar.tsx')
|
|
81
|
+
cy.log('- sidebar-footer: No data-cy attribute in Sidebar.tsx')
|
|
82
|
+
cy.log('')
|
|
83
|
+
cy.log('Component uses createCyId("sidebar", "..."):')
|
|
84
|
+
cy.log('- sidebar-main, sidebar-header-section')
|
|
85
|
+
cy.log('- sidebar-logo, sidebar-nav, sidebar-nav-items')
|
|
86
|
+
cy.wrap(true).should('be.true')
|
|
87
|
+
})
|
|
88
|
+
})
|
|
60
89
|
})
|