@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.
- 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,276 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Billing UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, billing, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, billing, SEL_BILL_001, SEL_BILL_002, SEL_BILL_003, SEL_BILL_004, SEL_BILL_005, SEL_BILL_006, SEL_BILL_DOC]
|
|
6
|
+
coverage: 7
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Billing UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that billing component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Most tests are skipped due to permission requirements (OWNER role only) or specific state requirements (paid subscription, downgrade flow).
|
|
12
|
+
|
|
13
|
+
**IMPORTANT:** Billing page requires `settings.billing` permission which only OWNER role has. See also: `settings-billing.cy.ts` for additional billing page selectors.
|
|
14
|
+
|
|
15
|
+
## @test SEL_BILL_001: Billing Page Structure
|
|
16
|
+
|
|
17
|
+
### Metadata
|
|
18
|
+
- **Priority:** High
|
|
19
|
+
- **Type:** Selector Validation
|
|
20
|
+
- **Tags:** billing, page, structure
|
|
21
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_001`
|
|
22
|
+
- **Status:** Skipped - requires OWNER permission
|
|
23
|
+
|
|
24
|
+
```gherkin:en
|
|
25
|
+
Scenario: Billing page has complete structure
|
|
26
|
+
|
|
27
|
+
Given I am logged in as OWNER
|
|
28
|
+
And I navigate to the billing settings page
|
|
29
|
+
Then I should find the billing main container
|
|
30
|
+
And I should find the billing header
|
|
31
|
+
And I should find the upgrade plan button
|
|
32
|
+
And I should find the add payment button
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```gherkin:es
|
|
36
|
+
Scenario: Pagina de billing tiene estructura completa
|
|
37
|
+
|
|
38
|
+
Given estoy logueado como OWNER
|
|
39
|
+
And navego a la pagina de configuracion de billing
|
|
40
|
+
Then deberia encontrar el contenedor principal de billing
|
|
41
|
+
And deberia encontrar el header de billing
|
|
42
|
+
And deberia encontrar el boton de upgrade plan
|
|
43
|
+
And deberia encontrar el boton de agregar pago
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Expected Results
|
|
47
|
+
- `billing-main` selector exists
|
|
48
|
+
- `billing-header` selector exists
|
|
49
|
+
- `billing-upgrade-plan` selector exists
|
|
50
|
+
- `billing-add-payment` selector exists
|
|
51
|
+
|
|
52
|
+
### Notes
|
|
53
|
+
All tests skipped because billing page requires `settings.billing` permission which only OWNER role has.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## @test SEL_BILL_002: Invoices Section
|
|
58
|
+
|
|
59
|
+
### Metadata
|
|
60
|
+
- **Priority:** High
|
|
61
|
+
- **Type:** Selector Validation
|
|
62
|
+
- **Tags:** billing, invoices, table
|
|
63
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_002`
|
|
64
|
+
- **Status:** Skipped - requires OWNER permission
|
|
65
|
+
|
|
66
|
+
```gherkin:en
|
|
67
|
+
Scenario: Billing page has invoices section
|
|
68
|
+
|
|
69
|
+
Given I am logged in as OWNER
|
|
70
|
+
And I navigate to the billing settings page
|
|
71
|
+
Then I should find the invoices table
|
|
72
|
+
And I should find invoice rows (when invoices exist)
|
|
73
|
+
And I should find load more button (when many invoices)
|
|
74
|
+
And I should find invoice status badges
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```gherkin:es
|
|
78
|
+
Scenario: Pagina de billing tiene seccion de facturas
|
|
79
|
+
|
|
80
|
+
Given estoy logueado como OWNER
|
|
81
|
+
And navego a la pagina de configuracion de billing
|
|
82
|
+
Then deberia encontrar la tabla de facturas
|
|
83
|
+
And deberia encontrar filas de facturas (cuando existen)
|
|
84
|
+
And deberia encontrar boton cargar mas (cuando hay muchas)
|
|
85
|
+
And deberia encontrar badges de estado de factura
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Expected Results
|
|
89
|
+
- `invoices-table` selector exists
|
|
90
|
+
- `invoices-row` selector exists (when invoices present)
|
|
91
|
+
- `invoices-load-more` selector exists (when more invoices available)
|
|
92
|
+
- `invoice-status-badge` selector exists (when invoices present)
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## @test SEL_BILL_003: Usage Display
|
|
97
|
+
|
|
98
|
+
### Metadata
|
|
99
|
+
- **Priority:** Medium
|
|
100
|
+
- **Type:** Selector Validation
|
|
101
|
+
- **Tags:** billing, usage, limits
|
|
102
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_003`
|
|
103
|
+
- **Status:** Skipped - requires OWNER permission
|
|
104
|
+
|
|
105
|
+
```gherkin:en
|
|
106
|
+
Scenario: Billing page displays usage information
|
|
107
|
+
|
|
108
|
+
Given I am logged in as OWNER
|
|
109
|
+
And I navigate to the billing settings page
|
|
110
|
+
Then I should see usage numbers in format "X / Y"
|
|
111
|
+
And I should find the usage dashboard component
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```gherkin:es
|
|
115
|
+
Scenario: Pagina de billing muestra informacion de uso
|
|
116
|
+
|
|
117
|
+
Given estoy logueado como OWNER
|
|
118
|
+
And navego a la pagina de configuracion de billing
|
|
119
|
+
Then deberia ver numeros de uso en formato "X / Y"
|
|
120
|
+
And deberia encontrar el componente usage dashboard
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Expected Results
|
|
124
|
+
- Usage numbers displayed in format `N / M`
|
|
125
|
+
- `usage-dashboard` selector exists
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## @test SEL_BILL_004: ManageBillingButton
|
|
130
|
+
|
|
131
|
+
### Metadata
|
|
132
|
+
- **Priority:** Low
|
|
133
|
+
- **Type:** Selector Validation
|
|
134
|
+
- **Tags:** billing, manage, stripe
|
|
135
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_004`
|
|
136
|
+
- **Status:** Skipped - requires paid Stripe subscription
|
|
137
|
+
|
|
138
|
+
```gherkin:en
|
|
139
|
+
Scenario: Billing page has manage billing button for paid users
|
|
140
|
+
|
|
141
|
+
Given I am logged in as a user with paid subscription
|
|
142
|
+
And the subscription has an external Stripe customer ID
|
|
143
|
+
And I navigate to the billing settings page
|
|
144
|
+
Then I should find the manage billing button
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```gherkin:es
|
|
148
|
+
Scenario: Pagina de billing tiene boton de gestionar billing para usuarios de pago
|
|
149
|
+
|
|
150
|
+
Given estoy logueado como usuario con suscripcion de pago
|
|
151
|
+
And la suscripcion tiene un ID de cliente externo de Stripe
|
|
152
|
+
And navego a la pagina de configuracion de billing
|
|
153
|
+
Then deberia encontrar el boton de gestionar billing
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Expected Results
|
|
157
|
+
- `manage-billing-button` selector exists
|
|
158
|
+
|
|
159
|
+
### Notes
|
|
160
|
+
ManageBillingButton only renders when `subscription.externalCustomerId` exists (Stripe customer).
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## @test SEL_BILL_005: SubscriptionStatus
|
|
165
|
+
|
|
166
|
+
### Metadata
|
|
167
|
+
- **Priority:** Low
|
|
168
|
+
- **Type:** Selector Validation
|
|
169
|
+
- **Tags:** billing, subscription, status
|
|
170
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_005`
|
|
171
|
+
- **Status:** Skipped - requires active subscription
|
|
172
|
+
|
|
173
|
+
```gherkin:en
|
|
174
|
+
Scenario: Billing page shows subscription status for subscribers
|
|
175
|
+
|
|
176
|
+
Given I am logged in as a user with active subscription
|
|
177
|
+
And I navigate to the billing settings page
|
|
178
|
+
Then I should find the subscription status container
|
|
179
|
+
And I should find the subscription plan name
|
|
180
|
+
And I should find the subscription status badge
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
```gherkin:es
|
|
184
|
+
Scenario: Pagina de billing muestra estado de suscripcion para suscriptores
|
|
185
|
+
|
|
186
|
+
Given estoy logueado como usuario con suscripcion activa
|
|
187
|
+
And navego a la pagina de configuracion de billing
|
|
188
|
+
Then deberia encontrar el contenedor de estado de suscripcion
|
|
189
|
+
And deberia encontrar el nombre del plan de suscripcion
|
|
190
|
+
And deberia encontrar el badge de estado de suscripcion
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Expected Results
|
|
194
|
+
- `subscription-status` selector exists
|
|
195
|
+
- `subscription-status-plan` selector exists
|
|
196
|
+
- `subscription-status-badge` selector exists
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## @test SEL_BILL_006: DowngradeWarning
|
|
201
|
+
|
|
202
|
+
### Metadata
|
|
203
|
+
- **Priority:** Low
|
|
204
|
+
- **Type:** Selector Validation
|
|
205
|
+
- **Tags:** billing, downgrade, warning
|
|
206
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_006`
|
|
207
|
+
- **Status:** Skipped - requires downgrade flow with over-limit resources
|
|
208
|
+
|
|
209
|
+
```gherkin:en
|
|
210
|
+
Scenario: Downgrade warning appears when user has over-limit resources
|
|
211
|
+
|
|
212
|
+
Given I am attempting to downgrade my subscription
|
|
213
|
+
And I have resources that exceed the new plan limits
|
|
214
|
+
Then I should see the downgrade warning alert
|
|
215
|
+
And I should see the warning title
|
|
216
|
+
And I should see the warning description
|
|
217
|
+
And I should see the list of over-limit resources
|
|
218
|
+
And I should see the confirm downgrade button
|
|
219
|
+
And I should see the cancel button
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```gherkin:es
|
|
223
|
+
Scenario: Advertencia de downgrade aparece cuando usuario tiene recursos sobre el limite
|
|
224
|
+
|
|
225
|
+
Given estoy intentando bajar mi suscripcion
|
|
226
|
+
And tengo recursos que exceden los limites del nuevo plan
|
|
227
|
+
Then deberia ver la alerta de advertencia de downgrade
|
|
228
|
+
And deberia ver el titulo de advertencia
|
|
229
|
+
And deberia ver la descripcion de advertencia
|
|
230
|
+
And deberia ver la lista de recursos sobre el limite
|
|
231
|
+
And deberia ver el boton de confirmar downgrade
|
|
232
|
+
And deberia ver el boton de cancelar
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Expected Results
|
|
236
|
+
- `downgrade-warning` selector exists
|
|
237
|
+
- `downgrade-warning-title` selector exists
|
|
238
|
+
- `downgrade-warning-description` selector exists
|
|
239
|
+
- `downgrade-warning-list` selector exists
|
|
240
|
+
- `downgrade-limit-{slug}` selectors exist
|
|
241
|
+
- `downgrade-warning-confirm` selector exists
|
|
242
|
+
- `downgrade-warning-cancel` selector exists
|
|
243
|
+
|
|
244
|
+
### Notes
|
|
245
|
+
DowngradeWarning only renders when `overLimitResources.length > 0`.
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## @test SEL_BILL_DOC: Selector Documentation
|
|
250
|
+
|
|
251
|
+
### Metadata
|
|
252
|
+
- **Priority:** Low
|
|
253
|
+
- **Type:** Documentation
|
|
254
|
+
- **Tags:** billing, documentation
|
|
255
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_DOC`
|
|
256
|
+
- **Status:** Active
|
|
257
|
+
|
|
258
|
+
```gherkin:en
|
|
259
|
+
Scenario: Document all billing component selectors
|
|
260
|
+
|
|
261
|
+
Given the billing selector tests are running
|
|
262
|
+
Then the test should log all available billing selectors
|
|
263
|
+
And document which permissions/states are required for each
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```gherkin:es
|
|
267
|
+
Scenario: Documentar todos los selectores de componentes de billing
|
|
268
|
+
|
|
269
|
+
Given los tests de selectores de billing estan corriendo
|
|
270
|
+
Then el test deberia loguear todos los selectores de billing disponibles
|
|
271
|
+
And documentar que permisos/estados se requieren para cada uno
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Expected Results
|
|
275
|
+
- Test logs all billing selectors for reference
|
|
276
|
+
- Documents permission and state requirements
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: Billing Components
|
|
3
|
+
*
|
|
4
|
+
* This test validates that billing component selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate billing component selectors (ManageBillingButton, SubscriptionStatus, etc.)
|
|
9
|
+
* - Document selectors from CORE_SELECTORS.settings.billing
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Billing page requires 'settings.billing' permission (OWNER role only)
|
|
14
|
+
* - Most tests are skipped due to permission/state requirements
|
|
15
|
+
* - Fast execution (< 30 seconds per describe block)
|
|
16
|
+
*
|
|
17
|
+
* Test IDs:
|
|
18
|
+
* - SEL_BILL_001: Billing Page Structure (skipped - requires OWNER permission)
|
|
19
|
+
* - SEL_BILL_002: Invoices Section (skipped - requires OWNER permission)
|
|
20
|
+
* - SEL_BILL_003: Usage Display (skipped - requires OWNER permission)
|
|
21
|
+
* - SEL_BILL_004: ManageBillingButton (skipped - requires paid subscription)
|
|
22
|
+
* - SEL_BILL_005: SubscriptionStatus (skipped - requires active subscription)
|
|
23
|
+
* - SEL_BILL_006: DowngradeWarning (skipped - requires downgrade flow)
|
|
24
|
+
*
|
|
25
|
+
* IMPORTANT: Billing page requires 'settings.billing' permission which only OWNER role has.
|
|
26
|
+
* Users without this permission are redirected to /dashboard/settings.
|
|
27
|
+
* See also: settings-billing.cy.ts for additional billing selectors.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
describe('Billing Selectors Validation', { tags: ['@ui-selectors', '@billing'] }, () => {
|
|
31
|
+
// ============================================
|
|
32
|
+
// SEL_BILL_001: BILLING PAGE STRUCTURE
|
|
33
|
+
// ============================================
|
|
34
|
+
describe('SEL_BILL_001: Billing Page Structure', { tags: '@SEL_BILL_001' }, () => {
|
|
35
|
+
// NOTE: Billing page requires 'settings.billing' permission (OWNER role only)
|
|
36
|
+
// Default test users may not have this permission
|
|
37
|
+
|
|
38
|
+
it.skip('should find billing main container (requires OWNER permission)', () => {
|
|
39
|
+
cy.get('[data-cy="billing-main"]').should('exist')
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it.skip('should find billing header (requires OWNER permission)', () => {
|
|
43
|
+
cy.get('[data-cy="billing-header"]').should('exist')
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it.skip('should find upgrade plan button (requires OWNER permission)', () => {
|
|
47
|
+
cy.get('[data-cy="billing-upgrade-plan"]').should('exist')
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it.skip('should find add payment button (requires OWNER permission)', () => {
|
|
51
|
+
cy.get('[data-cy="billing-add-payment"]').should('exist')
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
// ============================================
|
|
56
|
+
// SEL_BILL_002: INVOICES SECTION
|
|
57
|
+
// ============================================
|
|
58
|
+
describe('SEL_BILL_002: Invoices Section', { tags: '@SEL_BILL_002' }, () => {
|
|
59
|
+
it.skip('should find invoices table (requires OWNER permission)', () => {
|
|
60
|
+
cy.get('[data-cy="invoices-table"]').should('exist')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it.skip('should find invoices row (requires invoices)', () => {
|
|
64
|
+
cy.get('[data-cy="invoices-row"]').should('exist')
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it.skip('should find load more button (requires many invoices)', () => {
|
|
68
|
+
cy.get('[data-cy="invoices-load-more"]').should('exist')
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it.skip('should find invoice status badge (requires invoices)', () => {
|
|
72
|
+
cy.get('[data-cy="invoice-status-badge"]').should('exist')
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
// ============================================
|
|
77
|
+
// SEL_BILL_003: USAGE DISPLAY
|
|
78
|
+
// ============================================
|
|
79
|
+
describe('SEL_BILL_003: Usage Display', { tags: '@SEL_BILL_003' }, () => {
|
|
80
|
+
it.skip('should display usage numbers (requires OWNER permission)', () => {
|
|
81
|
+
cy.contains(/\d+\s*\/\s*\d+/).should('be.visible')
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it.skip('should find usage dashboard (requires UsageDashboard component)', () => {
|
|
85
|
+
cy.get('[data-cy="usage-dashboard"]').should('exist')
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
// ============================================
|
|
90
|
+
// SEL_BILL_004: MANAGE BILLING BUTTON
|
|
91
|
+
// ============================================
|
|
92
|
+
describe('SEL_BILL_004: ManageBillingButton', { tags: '@SEL_BILL_004' }, () => {
|
|
93
|
+
// ManageBillingButton only renders when subscription has externalCustomerId
|
|
94
|
+
|
|
95
|
+
it.skip('should find manage billing button (requires paid subscription)', () => {
|
|
96
|
+
cy.get('[data-cy="manage-billing-button"]').should('exist')
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
// ============================================
|
|
101
|
+
// SEL_BILL_005: SUBSCRIPTION STATUS
|
|
102
|
+
// ============================================
|
|
103
|
+
describe('SEL_BILL_005: SubscriptionStatus', { tags: '@SEL_BILL_005' }, () => {
|
|
104
|
+
// SubscriptionStatus requires an active subscription
|
|
105
|
+
|
|
106
|
+
it.skip('should find subscription status container (requires subscription)', () => {
|
|
107
|
+
cy.get('[data-cy="subscription-status"]').should('exist')
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
it.skip('should find subscription plan name (requires subscription)', () => {
|
|
111
|
+
cy.get('[data-cy="subscription-status-plan"]').should('exist')
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it.skip('should find subscription status badge (requires subscription)', () => {
|
|
115
|
+
cy.get('[data-cy="subscription-status-badge"]').should('exist')
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
// ============================================
|
|
120
|
+
// SEL_BILL_006: DOWNGRADE WARNING
|
|
121
|
+
// ============================================
|
|
122
|
+
describe('SEL_BILL_006: DowngradeWarning', { tags: '@SEL_BILL_006' }, () => {
|
|
123
|
+
// DowngradeWarning only renders when overLimitResources.length > 0
|
|
124
|
+
|
|
125
|
+
it.skip('should find downgrade warning (requires downgrade flow)', () => {
|
|
126
|
+
cy.get('[data-cy="downgrade-warning"]').should('exist')
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
it.skip('should find downgrade warning title (requires downgrade flow)', () => {
|
|
130
|
+
cy.get('[data-cy="downgrade-warning-title"]').should('exist')
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
it.skip('should find downgrade warning description (requires downgrade flow)', () => {
|
|
134
|
+
cy.get('[data-cy="downgrade-warning-description"]').should('exist')
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it.skip('should find downgrade warning list (requires downgrade flow)', () => {
|
|
138
|
+
cy.get('[data-cy="downgrade-warning-list"]').should('exist')
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
it.skip('should find downgrade confirm button (requires downgrade flow)', () => {
|
|
142
|
+
cy.get('[data-cy="downgrade-warning-confirm"]').should('exist')
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
it.skip('should find downgrade cancel button (requires downgrade flow)', () => {
|
|
146
|
+
cy.get('[data-cy="downgrade-warning-cancel"]').should('exist')
|
|
147
|
+
})
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
// ============================================
|
|
151
|
+
// DOCUMENTATION TEST
|
|
152
|
+
// ============================================
|
|
153
|
+
describe('SEL_BILL_DOC: Selector Documentation', { tags: '@SEL_BILL_DOC' }, () => {
|
|
154
|
+
it('should document billing component selectors', () => {
|
|
155
|
+
cy.log('=== BILLING COMPONENT SELECTORS ===')
|
|
156
|
+
cy.log('')
|
|
157
|
+
cy.log('Billing Page (requires OWNER permission):')
|
|
158
|
+
cy.log('- billing-main, billing-header')
|
|
159
|
+
cy.log('- billing-upgrade-plan, billing-add-payment')
|
|
160
|
+
cy.log('- invoices-table, invoices-row, invoices-load-more')
|
|
161
|
+
cy.log('')
|
|
162
|
+
cy.log('ManageBillingButton (requires paid subscription):')
|
|
163
|
+
cy.log('- manage-billing-button')
|
|
164
|
+
cy.log('')
|
|
165
|
+
cy.log('SubscriptionStatus (requires active subscription):')
|
|
166
|
+
cy.log('- subscription-status, subscription-status-plan')
|
|
167
|
+
cy.log('- subscription-status-badge, subscription-status-period')
|
|
168
|
+
cy.log('- subscription-status-upgrade, subscription-manage-billing')
|
|
169
|
+
cy.log('')
|
|
170
|
+
cy.log('DowngradeWarning (requires downgrade flow):')
|
|
171
|
+
cy.log('- downgrade-warning, downgrade-warning-title')
|
|
172
|
+
cy.log('- downgrade-warning-description, downgrade-warning-list')
|
|
173
|
+
cy.log('- downgrade-limit-{slug}, downgrade-warning-policy')
|
|
174
|
+
cy.log('- downgrade-warning-confirm, downgrade-warning-cancel')
|
|
175
|
+
cy.log('')
|
|
176
|
+
cy.log('UsageDashboard:')
|
|
177
|
+
cy.log('- usage-dashboard, usage-dashboard-limits')
|
|
178
|
+
cy.log('- usage-dashboard-limit-{slug}, usage-bar-{slug}')
|
|
179
|
+
cy.wrap(true).should('be.true')
|
|
180
|
+
})
|
|
181
|
+
})
|
|
182
|
+
})
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Dashboard Mobile UI Selectors Validation
|
|
3
|
+
priority: medium
|
|
4
|
+
tags: [selectors, mobile, dashboard, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, mobile, SEL_DMOB_DOC, SEL_DMOB_001, SEL_DMOB_002, SEL_DMOB_003, SEL_DMOB_004]
|
|
6
|
+
coverage: 5
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Dashboard Mobile UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that dashboard mobile component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. All tests are skipped because they require mobile viewport (< 1024px).
|
|
12
|
+
|
|
13
|
+
**IMPORTANT:** Mobile selectors are ONLY visible on small viewports. Desktop tests will not find these elements. To test: add `cy.viewport('iphone-x')` or run with `--config viewportWidth=375,viewportHeight=812`.
|
|
14
|
+
|
|
15
|
+
## @test SEL_DMOB_DOC: Mobile Testing Documentation
|
|
16
|
+
|
|
17
|
+
### Metadata
|
|
18
|
+
- **Priority:** Low
|
|
19
|
+
- **Type:** Documentation
|
|
20
|
+
- **Tags:** mobile, documentation
|
|
21
|
+
- **Grep:** `@ui-selectors` `@SEL_DMOB_DOC`
|
|
22
|
+
- **Status:** Active
|
|
23
|
+
|
|
24
|
+
```gherkin:en
|
|
25
|
+
Scenario: Document all dashboard mobile selectors
|
|
26
|
+
|
|
27
|
+
Given the mobile selector tests are running
|
|
28
|
+
Then the test should log all mobile selectors
|
|
29
|
+
And document viewport requirements for each section
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```gherkin:es
|
|
33
|
+
Scenario: Documentar todos los selectores mobile del dashboard
|
|
34
|
+
|
|
35
|
+
Given los tests de selectores mobile estan corriendo
|
|
36
|
+
Then el test deberia loguear todos los selectores mobile
|
|
37
|
+
And documentar los requisitos de viewport para cada seccion
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Expected Results
|
|
41
|
+
- Test logs all mobile selectors for reference
|
|
42
|
+
- Documents viewport requirements (<1024px)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## @test SEL_DMOB_001: Mobile Topbar Selectors
|
|
47
|
+
|
|
48
|
+
### Metadata
|
|
49
|
+
- **Priority:** Medium
|
|
50
|
+
- **Type:** Selector Validation
|
|
51
|
+
- **Tags:** mobile, topbar, navigation
|
|
52
|
+
- **Grep:** `@ui-selectors` `@SEL_DMOB_001`
|
|
53
|
+
- **Status:** Skipped - requires mobile viewport
|
|
54
|
+
|
|
55
|
+
```gherkin:en
|
|
56
|
+
Scenario: Mobile topbar has all required selectors
|
|
57
|
+
|
|
58
|
+
Given I am viewing the dashboard on a mobile viewport
|
|
59
|
+
And I am logged in as a valid user
|
|
60
|
+
Then I should find the mobile topbar header
|
|
61
|
+
And I should find the user profile button
|
|
62
|
+
And I should find the notifications button
|
|
63
|
+
And I should find the theme toggle button
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```gherkin:es
|
|
67
|
+
Scenario: Topbar mobile tiene todos los selectores requeridos
|
|
68
|
+
|
|
69
|
+
Given estoy viendo el dashboard en viewport mobile
|
|
70
|
+
And estoy logueado como usuario valido
|
|
71
|
+
Then deberia encontrar el header del topbar mobile
|
|
72
|
+
And deberia encontrar el boton de perfil de usuario
|
|
73
|
+
And deberia encontrar el boton de notificaciones
|
|
74
|
+
And deberia encontrar el boton de cambio de tema
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Expected Results
|
|
78
|
+
- `mobile-topbar-header` selector exists
|
|
79
|
+
- `mobile-topbar-user-profile` selector exists
|
|
80
|
+
- `mobile-topbar-notifications` selector exists
|
|
81
|
+
- `mobile-topbar-theme-toggle` selector exists
|
|
82
|
+
|
|
83
|
+
### Notes
|
|
84
|
+
All selectors have `lg:hidden` CSS class - only visible on screens < 1024px.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## @test SEL_DMOB_002: Mobile Bottom Nav Selectors
|
|
89
|
+
|
|
90
|
+
### Metadata
|
|
91
|
+
- **Priority:** Medium
|
|
92
|
+
- **Type:** Selector Validation
|
|
93
|
+
- **Tags:** mobile, bottom-nav, navigation
|
|
94
|
+
- **Grep:** `@ui-selectors` `@SEL_DMOB_002`
|
|
95
|
+
- **Status:** Skipped - requires mobile viewport
|
|
96
|
+
|
|
97
|
+
```gherkin:en
|
|
98
|
+
Scenario: Mobile bottom navigation has all required selectors
|
|
99
|
+
|
|
100
|
+
Given I am viewing the dashboard on a mobile viewport
|
|
101
|
+
And I am logged in as a valid user
|
|
102
|
+
Then I should find the bottom navigation bar
|
|
103
|
+
And I should find bottom nav items for key sections
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```gherkin:es
|
|
107
|
+
Scenario: Navegacion inferior mobile tiene todos los selectores requeridos
|
|
108
|
+
|
|
109
|
+
Given estoy viendo el dashboard en viewport mobile
|
|
110
|
+
And estoy logueado como usuario valido
|
|
111
|
+
Then deberia encontrar la barra de navegacion inferior
|
|
112
|
+
And deberia encontrar items de navegacion para secciones clave
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Expected Results
|
|
116
|
+
- `mobile-bottom-nav` selector exists
|
|
117
|
+
- `mobile-bottom-nav-item-{slug}` selectors exist (dashboard, entities, create, more)
|
|
118
|
+
|
|
119
|
+
### Notes
|
|
120
|
+
Bottom nav replaces sidebar on mobile. Shows 4 main navigation items.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## @test SEL_DMOB_003: Mobile More Sheet Selectors
|
|
125
|
+
|
|
126
|
+
### Metadata
|
|
127
|
+
- **Priority:** Medium
|
|
128
|
+
- **Type:** Selector Validation
|
|
129
|
+
- **Tags:** mobile, sheet, navigation
|
|
130
|
+
- **Grep:** `@ui-selectors` `@SEL_DMOB_003`
|
|
131
|
+
- **Status:** Skipped - requires mobile viewport
|
|
132
|
+
|
|
133
|
+
```gherkin:en
|
|
134
|
+
Scenario: Mobile more sheet has all required selectors
|
|
135
|
+
|
|
136
|
+
Given I am viewing the dashboard on a mobile viewport
|
|
137
|
+
And I am logged in as a valid user
|
|
138
|
+
And I tap on the "More" button in bottom nav
|
|
139
|
+
Then I should find the more sheet content
|
|
140
|
+
And I should find more sheet items for each section
|
|
141
|
+
And I should find the superadmin link (if permitted)
|
|
142
|
+
And I should find the team switcher
|
|
143
|
+
And I should find the signout button
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```gherkin:es
|
|
147
|
+
Scenario: Sheet de mas opciones mobile tiene todos los selectores requeridos
|
|
148
|
+
|
|
149
|
+
Given estoy viendo el dashboard en viewport mobile
|
|
150
|
+
And estoy logueado como usuario valido
|
|
151
|
+
And toco el boton "Mas" en la navegacion inferior
|
|
152
|
+
Then deberia encontrar el contenido del sheet de mas opciones
|
|
153
|
+
And deberia encontrar items del sheet para cada seccion
|
|
154
|
+
And deberia encontrar el link de superadmin (si esta permitido)
|
|
155
|
+
And deberia encontrar el selector de equipo
|
|
156
|
+
And deberia encontrar el boton de cerrar sesion
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Expected Results
|
|
160
|
+
- `mobile-more-sheet-content` selector exists
|
|
161
|
+
- `mobile-more-sheet-item-{slug}` selectors exist
|
|
162
|
+
- `mobile-more-sheet-superadmin` selector exists
|
|
163
|
+
- `mobile-more-sheet-team-switcher` selector exists
|
|
164
|
+
- `mobile-more-sheet-signout` selector exists
|
|
165
|
+
|
|
166
|
+
### Notes
|
|
167
|
+
More sheet opens from bottom of screen as a sheet/drawer component.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## @test SEL_DMOB_004: Mobile Quick Create Selectors
|
|
172
|
+
|
|
173
|
+
### Metadata
|
|
174
|
+
- **Priority:** Medium
|
|
175
|
+
- **Type:** Selector Validation
|
|
176
|
+
- **Tags:** mobile, sheet, quick-create
|
|
177
|
+
- **Grep:** `@ui-selectors` `@SEL_DMOB_004`
|
|
178
|
+
- **Status:** Skipped - requires mobile viewport
|
|
179
|
+
|
|
180
|
+
```gherkin:en
|
|
181
|
+
Scenario: Mobile quick create sheet has all required selectors
|
|
182
|
+
|
|
183
|
+
Given I am viewing the dashboard on a mobile viewport
|
|
184
|
+
And I am logged in as a valid user
|
|
185
|
+
And I tap on the "Create" button in bottom nav
|
|
186
|
+
Then I should find the quick create sheet content
|
|
187
|
+
And I should find quick create items for each entity type
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```gherkin:es
|
|
191
|
+
Scenario: Sheet de creacion rapida mobile tiene todos los selectores requeridos
|
|
192
|
+
|
|
193
|
+
Given estoy viendo el dashboard en viewport mobile
|
|
194
|
+
And estoy logueado como usuario valido
|
|
195
|
+
And toco el boton "Crear" en la navegacion inferior
|
|
196
|
+
Then deberia encontrar el contenido del sheet de creacion rapida
|
|
197
|
+
And deberia encontrar items de creacion rapida para cada tipo de entidad
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Expected Results
|
|
201
|
+
- `mobile-quick-create-content` selector exists
|
|
202
|
+
- `mobile-quick-create-item-{slug}` selectors exist (tasks, customers, posts, pages, etc.)
|
|
203
|
+
|
|
204
|
+
### Notes
|
|
205
|
+
Quick create sheet shows available entity types for fast creation on mobile.
|