@nextsparkjs/theme-default 0.1.0-beta.20 → 0.1.0-beta.21
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/package.json +1 -1
- package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_docs/README.md +215 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
- package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
- package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
- package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
- package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
- package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
- package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
- package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
- package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
- package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
- package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
- package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
- package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
- package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
- package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
- package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
- package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
- package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
- package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +78 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +86 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +176 -0
- package/tests/cypress/src/entities/index.ts +14 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +245 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +362 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +500 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress.config.ts +150 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/config/role-config.test.ts +529 -0
- package/tests/jest/jest.config.ts +81 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +367 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/user-roles/role-helpers.test.ts +432 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +15 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Editor Custom Role Permissions
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [auth, custom-role, editor, permissions, security, theme]
|
|
5
|
+
grepTags: [uat, feat-auth, custom-role, editor]
|
|
6
|
+
coverage: 8
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Editor Custom Role Permissions
|
|
10
|
+
|
|
11
|
+
> Tests for Editor custom role permissions. Editor is a theme-defined custom role with view-only access to entities. Cannot create, update, or delete. Cannot access Sector7 or Dev Zone.
|
|
12
|
+
|
|
13
|
+
## @test EDITOR-PERM-001: Editor Dashboard Access
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** editor, dashboard
|
|
19
|
+
- **Grep:** `@smoke`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Editor can access dashboard
|
|
23
|
+
|
|
24
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
25
|
+
When I visit /dashboard
|
|
26
|
+
Then the dashboard container should be visible
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```gherkin:es
|
|
30
|
+
Scenario: Editor puede acceder al dashboard
|
|
31
|
+
|
|
32
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
33
|
+
When visito /dashboard
|
|
34
|
+
Then el contenedor del dashboard deberia estar visible
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Expected Results
|
|
38
|
+
- Dashboard loads correctly
|
|
39
|
+
- Limited navigation based on permissions
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## @test EDITOR-PERM-002: Editor View-Only Customer Access
|
|
44
|
+
|
|
45
|
+
### Metadata
|
|
46
|
+
- **Priority:** Critical
|
|
47
|
+
- **Type:** Smoke
|
|
48
|
+
- **Tags:** editor, customers, view-only
|
|
49
|
+
- **Grep:** `@smoke`
|
|
50
|
+
|
|
51
|
+
```gherkin:en
|
|
52
|
+
Scenario: Editor has view-only access to customers list
|
|
53
|
+
|
|
54
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
55
|
+
When I visit /customers
|
|
56
|
+
Then the entity list should be visible
|
|
57
|
+
And the create button should NOT exist
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```gherkin:es
|
|
61
|
+
Scenario: Editor tiene acceso solo lectura a lista de customers
|
|
62
|
+
|
|
63
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
64
|
+
When visito /customers
|
|
65
|
+
Then la lista de entidades deberia estar visible
|
|
66
|
+
And el boton de crear NO deberia existir
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Expected Results
|
|
70
|
+
- Can view customer list
|
|
71
|
+
- No create button
|
|
72
|
+
- Read-only experience
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## @test EDITOR-PERM-003: Editor Cannot Edit Customers
|
|
77
|
+
|
|
78
|
+
### Metadata
|
|
79
|
+
- **Priority:** High
|
|
80
|
+
- **Type:** Security
|
|
81
|
+
- **Tags:** editor, customers, no-edit
|
|
82
|
+
|
|
83
|
+
```gherkin:en
|
|
84
|
+
Scenario: Editor cannot see edit buttons on customers
|
|
85
|
+
|
|
86
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
87
|
+
When I visit /customers
|
|
88
|
+
Then the entity list should be visible
|
|
89
|
+
And edit buttons should not exist on items
|
|
90
|
+
And delete buttons should not exist on items
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```gherkin:es
|
|
94
|
+
Scenario: Editor no puede ver botones de editar en customers
|
|
95
|
+
|
|
96
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
97
|
+
When visito /customers
|
|
98
|
+
Then la lista de entidades deberia estar visible
|
|
99
|
+
And los botones de editar no deberian existir en items
|
|
100
|
+
And los botones de eliminar no deberian existir en items
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Expected Results
|
|
104
|
+
- No edit action buttons
|
|
105
|
+
- No delete action buttons
|
|
106
|
+
- Pure read-only interface
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## @test EDITOR-PERM-004: Editor Tasks Access
|
|
111
|
+
|
|
112
|
+
### Metadata
|
|
113
|
+
- **Priority:** High
|
|
114
|
+
- **Type:** Regression
|
|
115
|
+
- **Tags:** editor, tasks, read-only
|
|
116
|
+
|
|
117
|
+
```gherkin:en
|
|
118
|
+
Scenario: Editor has read-only access to tasks
|
|
119
|
+
|
|
120
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
121
|
+
When I visit /tasks
|
|
122
|
+
Then the entity list should be visible
|
|
123
|
+
And the create button should NOT exist
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```gherkin:es
|
|
127
|
+
Scenario: Editor tiene acceso solo lectura a tasks
|
|
128
|
+
|
|
129
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
130
|
+
When visito /tasks
|
|
131
|
+
Then la lista de entidades deberia estar visible
|
|
132
|
+
And el boton de crear NO deberia existir
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Expected Results
|
|
136
|
+
- Can view task list
|
|
137
|
+
- No create functionality
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## @test EDITOR-PERM-005: Editor Settings Access
|
|
142
|
+
|
|
143
|
+
### Metadata
|
|
144
|
+
- **Priority:** Normal
|
|
145
|
+
- **Type:** Regression
|
|
146
|
+
- **Tags:** editor, settings
|
|
147
|
+
|
|
148
|
+
```gherkin:en
|
|
149
|
+
Scenario: Editor has profile-only settings access
|
|
150
|
+
|
|
151
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
152
|
+
When I visit /settings
|
|
153
|
+
Then I should see profile tab or be redirected
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```gherkin:es
|
|
157
|
+
Scenario: Editor tiene acceso solo a perfil en settings
|
|
158
|
+
|
|
159
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
160
|
+
When visito /settings
|
|
161
|
+
Then deberia ver pestana de perfil o ser redirigido
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Expected Results
|
|
165
|
+
- Profile settings accessible
|
|
166
|
+
- No team settings access
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## @test EDITOR-PERM-006: Editor Cannot Access Sector7
|
|
171
|
+
|
|
172
|
+
### Metadata
|
|
173
|
+
- **Priority:** High
|
|
174
|
+
- **Type:** Security
|
|
175
|
+
- **Tags:** editor, sector7, blocked
|
|
176
|
+
|
|
177
|
+
```gherkin:en
|
|
178
|
+
Scenario: Editor is blocked from Sector7
|
|
179
|
+
|
|
180
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
181
|
+
When I attempt to visit /sector7
|
|
182
|
+
Then I should be redirected away from /sector7
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```gherkin:es
|
|
186
|
+
Scenario: Editor no puede acceder a Sector7
|
|
187
|
+
|
|
188
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
189
|
+
When intento visitar /sector7
|
|
190
|
+
Then deberia ser redirigido fuera de /sector7
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Expected Results
|
|
194
|
+
- Access denied
|
|
195
|
+
- Redirect to dashboard
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## @test EDITOR-PERM-007: Editor Cannot Access Dev Zone
|
|
200
|
+
|
|
201
|
+
### Metadata
|
|
202
|
+
- **Priority:** High
|
|
203
|
+
- **Type:** Security
|
|
204
|
+
- **Tags:** editor, dev-zone, blocked
|
|
205
|
+
|
|
206
|
+
```gherkin:en
|
|
207
|
+
Scenario: Editor is blocked from Dev Zone
|
|
208
|
+
|
|
209
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
210
|
+
When I attempt to visit /dev
|
|
211
|
+
Then I should be redirected away from /dev
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```gherkin:es
|
|
215
|
+
Scenario: Editor no puede acceder a Dev Zone
|
|
216
|
+
|
|
217
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
218
|
+
When intento visitar /dev
|
|
219
|
+
Then deberia ser redirigido fuera de /dev
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Expected Results
|
|
223
|
+
- Access denied
|
|
224
|
+
- Redirect to dashboard
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## @test EDITOR-PERM-008: Editor Logout Flow
|
|
229
|
+
|
|
230
|
+
### Metadata
|
|
231
|
+
- **Priority:** Normal
|
|
232
|
+
- **Type:** Regression
|
|
233
|
+
- **Tags:** editor, logout
|
|
234
|
+
|
|
235
|
+
```gherkin:en
|
|
236
|
+
Scenario: Editor can logout successfully
|
|
237
|
+
|
|
238
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
239
|
+
And I am on the dashboard
|
|
240
|
+
When I click on user menu
|
|
241
|
+
And I click on Sign Out
|
|
242
|
+
Then I should be redirected to /login
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
```gherkin:es
|
|
246
|
+
Scenario: Editor puede cerrar sesion correctamente
|
|
247
|
+
|
|
248
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
249
|
+
And estoy en el dashboard
|
|
250
|
+
When hago click en el menu de usuario
|
|
251
|
+
And hago click en Sign Out
|
|
252
|
+
Then deberia ser redirigido a /login
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Expected Results
|
|
256
|
+
- Logout works correctly
|
|
257
|
+
- Redirect to login page
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## UI Elements
|
|
262
|
+
|
|
263
|
+
| Element | Selector | Description |
|
|
264
|
+
|---------|----------|-------------|
|
|
265
|
+
| Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
|
|
266
|
+
| Create Button | `[data-cy="entity-create-button"]` | Entity create button (should not exist) |
|
|
267
|
+
| Entity List | `[data-cy="entity-list-container"]` | Entity list container |
|
|
268
|
+
| Row Edit | `[data-cy="entity-row-edit"]` | Row edit button (should not exist) |
|
|
269
|
+
| Row Delete | `[data-cy="entity-row-delete"]` | Row delete button (should not exist) |
|
|
270
|
+
| Settings Container | `[data-cy="settings-container"]` | Settings page container |
|
|
271
|
+
| Profile Tab | `[data-cy="settings-tab-profile"]` | Profile settings tab |
|
|
272
|
+
| User Menu | `[data-cy="topnav-user-menu-trigger"]` | User menu trigger |
|
|
273
|
+
| Sign Out | `[data-cy="topnav-menu-signOut"]` | Sign out button |
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Summary
|
|
278
|
+
|
|
279
|
+
| Test ID | Block | Description | Tags |
|
|
280
|
+
|---------|-------|-------------|------|
|
|
281
|
+
| EDITOR-PERM-001 | Access | Dashboard access | `@smoke` |
|
|
282
|
+
| EDITOR-PERM-002 | View-Only | View-only customers | `@smoke` |
|
|
283
|
+
| EDITOR-PERM-003 | Blocked | Cannot edit customers | |
|
|
284
|
+
| EDITOR-PERM-004 | View-Only | Read-only tasks | |
|
|
285
|
+
| EDITOR-PERM-005 | Access | Profile-only settings | |
|
|
286
|
+
| EDITOR-PERM-006 | Blocked | Sector7 blocked | |
|
|
287
|
+
| EDITOR-PERM-007 | Blocked | Dev Zone blocked | |
|
|
288
|
+
| EDITOR-PERM-008 | Logout | Logout flow | |
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Editor Custom Role Login Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Editor custom role (theme-defined) login and specific permissions:
|
|
7
|
+
* - Editor is a custom role defined in the Default theme
|
|
8
|
+
* - Can view/list customers but cannot create/update/delete
|
|
9
|
+
* - Limited navigation and entity access
|
|
10
|
+
* - Cannot access Superadmin or Dev Zone
|
|
11
|
+
*
|
|
12
|
+
* Note: Editor role is team-based (not a global app role)
|
|
13
|
+
* This file tests Editor-specific permissions as defined in the theme.
|
|
14
|
+
*
|
|
15
|
+
* Tags: @uat, @feat-auth, @custom-role, @editor
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as allure from 'allure-cypress'
|
|
19
|
+
|
|
20
|
+
import { loginAsDefaultEditor, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
|
|
21
|
+
import { DashboardPOM } from '../../../../src/features/DashboardPOM'
|
|
22
|
+
import { SettingsPOM } from '../../../../src/features/SettingsPOM'
|
|
23
|
+
import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
|
|
24
|
+
import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
|
|
25
|
+
import { AuthPOM } from '../../../../src/core/AuthPOM'
|
|
26
|
+
|
|
27
|
+
describe('Authentication - Editor Custom Role Permissions', {
|
|
28
|
+
tags: ['@uat', '@feat-auth', '@custom-role', '@editor']
|
|
29
|
+
}, () => {
|
|
30
|
+
const dashboard = DashboardPOM.create()
|
|
31
|
+
const settings = SettingsPOM.create()
|
|
32
|
+
const sector7 = SuperadminPOM.create()
|
|
33
|
+
const devArea = DevAreaPOM.create()
|
|
34
|
+
const auth = new AuthPOM()
|
|
35
|
+
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
allure.epic('Authentication')
|
|
38
|
+
allure.feature('Custom Roles')
|
|
39
|
+
allure.story('Editor Permissions')
|
|
40
|
+
loginAsDefaultEditor()
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
describe('EDITOR-PERM-001: Editor Dashboard Access', { tags: '@smoke' }, () => {
|
|
44
|
+
it('should access dashboard with limited navigation', { tags: '@smoke' }, () => {
|
|
45
|
+
allure.severity('critical')
|
|
46
|
+
|
|
47
|
+
// 1. Visit dashboard and wait for load
|
|
48
|
+
dashboard.visitDashboard()
|
|
49
|
+
dashboard.waitForDashboard()
|
|
50
|
+
|
|
51
|
+
// 2. Validate dashboard is accessible
|
|
52
|
+
dashboard.assertDashboardVisible()
|
|
53
|
+
|
|
54
|
+
cy.log(`✅ Editor dashboard access verified (${DEFAULT_THEME_USERS.EDITOR})`)
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
describe('EDITOR-PERM-002: Editor View-Only Customer Access', { tags: '@smoke' }, () => {
|
|
59
|
+
it('should have view-only access to customers list', { tags: '@smoke' }, () => {
|
|
60
|
+
allure.severity('critical')
|
|
61
|
+
|
|
62
|
+
// 1. Navigate to customers
|
|
63
|
+
dashboard.visitEntity('customers')
|
|
64
|
+
dashboard.waitForEntityPage('customers')
|
|
65
|
+
|
|
66
|
+
// 2. Validate table is visible (Editor can read)
|
|
67
|
+
dashboard.assertEntityPageVisible('customers')
|
|
68
|
+
|
|
69
|
+
// 3. Create button should NOT be visible for Editor
|
|
70
|
+
dashboard.assertEntityAddButtonNotVisible('customers')
|
|
71
|
+
|
|
72
|
+
cy.log('✅ Editor has view-only access to customers')
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
describe('EDITOR-PERM-003: Editor Cannot Edit Customers', () => {
|
|
77
|
+
it('should not see edit buttons on customer items', () => {
|
|
78
|
+
allure.severity('high')
|
|
79
|
+
|
|
80
|
+
// 1. Navigate to customers
|
|
81
|
+
dashboard.visitEntity('customers')
|
|
82
|
+
dashboard.waitForEntityPage('customers')
|
|
83
|
+
|
|
84
|
+
// 2. Validate table is visible
|
|
85
|
+
dashboard.assertEntityPageVisible('customers')
|
|
86
|
+
|
|
87
|
+
// 3. If there are items, check they don't have edit buttons
|
|
88
|
+
cy.get('body').then(($body) => {
|
|
89
|
+
if ($body.find('[data-cy^="customers-row-"]').length > 0) {
|
|
90
|
+
// Check first row doesn't have edit action
|
|
91
|
+
cy.get('[data-cy^="customers-row-"]').first().within(() => {
|
|
92
|
+
cy.get('[data-cy*="edit"]').should('not.exist')
|
|
93
|
+
cy.get('[data-cy*="delete"]').should('not.exist')
|
|
94
|
+
})
|
|
95
|
+
cy.log('✅ Editor cannot see edit/delete actions')
|
|
96
|
+
} else {
|
|
97
|
+
cy.log('✅ No items to verify, but create button is hidden')
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
})
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
describe('EDITOR-PERM-004: Editor Tasks Access', { tags: '@in-develop' }, () => {
|
|
104
|
+
it('should NOT have access to tasks (permission denied)', { tags: '@in-develop' }, () => {
|
|
105
|
+
allure.severity('high')
|
|
106
|
+
|
|
107
|
+
// 1. Navigate to tasks - Editor does NOT have tasks.list permission
|
|
108
|
+
cy.visit('/dashboard/tasks', { failOnStatusCode: false })
|
|
109
|
+
|
|
110
|
+
// 2. Should be redirected to permission denied page
|
|
111
|
+
cy.url().should('include', 'permission-denied')
|
|
112
|
+
cy.contains('Acceso denegado').should('be.visible')
|
|
113
|
+
|
|
114
|
+
cy.log('✅ Editor correctly blocked from tasks')
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
describe('EDITOR-PERM-005: Editor Settings Access', () => {
|
|
119
|
+
it('should have profile-only settings access', () => {
|
|
120
|
+
allure.severity('normal')
|
|
121
|
+
|
|
122
|
+
// 1. Navigate to settings
|
|
123
|
+
settings.visitSettings()
|
|
124
|
+
|
|
125
|
+
// 2. Check access
|
|
126
|
+
cy.url().then((url) => {
|
|
127
|
+
if (url.includes('/settings')) {
|
|
128
|
+
settings.assertSettingsVisible()
|
|
129
|
+
// Should only see profile, not team settings
|
|
130
|
+
settings.assertNavItemVisible('profile')
|
|
131
|
+
cy.log('✅ Editor has profile settings access')
|
|
132
|
+
} else {
|
|
133
|
+
cy.log('✅ Editor redirected from settings')
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
describe('EDITOR-PERM-006: Editor Cannot Access Superadmin', () => {
|
|
140
|
+
it('should be redirected when trying to access /superadmin', () => {
|
|
141
|
+
allure.severity('high')
|
|
142
|
+
|
|
143
|
+
// 1. Attempt to visit Superadmin
|
|
144
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
145
|
+
|
|
146
|
+
// 2. Should be redirected
|
|
147
|
+
sector7.assertAccessDenied()
|
|
148
|
+
|
|
149
|
+
cy.log('✅ Editor correctly blocked from Superadmin')
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
describe('EDITOR-PERM-007: Editor Cannot Access Dev Zone', () => {
|
|
154
|
+
it('should be redirected when trying to access /dev', () => {
|
|
155
|
+
allure.severity('high')
|
|
156
|
+
|
|
157
|
+
// 1. Attempt to visit Dev Zone
|
|
158
|
+
devArea.attemptToVisitDev()
|
|
159
|
+
|
|
160
|
+
// 2. Should be redirected
|
|
161
|
+
devArea.assertRedirectedToDashboard()
|
|
162
|
+
|
|
163
|
+
cy.log('✅ Editor correctly blocked from Dev Zone')
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
describe('EDITOR-PERM-008: Editor Logout Flow', () => {
|
|
168
|
+
it('should logout successfully', () => {
|
|
169
|
+
allure.severity('normal')
|
|
170
|
+
|
|
171
|
+
// 1. Visit dashboard
|
|
172
|
+
dashboard.visitDashboard()
|
|
173
|
+
dashboard.waitForDashboard()
|
|
174
|
+
|
|
175
|
+
// 2. Logout using AuthPOM
|
|
176
|
+
auth.logout()
|
|
177
|
+
|
|
178
|
+
// 3. Validate redirected to login
|
|
179
|
+
auth.assertOnLoginPage()
|
|
180
|
+
|
|
181
|
+
cy.log('✅ Editor logout successful')
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
after(() => {
|
|
186
|
+
cy.log('✅ Editor custom role tests completed')
|
|
187
|
+
})
|
|
188
|
+
})
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Authentication via DevKeyring
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [auth, login, logout, devkeyring]
|
|
5
|
+
grepTags: [uat, feat-auth, smoke, critical]
|
|
6
|
+
coverage: 4
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Authentication via DevKeyring
|
|
10
|
+
|
|
11
|
+
> Test suite for user authentication using DevKeyring development tool. Covers login flows for Owner, Member, and Admin roles, plus logout functionality.
|
|
12
|
+
|
|
13
|
+
## @test LOGIN-001: Owner Login via DevKeyring
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** login, owner, devkeyring
|
|
19
|
+
- **Grep:** `@smoke` `@critical`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Owner can login and access dashboard
|
|
23
|
+
|
|
24
|
+
Given I am on the login page
|
|
25
|
+
And the DevKeyring component is visible
|
|
26
|
+
When I select the Owner user (owner@nextspark.dev)
|
|
27
|
+
And I click to login
|
|
28
|
+
Then I should be redirected to the dashboard
|
|
29
|
+
And the dashboard container should be visible
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```gherkin:es
|
|
33
|
+
Scenario: Owner puede loguearse y acceder al dashboard
|
|
34
|
+
|
|
35
|
+
Given estoy en la pagina de login
|
|
36
|
+
And el componente DevKeyring esta visible
|
|
37
|
+
When selecciono el usuario Owner (owner@nextspark.dev)
|
|
38
|
+
And hago clic para iniciar sesion
|
|
39
|
+
Then deberia ser redirigido al dashboard
|
|
40
|
+
And el contenedor del dashboard deberia estar visible
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Expected Results
|
|
44
|
+
- DevKeyring component displays user selector
|
|
45
|
+
- Owner user (owner@nextspark.dev) is selectable
|
|
46
|
+
- Login redirects to /dashboard
|
|
47
|
+
- Dashboard container is visible after login
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## @test LOGIN-002: Member Login via DevKeyring
|
|
52
|
+
|
|
53
|
+
### Metadata
|
|
54
|
+
- **Priority:** Critical
|
|
55
|
+
- **Type:** Smoke
|
|
56
|
+
- **Tags:** login, member, devkeyring
|
|
57
|
+
- **Grep:** `@smoke` `@critical`
|
|
58
|
+
|
|
59
|
+
```gherkin:en
|
|
60
|
+
Scenario: Member can login and access dashboard
|
|
61
|
+
|
|
62
|
+
Given I am on the login page
|
|
63
|
+
And the DevKeyring component is visible
|
|
64
|
+
When I select the Member user (member@nextspark.dev)
|
|
65
|
+
And I click to login
|
|
66
|
+
Then I should be redirected to the dashboard
|
|
67
|
+
And the dashboard container should be visible
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```gherkin:es
|
|
71
|
+
Scenario: Member puede loguearse y acceder al dashboard
|
|
72
|
+
|
|
73
|
+
Given estoy en la pagina de login
|
|
74
|
+
And el componente DevKeyring esta visible
|
|
75
|
+
When selecciono el usuario Member (member@nextspark.dev)
|
|
76
|
+
And hago clic para iniciar sesion
|
|
77
|
+
Then deberia ser redirigido al dashboard
|
|
78
|
+
And el contenedor del dashboard deberia estar visible
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Expected Results
|
|
82
|
+
- Member user (member@nextspark.dev) is selectable
|
|
83
|
+
- Login redirects to /dashboard
|
|
84
|
+
- Dashboard container is visible after login
|
|
85
|
+
- Member has read-only access to most entities
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## @test LOGIN-003: Admin Login via DevKeyring
|
|
90
|
+
|
|
91
|
+
### Metadata
|
|
92
|
+
- **Priority:** High
|
|
93
|
+
- **Type:** Regression
|
|
94
|
+
- **Tags:** login, admin, devkeyring
|
|
95
|
+
|
|
96
|
+
```gherkin:en
|
|
97
|
+
Scenario: Admin can login and access dashboard
|
|
98
|
+
|
|
99
|
+
Given I am on the login page
|
|
100
|
+
And the DevKeyring component is visible
|
|
101
|
+
When I select the Admin user (admin@nextspark.dev)
|
|
102
|
+
And I click to login
|
|
103
|
+
Then I should be redirected to the dashboard
|
|
104
|
+
And the dashboard container should be visible
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
```gherkin:es
|
|
108
|
+
Scenario: Admin puede loguearse y acceder al dashboard
|
|
109
|
+
|
|
110
|
+
Given estoy en la pagina de login
|
|
111
|
+
And el componente DevKeyring esta visible
|
|
112
|
+
When selecciono el usuario Admin (admin@nextspark.dev)
|
|
113
|
+
And hago clic para iniciar sesion
|
|
114
|
+
Then deberia ser redirigido al dashboard
|
|
115
|
+
And el contenedor del dashboard deberia estar visible
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Expected Results
|
|
119
|
+
- Admin user (admin@nextspark.dev) is selectable
|
|
120
|
+
- Login redirects to /dashboard
|
|
121
|
+
- Dashboard container is visible after login
|
|
122
|
+
- Admin has delegated full CRUD access
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## @test LOGOUT-001: User Logout Flow
|
|
127
|
+
|
|
128
|
+
### Metadata
|
|
129
|
+
- **Priority:** High
|
|
130
|
+
- **Type:** Regression
|
|
131
|
+
- **Tags:** logout, signout, navigation
|
|
132
|
+
|
|
133
|
+
```gherkin:en
|
|
134
|
+
Scenario: User can logout successfully
|
|
135
|
+
|
|
136
|
+
Given I am logged in as Owner
|
|
137
|
+
And I am on the dashboard
|
|
138
|
+
When I click on the user menu in the top navigation
|
|
139
|
+
And I click "Sign Out"
|
|
140
|
+
Then I should be redirected to the login page
|
|
141
|
+
And the DevKeyring component should be visible again
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
```gherkin:es
|
|
145
|
+
Scenario: Usuario puede cerrar sesion exitosamente
|
|
146
|
+
|
|
147
|
+
Given estoy logueado como Owner
|
|
148
|
+
And estoy en el dashboard
|
|
149
|
+
When hago clic en el menu de usuario en la navegacion superior
|
|
150
|
+
And hago clic en "Cerrar Sesion"
|
|
151
|
+
Then deberia ser redirigido a la pagina de login
|
|
152
|
+
And el componente DevKeyring deberia estar visible nuevamente
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Expected Results
|
|
156
|
+
- User menu is accessible in top navigation
|
|
157
|
+
- Sign Out option is visible in menu
|
|
158
|
+
- Clicking Sign Out clears session
|
|
159
|
+
- User is redirected to login page
|
|
160
|
+
- DevKeyring component is visible for re-login
|