@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
package/lib/selectors.ts
CHANGED
|
@@ -134,11 +134,15 @@ export const DEVTOOLS_SELECTORS = {
|
|
|
134
134
|
|
|
135
135
|
/**
|
|
136
136
|
* Complete theme selectors merging core and blocks.
|
|
137
|
+
* NOTE: devtools must be MERGED (not replaced) to keep CORE_SELECTORS.devtools
|
|
137
138
|
*/
|
|
138
139
|
export const THEME_SELECTORS = {
|
|
139
140
|
...CORE_SELECTORS,
|
|
140
141
|
blocks: BLOCK_SELECTORS,
|
|
141
|
-
devtools:
|
|
142
|
+
devtools: {
|
|
143
|
+
...CORE_SELECTORS.devtools,
|
|
144
|
+
...DEVTOOLS_SELECTORS,
|
|
145
|
+
},
|
|
142
146
|
} as const
|
|
143
147
|
|
|
144
148
|
// =============================================================================
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextsparkjs/theme-default",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.35",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./config/theme.config.ts",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"react-dom": "^19.0.0",
|
|
18
18
|
"react-markdown": "^10.1.0",
|
|
19
19
|
"zod": "^4.0.0",
|
|
20
|
-
"@nextsparkjs/core": "0.1.0-beta.
|
|
20
|
+
"@nextsparkjs/core": "0.1.0-beta.36"
|
|
21
21
|
},
|
|
22
22
|
"nextspark": {
|
|
23
23
|
"type": "theme",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/// <reference types="cypress" />
|
|
2
2
|
|
|
3
3
|
import * as allure from 'allure-cypress'
|
|
4
|
-
import { DevtoolsPOM } from '
|
|
4
|
+
import { DevtoolsPOM } from '../../../src/features/DevtoolsPOM'
|
|
5
5
|
import {
|
|
6
6
|
loginAsDefaultDeveloper,
|
|
7
7
|
loginAsDefaultSuperadmin,
|
|
8
8
|
loginAsDefaultMember,
|
|
9
9
|
CORE_USERS
|
|
10
|
-
} from '
|
|
10
|
+
} from '../../../src/session-helpers'
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* DevTools Access Control Tests
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
describe('DevTools - Access Control', {
|
|
28
|
-
tags: ['@uat', '@
|
|
28
|
+
tags: ['@uat', '@area-devtools', '@smoke', '@regression']
|
|
29
29
|
}, () => {
|
|
30
30
|
const devtools = DevtoolsPOM.create()
|
|
31
31
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="cypress" />
|
|
2
2
|
|
|
3
3
|
import * as allure from 'allure-cypress'
|
|
4
|
-
import { DevtoolsPOM } from '
|
|
5
|
-
import { loginAsDefaultDeveloper } from '
|
|
4
|
+
import { DevtoolsPOM } from '../../../src/features/DevtoolsPOM'
|
|
5
|
+
import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* DevTools Navigation Tests
|
|
@@ -18,7 +18,7 @@ import { loginAsDefaultDeveloper } from '../../src/session-helpers'
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
describe('DevTools - Navigation', {
|
|
21
|
-
tags: ['@uat', '@
|
|
21
|
+
tags: ['@uat', '@area-devtools', '@regression']
|
|
22
22
|
}, () => {
|
|
23
23
|
const devtools = DevtoolsPOM.create()
|
|
24
24
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="cypress" />
|
|
2
2
|
|
|
3
3
|
import * as allure from 'allure-cypress'
|
|
4
|
-
import { DevtoolsPOM } from '
|
|
5
|
-
import { loginAsDefaultDeveloper } from '
|
|
4
|
+
import { DevtoolsPOM } from '../../../src/features/DevtoolsPOM'
|
|
5
|
+
import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* DevTools Page Content Tests
|
|
@@ -18,7 +18,7 @@ import { loginAsDefaultDeveloper } from '../../src/session-helpers'
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
describe('DevTools - Page Content', {
|
|
21
|
-
tags: ['@uat', '@
|
|
21
|
+
tags: ['@uat', '@area-devtools', '@regression']
|
|
22
22
|
}, () => {
|
|
23
23
|
const devtools = DevtoolsPOM.create()
|
|
24
24
|
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Auth UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, auth, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, auth, SEL_AUTH_001, SEL_AUTH_002, SEL_AUTH_003, SEL_AUTH_004, SEL_AUTH_005, SEL_AUTH_006, SEL_AUTH_007]
|
|
6
|
+
coverage: 7
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Auth UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that authentication component 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_AUTH_001: Login Card Structure
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** High
|
|
17
|
+
- **Type:** Selector Validation
|
|
18
|
+
- **Tags:** login, card, structure
|
|
19
|
+
- **Grep:** `@ui-selectors` `@SEL_AUTH_001`
|
|
20
|
+
- **Status:** Active - 6 tests
|
|
21
|
+
|
|
22
|
+
```gherkin:en
|
|
23
|
+
Scenario: Login page has complete card structure
|
|
24
|
+
|
|
25
|
+
Given I navigate to the login page
|
|
26
|
+
And the login card is visible
|
|
27
|
+
Then I should find the login card element
|
|
28
|
+
And I should find the login header
|
|
29
|
+
And I should find the login footer
|
|
30
|
+
And I should find the signup link
|
|
31
|
+
And I should find the Google signin button
|
|
32
|
+
And I should find the show email button
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```gherkin:es
|
|
36
|
+
Scenario: Pagina de login tiene estructura de card completa
|
|
37
|
+
|
|
38
|
+
Given navego a la pagina de login
|
|
39
|
+
And la card de login esta visible
|
|
40
|
+
Then deberia encontrar el elemento card de login
|
|
41
|
+
And deberia encontrar el header de login
|
|
42
|
+
And deberia encontrar el footer de login
|
|
43
|
+
And deberia encontrar el link de signup
|
|
44
|
+
And deberia encontrar el boton de Google signin
|
|
45
|
+
And deberia encontrar el boton de mostrar email
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Expected Results
|
|
49
|
+
- `auth.login.card` selector exists
|
|
50
|
+
- `auth.login.header` selector exists
|
|
51
|
+
- `auth.login.footer` selector exists
|
|
52
|
+
- `auth.login.signupLink` selector exists
|
|
53
|
+
- `auth.login.googleButton` selector exists
|
|
54
|
+
- `auth.login.showEmailButton` selector exists
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## @test SEL_AUTH_002: Login Form Inputs
|
|
59
|
+
|
|
60
|
+
### Metadata
|
|
61
|
+
- **Priority:** High
|
|
62
|
+
- **Type:** Selector Validation
|
|
63
|
+
- **Tags:** login, form, inputs
|
|
64
|
+
- **Grep:** `@ui-selectors` `@SEL_AUTH_002`
|
|
65
|
+
- **Status:** Active - 11 tests
|
|
66
|
+
|
|
67
|
+
```gherkin:en
|
|
68
|
+
Scenario: Login form has all required input selectors
|
|
69
|
+
|
|
70
|
+
Given I navigate to the login page
|
|
71
|
+
And I click the show email button
|
|
72
|
+
And the login form is visible
|
|
73
|
+
Then I should find the login form element
|
|
74
|
+
And I should find the email input
|
|
75
|
+
And I should find the password input
|
|
76
|
+
And I should find the submit button
|
|
77
|
+
And I should find the forgot password link
|
|
78
|
+
And I should find the hide email button
|
|
79
|
+
And I should find the remember checkbox
|
|
80
|
+
When I click submit without filling fields
|
|
81
|
+
Then I should find the email error message
|
|
82
|
+
When I fill email and click submit
|
|
83
|
+
Then I should find the password error message
|
|
84
|
+
When I fill both fields with invalid credentials and submit
|
|
85
|
+
Then I should find the login error alert
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```gherkin:es
|
|
89
|
+
Scenario: Formulario de login tiene todos los selectores de input requeridos
|
|
90
|
+
|
|
91
|
+
Given navego a la pagina de login
|
|
92
|
+
And hago clic en el boton de mostrar email
|
|
93
|
+
And el formulario de login esta visible
|
|
94
|
+
Then deberia encontrar el elemento formulario de login
|
|
95
|
+
And deberia encontrar el input de email
|
|
96
|
+
And deberia encontrar el input de password
|
|
97
|
+
And deberia encontrar el boton de submit
|
|
98
|
+
And deberia encontrar el link de olvide password
|
|
99
|
+
And deberia encontrar el boton de ocultar email
|
|
100
|
+
And deberia encontrar el checkbox de recordar
|
|
101
|
+
When hago clic en submit sin llenar campos
|
|
102
|
+
Then deberia encontrar el mensaje de error de email
|
|
103
|
+
When lleno email y hago clic en submit
|
|
104
|
+
Then deberia encontrar el mensaje de error de password
|
|
105
|
+
When lleno ambos campos con credenciales invalidas y envio
|
|
106
|
+
Then deberia encontrar la alerta de error de login
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Expected Results
|
|
110
|
+
- `auth.login.form` selector exists
|
|
111
|
+
- `auth.login.options` selector exists
|
|
112
|
+
- `auth.login.emailInput` selector exists
|
|
113
|
+
- `auth.login.passwordInput` selector exists
|
|
114
|
+
- `auth.login.submitButton` selector exists
|
|
115
|
+
- `auth.login.forgotPasswordLink` selector exists
|
|
116
|
+
- `auth.login.hideEmailButton` selector exists
|
|
117
|
+
- `auth.login.rememberCheckbox` selector exists
|
|
118
|
+
- `auth.login.emailError` selector appears on validation failure
|
|
119
|
+
- `auth.login.passwordError` selector appears on validation failure
|
|
120
|
+
- `auth.login.error` selector appears after failed login attempt
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## @test SEL_AUTH_003: Signup Form
|
|
125
|
+
|
|
126
|
+
### Metadata
|
|
127
|
+
- **Priority:** High
|
|
128
|
+
- **Type:** Selector Validation
|
|
129
|
+
- **Tags:** signup, form, inputs
|
|
130
|
+
- **Grep:** `@ui-selectors` `@SEL_AUTH_003`
|
|
131
|
+
- **Status:** Partial - 9 passing, 1 skipped (Google button)
|
|
132
|
+
|
|
133
|
+
```gherkin:en
|
|
134
|
+
Scenario: Signup form has all required input selectors
|
|
135
|
+
|
|
136
|
+
Given I navigate to the signup page
|
|
137
|
+
And the signup form is visible
|
|
138
|
+
Then I should find the signup form element
|
|
139
|
+
And I should find the first name input
|
|
140
|
+
And I should find the last name input
|
|
141
|
+
And I should find the email input
|
|
142
|
+
And I should find the password input
|
|
143
|
+
And I should find the confirm password input
|
|
144
|
+
And I should find the submit button
|
|
145
|
+
And I should find the Google signup button
|
|
146
|
+
And I should find the login link
|
|
147
|
+
When I fill the form with an existing email and submit
|
|
148
|
+
Then I should find the signup error message
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```gherkin:es
|
|
152
|
+
Scenario: Formulario de signup tiene todos los selectores de input requeridos
|
|
153
|
+
|
|
154
|
+
Given navego a la pagina de signup
|
|
155
|
+
And el formulario de signup esta visible
|
|
156
|
+
Then deberia encontrar el elemento formulario de signup
|
|
157
|
+
And deberia encontrar el input de nombre
|
|
158
|
+
And deberia encontrar el input de apellido
|
|
159
|
+
And deberia encontrar el input de email
|
|
160
|
+
And deberia encontrar el input de password
|
|
161
|
+
And deberia encontrar el input de confirmar password
|
|
162
|
+
And deberia encontrar el boton de submit
|
|
163
|
+
And deberia encontrar el boton de Google signup
|
|
164
|
+
And deberia encontrar el link de login
|
|
165
|
+
When lleno el formulario con un email existente y envio
|
|
166
|
+
Then deberia encontrar el mensaje de error de signup
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Expected Results
|
|
170
|
+
- `auth.signup.form` selector exists
|
|
171
|
+
- `auth.signup.firstNameInput` selector exists
|
|
172
|
+
- `auth.signup.lastNameInput` selector exists
|
|
173
|
+
- `auth.signup.emailInput` selector exists
|
|
174
|
+
- `auth.signup.passwordInput` selector exists
|
|
175
|
+
- `auth.signup.confirmPasswordInput` selector exists
|
|
176
|
+
- `auth.signup.submitButton` selector exists
|
|
177
|
+
- `auth.signup.googleButton` selector exists
|
|
178
|
+
- `auth.signup.loginLink` selector exists
|
|
179
|
+
- `auth.signup.error` selector appears when email already exists
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## @test SEL_AUTH_004: Forgot Password
|
|
184
|
+
|
|
185
|
+
### Metadata
|
|
186
|
+
- **Priority:** Medium
|
|
187
|
+
- **Type:** Selector Validation
|
|
188
|
+
- **Tags:** forgot-password, form
|
|
189
|
+
- **Grep:** `@ui-selectors` `@SEL_AUTH_004`
|
|
190
|
+
- **Status:** Partial - 4 passing, 4 skipped (require states)
|
|
191
|
+
|
|
192
|
+
```gherkin:en
|
|
193
|
+
Scenario: Forgot password page has all required selectors
|
|
194
|
+
|
|
195
|
+
Given I navigate to the forgot password page
|
|
196
|
+
And the forgot password form is visible
|
|
197
|
+
Then I should find the forgot password form element
|
|
198
|
+
And I should find the email input
|
|
199
|
+
And I should find the submit button
|
|
200
|
+
And I should find the back to login link
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
```gherkin:es
|
|
204
|
+
Scenario: Pagina de olvide password tiene todos los selectores requeridos
|
|
205
|
+
|
|
206
|
+
Given navego a la pagina de olvide password
|
|
207
|
+
And el formulario de olvide password esta visible
|
|
208
|
+
Then deberia encontrar el elemento formulario de olvide password
|
|
209
|
+
And deberia encontrar el input de email
|
|
210
|
+
And deberia encontrar el boton de submit
|
|
211
|
+
And deberia encontrar el link de volver a login
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Expected Results
|
|
215
|
+
- `auth.forgotPassword.form` selector exists
|
|
216
|
+
- `auth.forgotPassword.emailInput` selector exists
|
|
217
|
+
- `auth.forgotPassword.submitButton` selector exists
|
|
218
|
+
- `auth.forgotPassword.backLink` selector exists
|
|
219
|
+
|
|
220
|
+
### Skipped Tests (require specific states)
|
|
221
|
+
- `auth.forgotPassword.success` - requires successful email submission
|
|
222
|
+
- `auth.forgotPassword.successBackLink` - requires success state
|
|
223
|
+
- `auth.forgotPassword.retryButton` - requires success state
|
|
224
|
+
- `auth.forgotPassword.error` - requires server error
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## @test SEL_AUTH_005: DevKeyring
|
|
229
|
+
|
|
230
|
+
### Metadata
|
|
231
|
+
- **Priority:** Medium
|
|
232
|
+
- **Type:** Selector Validation
|
|
233
|
+
- **Tags:** devkeyring, development
|
|
234
|
+
- **Grep:** `@ui-selectors` `@SEL_AUTH_005`
|
|
235
|
+
- **Status:** Active - 4 tests
|
|
236
|
+
|
|
237
|
+
```gherkin:en
|
|
238
|
+
Scenario: DevKeyring component has all required selectors
|
|
239
|
+
|
|
240
|
+
Given I navigate to the login page
|
|
241
|
+
And the login card is visible
|
|
242
|
+
Then I should find the devkeyring container
|
|
243
|
+
And I should find the devkeyring trigger
|
|
244
|
+
When I click the devkeyring trigger
|
|
245
|
+
Then I should find the devkeyring content
|
|
246
|
+
And I should find at least one devkeyring user option
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
```gherkin:es
|
|
250
|
+
Scenario: Componente DevKeyring tiene todos los selectores requeridos
|
|
251
|
+
|
|
252
|
+
Given navego a la pagina de login
|
|
253
|
+
And la card de login esta visible
|
|
254
|
+
Then deberia encontrar el contenedor de devkeyring
|
|
255
|
+
And deberia encontrar el trigger de devkeyring
|
|
256
|
+
When hago clic en el trigger de devkeyring
|
|
257
|
+
Then deberia encontrar el contenido de devkeyring
|
|
258
|
+
And deberia encontrar al menos una opcion de usuario de devkeyring
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Expected Results
|
|
262
|
+
- `auth.devKeyring.container` selector exists
|
|
263
|
+
- `auth.devKeyring.trigger` selector exists
|
|
264
|
+
- `auth.devKeyring.content` selector exists when opened
|
|
265
|
+
- `auth.devKeyring.user(0)` selector exists (at least one user)
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## @test SEL_AUTH_006: Reset Password
|
|
270
|
+
|
|
271
|
+
### Metadata
|
|
272
|
+
- **Priority:** Low
|
|
273
|
+
- **Type:** Selector Validation
|
|
274
|
+
- **Tags:** reset-password, form
|
|
275
|
+
- **Grep:** `@ui-selectors` `@SEL_AUTH_006`
|
|
276
|
+
- **Status:** Skipped - requires valid reset token
|
|
277
|
+
|
|
278
|
+
```gherkin:en
|
|
279
|
+
Scenario: Reset password page has all required selectors
|
|
280
|
+
|
|
281
|
+
Given I have a valid password reset token
|
|
282
|
+
And I navigate to the reset password page with the token
|
|
283
|
+
Then I should find the reset password form element
|
|
284
|
+
And I should find the password input
|
|
285
|
+
And I should find the confirm password input
|
|
286
|
+
And I should find the submit button
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
```gherkin:es
|
|
290
|
+
Scenario: Pagina de reset password tiene todos los selectores requeridos
|
|
291
|
+
|
|
292
|
+
Given tengo un token valido de reset password
|
|
293
|
+
And navego a la pagina de reset password con el token
|
|
294
|
+
Then deberia encontrar el elemento formulario de reset password
|
|
295
|
+
And deberia encontrar el input de password
|
|
296
|
+
And deberia encontrar el input de confirmar password
|
|
297
|
+
And deberia encontrar el boton de submit
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Expected Results (when token is valid)
|
|
301
|
+
- `auth.resetPassword.form` selector exists
|
|
302
|
+
- `auth.resetPassword.password` selector exists
|
|
303
|
+
- `auth.resetPassword.confirmPassword` selector exists
|
|
304
|
+
- `auth.resetPassword.submitButton` selector exists
|
|
305
|
+
- `auth.resetPassword.error` selector appears on validation failure
|
|
306
|
+
|
|
307
|
+
### Notes
|
|
308
|
+
All tests in this section are skipped because they require a valid reset token which cannot be generated in automated tests without email access.
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## @test SEL_AUTH_007: Verify Email
|
|
313
|
+
|
|
314
|
+
### Metadata
|
|
315
|
+
- **Priority:** Low
|
|
316
|
+
- **Type:** Selector Validation
|
|
317
|
+
- **Tags:** verify-email, email
|
|
318
|
+
- **Grep:** `@ui-selectors` `@SEL_AUTH_007`
|
|
319
|
+
- **Status:** Skipped - requires pending verification state
|
|
320
|
+
|
|
321
|
+
```gherkin:en
|
|
322
|
+
Scenario: Verify email page has all required selectors
|
|
323
|
+
|
|
324
|
+
Given I have just signed up and need to verify email
|
|
325
|
+
And I am on the verify email page
|
|
326
|
+
Then I should find the verify email container
|
|
327
|
+
And I should find the resend button
|
|
328
|
+
When verification is complete
|
|
329
|
+
Then I should find the success message
|
|
330
|
+
When verification fails
|
|
331
|
+
Then I should find the error message
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
```gherkin:es
|
|
335
|
+
Scenario: Pagina de verificar email tiene todos los selectores requeridos
|
|
336
|
+
|
|
337
|
+
Given acabo de registrarme y necesito verificar email
|
|
338
|
+
And estoy en la pagina de verificar email
|
|
339
|
+
Then deberia encontrar el contenedor de verificar email
|
|
340
|
+
And deberia encontrar el boton de reenviar
|
|
341
|
+
When la verificacion se completa
|
|
342
|
+
Then deberia encontrar el mensaje de exito
|
|
343
|
+
When la verificacion falla
|
|
344
|
+
Then deberia encontrar el mensaje de error
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Expected Results (when in verification state)
|
|
348
|
+
- `auth.verifyEmail.container` selector exists
|
|
349
|
+
- `auth.verifyEmail.resendButton` selector exists
|
|
350
|
+
- `auth.verifyEmail.success` selector appears on successful verification
|
|
351
|
+
- `auth.verifyEmail.error` selector appears on verification failure
|
|
352
|
+
|
|
353
|
+
### Notes
|
|
354
|
+
All tests in this section are skipped because they require a pending email verification state which cannot be reliably set up in automated tests.
|
|
@@ -13,20 +13,28 @@
|
|
|
13
13
|
* - Navigate to auth pages (NO login required - public pages)
|
|
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_AUTH_001: Login Card Structure
|
|
19
|
+
* - SEL_AUTH_002: Login Form Inputs
|
|
20
|
+
* - SEL_AUTH_003: Signup Form
|
|
21
|
+
* - SEL_AUTH_004: Forgot Password
|
|
22
|
+
* - SEL_AUTH_005: DevKeyring
|
|
23
|
+
* - SEL_AUTH_006: Reset Password (skipped - requires token)
|
|
24
|
+
* - SEL_AUTH_007: Verify Email (skipped - requires state)
|
|
16
25
|
*/
|
|
17
26
|
|
|
18
|
-
import { AuthPOM } from '
|
|
27
|
+
import { AuthPOM } from '../../../src/core/AuthPOM'
|
|
19
28
|
|
|
20
|
-
describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
29
|
+
describe('Auth Selectors Validation', { tags: ['@ui-selectors', '@auth'] }, () => {
|
|
21
30
|
const auth = AuthPOM.create()
|
|
22
31
|
|
|
23
32
|
// ============================================
|
|
24
|
-
// LOGIN
|
|
33
|
+
// SEL_AUTH_001: LOGIN CARD STRUCTURE
|
|
25
34
|
// ============================================
|
|
26
|
-
describe('Login
|
|
35
|
+
describe('SEL_AUTH_001: Login Card Structure', { tags: '@SEL_AUTH_001' }, () => {
|
|
27
36
|
beforeEach(() => {
|
|
28
37
|
auth.visitLogin()
|
|
29
|
-
// Wait for card to be visible (form may not be visible by default)
|
|
30
38
|
cy.get(auth.selectors.loginCard, { timeout: 10000 }).should('be.visible')
|
|
31
39
|
})
|
|
32
40
|
|
|
@@ -54,16 +62,17 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
54
62
|
cy.get(auth.selectors.loginShowEmail).should('exist')
|
|
55
63
|
})
|
|
56
64
|
|
|
57
|
-
// Note: Invite banner only shows when invited
|
|
58
65
|
it.skip('should find invite banner (requires invite token)', () => {
|
|
59
66
|
cy.get(auth.selectors.loginInviteBanner).should('exist')
|
|
60
67
|
})
|
|
61
68
|
})
|
|
62
69
|
|
|
63
|
-
|
|
70
|
+
// ============================================
|
|
71
|
+
// SEL_AUTH_002: LOGIN FORM INPUTS
|
|
72
|
+
// ============================================
|
|
73
|
+
describe('SEL_AUTH_002: Login Form Inputs', { tags: '@SEL_AUTH_002' }, () => {
|
|
64
74
|
beforeEach(() => {
|
|
65
75
|
auth.visitLogin()
|
|
66
|
-
// Wait for card and click show email to reveal form
|
|
67
76
|
cy.get(auth.selectors.loginCard, { timeout: 10000 }).should('be.visible')
|
|
68
77
|
cy.get(auth.selectors.loginShowEmail).click()
|
|
69
78
|
cy.get(auth.selectors.loginForm, { timeout: 5000 }).should('be.visible')
|
|
@@ -101,7 +110,6 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
101
110
|
cy.get(auth.selectors.loginRememberCheckbox).should('exist')
|
|
102
111
|
})
|
|
103
112
|
|
|
104
|
-
// Note: Error selectors only appear when there's an error
|
|
105
113
|
it('should find email error when validation fails', () => {
|
|
106
114
|
cy.get(auth.selectors.loginSubmit).click()
|
|
107
115
|
cy.get(auth.selectors.loginEmailError).should('exist')
|
|
@@ -122,9 +130,9 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
122
130
|
})
|
|
123
131
|
|
|
124
132
|
// ============================================
|
|
125
|
-
// SIGNUP
|
|
133
|
+
// SEL_AUTH_003: SIGNUP FORM
|
|
126
134
|
// ============================================
|
|
127
|
-
describe('Signup
|
|
135
|
+
describe('SEL_AUTH_003: Signup Form', { tags: '@SEL_AUTH_003' }, () => {
|
|
128
136
|
beforeEach(() => {
|
|
129
137
|
auth.visitSignup()
|
|
130
138
|
auth.waitForSignupForm()
|
|
@@ -158,8 +166,7 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
158
166
|
cy.get(auth.selectors.signupSubmit).should('exist')
|
|
159
167
|
})
|
|
160
168
|
|
|
161
|
-
|
|
162
|
-
it.skip('should find Google signup button (not implemented)', () => {
|
|
169
|
+
it('should find Google signup button', () => {
|
|
163
170
|
cy.get(auth.selectors.signupGoogle).should('exist')
|
|
164
171
|
})
|
|
165
172
|
|
|
@@ -167,21 +174,28 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
167
174
|
cy.get(auth.selectors.signupLoginLink).should('exist')
|
|
168
175
|
})
|
|
169
176
|
|
|
170
|
-
// Note: Invite banner only shows when invited
|
|
171
177
|
it.skip('should find invite banner (requires invite token)', () => {
|
|
172
178
|
cy.get(auth.selectors.signupInviteBanner).should('exist')
|
|
173
179
|
})
|
|
174
180
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
181
|
+
it('should find error message when email already exists', () => {
|
|
182
|
+
const existingEmail = Cypress.env('DEVELOPER_EMAIL') || 'developer@nextspark.dev'
|
|
183
|
+
|
|
184
|
+
cy.get(auth.selectors.signupFirstName).type('Test')
|
|
185
|
+
cy.get(auth.selectors.signupLastName).type('User')
|
|
186
|
+
cy.get(auth.selectors.signupEmail).type(existingEmail)
|
|
187
|
+
cy.get(auth.selectors.signupPassword).type('Test1234!')
|
|
188
|
+
cy.get(auth.selectors.signupConfirmPassword).type('Test1234!')
|
|
189
|
+
cy.get('[data-cy="signup-terms-checkbox"]').click()
|
|
190
|
+
cy.get(auth.selectors.signupSubmit).click()
|
|
191
|
+
cy.get(auth.selectors.signupError, { timeout: 10000 }).should('exist')
|
|
178
192
|
})
|
|
179
193
|
})
|
|
180
194
|
|
|
181
195
|
// ============================================
|
|
182
|
-
// FORGOT PASSWORD
|
|
196
|
+
// SEL_AUTH_004: FORGOT PASSWORD
|
|
183
197
|
// ============================================
|
|
184
|
-
describe('Forgot Password
|
|
198
|
+
describe('SEL_AUTH_004: Forgot Password', { tags: '@SEL_AUTH_004' }, () => {
|
|
185
199
|
beforeEach(() => {
|
|
186
200
|
auth.visitForgotPassword()
|
|
187
201
|
cy.get(auth.selectors.forgotPasswordForm, { timeout: 10000 }).should('be.visible')
|
|
@@ -203,34 +217,29 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
203
217
|
cy.get(auth.selectors.forgotPasswordBack).should('exist')
|
|
204
218
|
})
|
|
205
219
|
|
|
206
|
-
// Note: Success message only appears after successful submission
|
|
207
220
|
it.skip('should find success message (requires successful submission)', () => {
|
|
208
221
|
cy.get(auth.selectors.forgotPasswordSuccess).should('exist')
|
|
209
222
|
})
|
|
210
223
|
|
|
211
|
-
// Note: Success back link only appears in success state
|
|
212
224
|
it.skip('should find success back link (requires success state)', () => {
|
|
213
225
|
cy.get(auth.selectors.forgotPasswordSuccessBack).should('exist')
|
|
214
226
|
})
|
|
215
227
|
|
|
216
|
-
// Note: Retry button only appears in success state
|
|
217
228
|
it.skip('should find retry button (requires success state)', () => {
|
|
218
229
|
cy.get(auth.selectors.forgotPasswordRetry).should('exist')
|
|
219
230
|
})
|
|
220
231
|
|
|
221
|
-
// Note: Error only appears on server error response
|
|
222
232
|
it.skip('should find error message (requires server error)', () => {
|
|
223
233
|
cy.get(auth.selectors.forgotPasswordError).should('exist')
|
|
224
234
|
})
|
|
225
235
|
})
|
|
226
236
|
|
|
227
237
|
// ============================================
|
|
228
|
-
//
|
|
238
|
+
// SEL_AUTH_005: DEVKEYRING
|
|
229
239
|
// ============================================
|
|
230
|
-
describe('DevKeyring
|
|
240
|
+
describe('SEL_AUTH_005: DevKeyring', { tags: '@SEL_AUTH_005' }, () => {
|
|
231
241
|
beforeEach(() => {
|
|
232
242
|
auth.visitLogin()
|
|
233
|
-
// Wait for login card (not form - form may not be visible by default)
|
|
234
243
|
cy.get(auth.selectors.loginCard, { timeout: 10000 }).should('be.visible')
|
|
235
244
|
})
|
|
236
245
|
|
|
@@ -249,19 +258,15 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
249
258
|
|
|
250
259
|
it('should find devkeyring user options', () => {
|
|
251
260
|
auth.openDevKeyring()
|
|
252
|
-
// Test first user option (index 0)
|
|
253
261
|
cy.get(auth.selectors.devKeyringUser(0)).should('exist')
|
|
254
262
|
})
|
|
255
263
|
})
|
|
256
264
|
|
|
257
265
|
// ============================================
|
|
258
|
-
// RESET PASSWORD
|
|
259
|
-
// Requires valid token from email
|
|
266
|
+
// SEL_AUTH_006: RESET PASSWORD (skipped - requires token)
|
|
260
267
|
// ============================================
|
|
261
|
-
describe('Reset Password
|
|
268
|
+
describe('SEL_AUTH_006: Reset Password', { tags: '@SEL_AUTH_006' }, () => {
|
|
262
269
|
it.skip('should find reset password form (requires valid token)', () => {
|
|
263
|
-
// These tests are skipped because they require a valid reset token
|
|
264
|
-
// To test: auth.visitResetPassword('valid-token')
|
|
265
270
|
cy.get(auth.selectors.resetPasswordForm).should('exist')
|
|
266
271
|
})
|
|
267
272
|
|
|
@@ -283,10 +288,9 @@ describe('Auth Selectors Validation', { tags: ['@ui-selectors'] }, () => {
|
|
|
283
288
|
})
|
|
284
289
|
|
|
285
290
|
// ============================================
|
|
286
|
-
// VERIFY EMAIL
|
|
287
|
-
// Requires pending verification state
|
|
291
|
+
// SEL_AUTH_007: VERIFY EMAIL (skipped - requires state)
|
|
288
292
|
// ============================================
|
|
289
|
-
describe('Verify Email
|
|
293
|
+
describe('SEL_AUTH_007: Verify Email', { tags: '@SEL_AUTH_007' }, () => {
|
|
290
294
|
it.skip('should find verify email container (requires pending verification)', () => {
|
|
291
295
|
cy.get(auth.selectors.verifyEmailContainer).should('exist')
|
|
292
296
|
})
|