@nextsparkjs/theme-default 0.1.0-beta.2 → 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 +8 -4
- package/templates/(public)/page.tsx +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
- package/LICENSE +0 -21
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Superadmin All Users Management
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [sector7, superadmin, users, management]
|
|
5
|
+
grepTags: [uat, feat-sector7, superadmin, users]
|
|
6
|
+
coverage: 11
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Superadmin All Users Management
|
|
10
|
+
|
|
11
|
+
> Tests for the Admin Panel all users management page. Superadmin can view all users across the platform, see their details, email verification status, app roles, and team memberships.
|
|
12
|
+
|
|
13
|
+
## @test ADMIN-USERS-001: Users List Access
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** sector7, users, access
|
|
19
|
+
- **Grep:** `@smoke`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Superadmin can access all users list
|
|
23
|
+
|
|
24
|
+
Given I am logged in as Superadmin (superadmin@nextspark.dev)
|
|
25
|
+
When I visit /admin/users
|
|
26
|
+
Then the URL should include /admin/users
|
|
27
|
+
And I should see "User Management" heading
|
|
28
|
+
And the users container should be visible
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```gherkin:es
|
|
32
|
+
Scenario: Superadmin puede acceder a la lista de todos los usuarios
|
|
33
|
+
|
|
34
|
+
Given estoy logueado como Superadmin (superadmin@nextspark.dev)
|
|
35
|
+
When visito /admin/users
|
|
36
|
+
Then la URL deberia incluir /admin/users
|
|
37
|
+
And deberia ver el heading "User Management"
|
|
38
|
+
And el contenedor de usuarios deberia estar visible
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Expected Results
|
|
42
|
+
- Users page loads correctly
|
|
43
|
+
- Header displays correct title
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## @test ADMIN-USERS-002: Users List Display
|
|
48
|
+
|
|
49
|
+
### Metadata
|
|
50
|
+
- **Priority:** Critical
|
|
51
|
+
- **Type:** Smoke
|
|
52
|
+
- **Tags:** sector7, users, list
|
|
53
|
+
- **Grep:** `@smoke`
|
|
54
|
+
|
|
55
|
+
```gherkin:en
|
|
56
|
+
Scenario: Users are displayed in a list or table
|
|
57
|
+
|
|
58
|
+
Given I am logged in as Superadmin
|
|
59
|
+
When I visit /admin/users
|
|
60
|
+
Then the users container should contain a list or table
|
|
61
|
+
And each user should be represented as a row
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```gherkin:es
|
|
65
|
+
Scenario: Usuarios se muestran en una lista o tabla
|
|
66
|
+
|
|
67
|
+
Given estoy logueado como Superadmin
|
|
68
|
+
When visito /admin/users
|
|
69
|
+
Then el contenedor de usuarios deberia contener una lista o tabla
|
|
70
|
+
And cada usuario deberia estar representado como una fila
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Expected Results
|
|
74
|
+
- Users displayed in organized format
|
|
75
|
+
- All users visible
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## @test ADMIN-USERS-003: View User Details
|
|
80
|
+
|
|
81
|
+
### Metadata
|
|
82
|
+
- **Priority:** High
|
|
83
|
+
- **Type:** Regression
|
|
84
|
+
- **Tags:** sector7, users, details
|
|
85
|
+
|
|
86
|
+
```gherkin:en
|
|
87
|
+
Scenario: View individual user details
|
|
88
|
+
|
|
89
|
+
Given I am logged in as Superadmin
|
|
90
|
+
And I am on /admin/users
|
|
91
|
+
When I click on a user row
|
|
92
|
+
Then I should navigate to user details page
|
|
93
|
+
And the user details should be visible
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```gherkin:es
|
|
97
|
+
Scenario: Ver detalles de un usuario individual
|
|
98
|
+
|
|
99
|
+
Given estoy logueado como Superadmin
|
|
100
|
+
And estoy en /admin/users
|
|
101
|
+
When hago click en una fila de usuario
|
|
102
|
+
Then deberia navegar a la pagina de detalles del usuario
|
|
103
|
+
And los detalles del usuario deberian estar visibles
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Expected Results
|
|
107
|
+
- Click navigates to details
|
|
108
|
+
- Details page shows user info
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## @test ADMIN-USERS-004: User Search
|
|
113
|
+
|
|
114
|
+
### Metadata
|
|
115
|
+
- **Priority:** High
|
|
116
|
+
- **Type:** Regression
|
|
117
|
+
- **Tags:** sector7, users, search
|
|
118
|
+
|
|
119
|
+
```gherkin:en
|
|
120
|
+
Scenario: Filter users by search query
|
|
121
|
+
|
|
122
|
+
Given I am logged in as Superadmin
|
|
123
|
+
And I am on /admin/users
|
|
124
|
+
When I type "carlos" in the search field
|
|
125
|
+
Then the users list should be filtered
|
|
126
|
+
And only matching users should be displayed
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
```gherkin:es
|
|
130
|
+
Scenario: Filtrar usuarios por busqueda
|
|
131
|
+
|
|
132
|
+
Given estoy logueado como Superadmin
|
|
133
|
+
And estoy en /admin/users
|
|
134
|
+
When escribo "carlos" en el campo de busqueda
|
|
135
|
+
Then la lista de usuarios deberia ser filtrada
|
|
136
|
+
And solo los usuarios que coinciden deberian mostrarse
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Expected Results
|
|
140
|
+
- Search filters list
|
|
141
|
+
- Real-time filtering
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## @test ADMIN-USERS-005: User Email Display
|
|
146
|
+
|
|
147
|
+
### Metadata
|
|
148
|
+
- **Priority:** Normal
|
|
149
|
+
- **Type:** Regression
|
|
150
|
+
- **Tags:** sector7, users, email
|
|
151
|
+
|
|
152
|
+
```gherkin:en
|
|
153
|
+
Scenario: Display email for each user
|
|
154
|
+
|
|
155
|
+
Given I am logged in as Superadmin
|
|
156
|
+
When I visit /admin/users
|
|
157
|
+
Then each user row should display user email
|
|
158
|
+
And email should contain @ symbol
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
```gherkin:es
|
|
162
|
+
Scenario: Mostrar email de cada usuario
|
|
163
|
+
|
|
164
|
+
Given estoy logueado como Superadmin
|
|
165
|
+
When visito /admin/users
|
|
166
|
+
Then cada fila de usuario deberia mostrar el email
|
|
167
|
+
And el email deberia contener el simbolo @
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Expected Results
|
|
171
|
+
- Email visible for each user
|
|
172
|
+
- Email format is valid
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## @test ADMIN-USERS-006: User App Role Display
|
|
177
|
+
|
|
178
|
+
### Metadata
|
|
179
|
+
- **Priority:** Normal
|
|
180
|
+
- **Type:** Regression
|
|
181
|
+
- **Tags:** sector7, users, roles
|
|
182
|
+
|
|
183
|
+
```gherkin:en
|
|
184
|
+
Scenario: Display app role for users with global roles
|
|
185
|
+
|
|
186
|
+
Given I am logged in as Superadmin
|
|
187
|
+
When I visit /admin/users
|
|
188
|
+
Then users with app roles (superadmin, developer) should show role indicator
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
```gherkin:es
|
|
192
|
+
Scenario: Mostrar app role de usuarios con roles globales
|
|
193
|
+
|
|
194
|
+
Given estoy logueado como Superadmin
|
|
195
|
+
When visito /admin/users
|
|
196
|
+
Then los usuarios con app roles (superadmin, developer) deberian mostrar indicador de rol
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Expected Results
|
|
200
|
+
- App role visible when applicable
|
|
201
|
+
- Role indicator distinguishes role types
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## @test ADMIN-USERS-007: User Verified Status
|
|
206
|
+
|
|
207
|
+
### Metadata
|
|
208
|
+
- **Priority:** Normal
|
|
209
|
+
- **Type:** Regression
|
|
210
|
+
- **Tags:** sector7, users, verification
|
|
211
|
+
|
|
212
|
+
```gherkin:en
|
|
213
|
+
Scenario: Display email verification status
|
|
214
|
+
|
|
215
|
+
Given I am logged in as Superadmin
|
|
216
|
+
When I visit /admin/users
|
|
217
|
+
Then each user should show verification status (verified/unverified)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
```gherkin:es
|
|
221
|
+
Scenario: Mostrar estado de verificacion de email
|
|
222
|
+
|
|
223
|
+
Given estoy logueado como Superadmin
|
|
224
|
+
When visito /admin/users
|
|
225
|
+
Then cada usuario deberia mostrar estado de verificacion (verificado/no verificado)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Expected Results
|
|
229
|
+
- Verification status visible
|
|
230
|
+
- Clear distinction between verified/unverified
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## @test ADMIN-USERS-008: Navigate Back to Dashboard
|
|
235
|
+
|
|
236
|
+
### Metadata
|
|
237
|
+
- **Priority:** Normal
|
|
238
|
+
- **Type:** Regression
|
|
239
|
+
- **Tags:** sector7, navigation
|
|
240
|
+
|
|
241
|
+
```gherkin:en
|
|
242
|
+
Scenario: Navigate back to Admin Panel dashboard
|
|
243
|
+
|
|
244
|
+
Given I am logged in as Superadmin
|
|
245
|
+
And I am on /admin/users
|
|
246
|
+
When I click on the dashboard nav item
|
|
247
|
+
Then I should be on /admin
|
|
248
|
+
And the dashboard container should be visible
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
```gherkin:es
|
|
252
|
+
Scenario: Navegar de vuelta al dashboard de Admin Panel
|
|
253
|
+
|
|
254
|
+
Given estoy logueado como Superadmin
|
|
255
|
+
And estoy en /admin/users
|
|
256
|
+
When hago click en el nav item de dashboard
|
|
257
|
+
Then deberia estar en /admin
|
|
258
|
+
And el contenedor del dashboard deberia estar visible
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Expected Results
|
|
262
|
+
- Navigation works
|
|
263
|
+
- Dashboard loads
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## @test ADMIN-USERS-009: User Team Memberships
|
|
268
|
+
|
|
269
|
+
### Metadata
|
|
270
|
+
- **Priority:** Normal
|
|
271
|
+
- **Type:** Regression
|
|
272
|
+
- **Tags:** sector7, users, teams
|
|
273
|
+
|
|
274
|
+
```gherkin:en
|
|
275
|
+
Scenario: Display team memberships for users
|
|
276
|
+
|
|
277
|
+
Given I am logged in as Superadmin
|
|
278
|
+
When I visit /admin/users
|
|
279
|
+
Then each user should show their team membership count or list
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
```gherkin:es
|
|
283
|
+
Scenario: Mostrar membresias de teams de usuarios
|
|
284
|
+
|
|
285
|
+
Given estoy logueado como Superadmin
|
|
286
|
+
When visito /admin/users
|
|
287
|
+
Then cada usuario deberia mostrar su conteo o lista de membresias de teams
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Expected Results
|
|
291
|
+
- Team count visible
|
|
292
|
+
- Reflects actual memberships
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## @test ADMIN-USERS-010: User Metadata Box
|
|
297
|
+
|
|
298
|
+
### Metadata
|
|
299
|
+
- **Priority:** Normal
|
|
300
|
+
- **Type:** Regression
|
|
301
|
+
- **Tags:** admin, users, metadata, detail
|
|
302
|
+
|
|
303
|
+
```gherkin:en
|
|
304
|
+
Scenario: Display user metadata card in user detail view
|
|
305
|
+
|
|
306
|
+
Given I am logged in as Superadmin
|
|
307
|
+
And I am on /admin/users
|
|
308
|
+
When I click on a user row to view details
|
|
309
|
+
Then the User Metadata card should be visible
|
|
310
|
+
And the card title should contain "User Metadata"
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
```gherkin:es
|
|
314
|
+
Scenario: Mostrar card de metadata de usuario en vista de detalle
|
|
315
|
+
|
|
316
|
+
Given estoy logueado como Superadmin
|
|
317
|
+
And estoy en /admin/users
|
|
318
|
+
When hago click en una fila de usuario para ver detalles
|
|
319
|
+
Then el card de User Metadata deberia estar visible
|
|
320
|
+
And el titulo del card deberia contener "User Metadata"
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Expected Results
|
|
324
|
+
- User Metadata card visible in detail view
|
|
325
|
+
- Card displays metadata count in title
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## @test ADMIN-USERS-010b: User Metadata Table or Empty State
|
|
330
|
+
|
|
331
|
+
### Metadata
|
|
332
|
+
- **Priority:** Normal
|
|
333
|
+
- **Type:** Regression
|
|
334
|
+
- **Tags:** admin, users, metadata, detail
|
|
335
|
+
|
|
336
|
+
```gherkin:en
|
|
337
|
+
Scenario: Display metadata table or empty state
|
|
338
|
+
|
|
339
|
+
Given I am logged in as Superadmin
|
|
340
|
+
And I am viewing a user's detail page
|
|
341
|
+
When the User Metadata card loads
|
|
342
|
+
Then I should see either a metadata table or an empty state
|
|
343
|
+
And if table exists, it should have columns: Key, Value, Type, Public, Searchable
|
|
344
|
+
And if empty state exists, it should show "No metadata" message
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
```gherkin:es
|
|
348
|
+
Scenario: Mostrar tabla de metadata o estado vacio
|
|
349
|
+
|
|
350
|
+
Given estoy logueado como Superadmin
|
|
351
|
+
And estoy viendo la pagina de detalle de un usuario
|
|
352
|
+
When el card de User Metadata carga
|
|
353
|
+
Then deberia ver una tabla de metadata o un estado vacio
|
|
354
|
+
And si existe la tabla, deberia tener columnas: Key, Value, Type, Public, Searchable
|
|
355
|
+
And si existe estado vacio, deberia mostrar mensaje "No metadata"
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Expected Results
|
|
359
|
+
- Either table or empty state is shown
|
|
360
|
+
- Table has correct column headers
|
|
361
|
+
- Empty state has appropriate message
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## UI Elements
|
|
366
|
+
|
|
367
|
+
| Element | Selector | Description |
|
|
368
|
+
|---------|----------|-------------|
|
|
369
|
+
| Container | `[data-cy="admin-users-container"]` | Users page container |
|
|
370
|
+
| Users List | `[data-cy="admin-users-table"]` | List/table of users |
|
|
371
|
+
| User Row | `[data-cy="admin-user-row-{id}"]` | Individual user row |
|
|
372
|
+
| User Details | `[data-cy="admin-user-detail"]` | User details view |
|
|
373
|
+
| Search | `[data-cy="admin-users-search"]` | Search input |
|
|
374
|
+
| User Email | `[data-cy="admin-user-email"]` | User email display |
|
|
375
|
+
| App Role | `[data-cy="user-app-role-{roleName}"]` | App role indicator |
|
|
376
|
+
| Verified Status | `[data-cy="user-verified-status"]` | Verification status |
|
|
377
|
+
| Teams Count | `[data-cy="user-teams-count"]` | Team memberships count |
|
|
378
|
+
| Nav Dashboard | `[data-cy="admin-nav-dashboard"]` | Dashboard nav item |
|
|
379
|
+
| User Metas Card | `[data-cy="admin-user-metas"]` | User metadata card container |
|
|
380
|
+
| User Metas Title | `[data-cy="admin-user-metas-title"]` | User metadata card title |
|
|
381
|
+
| User Metas Table | `[data-cy="admin-user-metas-table"]` | User metadata table |
|
|
382
|
+
| User Metas Empty | `[data-cy="admin-user-metas-empty"]` | User metadata empty state |
|
|
383
|
+
| Meta Row | `[data-cy="admin-user-meta-row-{key}"]` | Individual metadata row |
|
|
384
|
+
| Meta Key | `[data-cy="admin-user-meta-key-{key}"]` | Metadata key cell |
|
|
385
|
+
| Meta Value | `[data-cy="admin-user-meta-value-{key}"]` | Metadata value cell |
|
|
386
|
+
| Meta Type | `[data-cy="admin-user-meta-type-{key}"]` | Metadata type badge |
|
|
387
|
+
| Meta Public | `[data-cy="admin-user-meta-public-{key}"]` | Metadata public badge |
|
|
388
|
+
| Meta Searchable | `[data-cy="admin-user-meta-searchable-{key}"]` | Metadata searchable badge |
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Summary
|
|
393
|
+
|
|
394
|
+
| Test ID | Block | Description | Tags |
|
|
395
|
+
|---------|-------|-------------|------|
|
|
396
|
+
| ADMIN-USERS-001 | Access | Users list access | `@smoke` |
|
|
397
|
+
| ADMIN-USERS-002 | Display | Users list format | `@smoke` |
|
|
398
|
+
| ADMIN-USERS-003 | Details | View user details | |
|
|
399
|
+
| ADMIN-USERS-004 | Search | Filter by search | |
|
|
400
|
+
| ADMIN-USERS-005 | Display | Email display | |
|
|
401
|
+
| ADMIN-USERS-006 | Display | App role display | |
|
|
402
|
+
| ADMIN-USERS-007 | Display | Verification status | |
|
|
403
|
+
| ADMIN-USERS-008 | Navigation | Back to dashboard | |
|
|
404
|
+
| ADMIN-USERS-009 | Display | Team memberships | |
|
|
405
|
+
| ADMIN-USERS-010 | Metadata | User metadata card | |
|
|
406
|
+
| ADMIN-USERS-010b | Metadata | Metadata table/empty state | |
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Superadmin All Users Management Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Sector7 all users management page:
|
|
7
|
+
* - Users list access and display
|
|
8
|
+
* - User details view
|
|
9
|
+
* - User search and filtering
|
|
10
|
+
* - User status and role display
|
|
11
|
+
*
|
|
12
|
+
* Tags: @uat, @feat-superadmin, @superadmin, @users
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import * as allure from 'allure-cypress'
|
|
16
|
+
|
|
17
|
+
import { loginAsDefaultSuperadmin } from '../../src/session-helpers'
|
|
18
|
+
import { SuperadminPOM } from '../../src/features/SuperadminPOM'
|
|
19
|
+
|
|
20
|
+
describe('Sector7 - All Users Management', {
|
|
21
|
+
tags: ['@uat', '@feat-superadmin', '@superadmin', '@users']
|
|
22
|
+
}, () => {
|
|
23
|
+
const superadmin = SuperadminPOM.create()
|
|
24
|
+
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
allure.epic('Admin')
|
|
27
|
+
allure.feature('Users Management')
|
|
28
|
+
allure.story('All Users')
|
|
29
|
+
loginAsDefaultSuperadmin()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
describe('ADMIN-USERS-001: Users List Access', { tags: '@smoke' }, () => {
|
|
33
|
+
it('should access all users list', { tags: '@smoke' }, () => {
|
|
34
|
+
allure.severity('critical')
|
|
35
|
+
|
|
36
|
+
// 1. Visit Sector7 Users
|
|
37
|
+
superadmin.visitUsers()
|
|
38
|
+
|
|
39
|
+
// 2. Validate users page
|
|
40
|
+
cy.url().should('include', '/superadmin/users')
|
|
41
|
+
cy.contains('User Management').should('be.visible')
|
|
42
|
+
superadmin.assertUsersVisible()
|
|
43
|
+
|
|
44
|
+
cy.log('✅ Users list accessible')
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
describe('ADMIN-USERS-002: Users List Display', { tags: '@smoke' }, () => {
|
|
49
|
+
it('should display users in a list or table', { tags: '@smoke' }, () => {
|
|
50
|
+
allure.severity('critical')
|
|
51
|
+
|
|
52
|
+
// 1. Visit Sector7 Users
|
|
53
|
+
superadmin.visitUsers()
|
|
54
|
+
|
|
55
|
+
// 2. Validate users list/table exists
|
|
56
|
+
cy.get(superadmin.selectors.usersContainer).then(($container) => {
|
|
57
|
+
const hasTable = $container.find(superadmin.selectors.usersTable).length > 0
|
|
58
|
+
const hasList = $container.find(superadmin.selectors.usersList).length > 0
|
|
59
|
+
const hasRows = $container.find('[data-cy^="superadmin-user-row"]').length > 0
|
|
60
|
+
if (hasTable || hasList || hasRows) {
|
|
61
|
+
cy.log('✅ Users displayed in list')
|
|
62
|
+
} else {
|
|
63
|
+
cy.log('⚠️ Users table/list not found')
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
})
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
describe('ADMIN-USERS-003: View User Details', () => {
|
|
70
|
+
it('should view individual user details', () => {
|
|
71
|
+
allure.severity('high')
|
|
72
|
+
|
|
73
|
+
// 1. Visit Sector7 Users
|
|
74
|
+
superadmin.visitUsers()
|
|
75
|
+
|
|
76
|
+
// 2. Find and click first user row
|
|
77
|
+
cy.get('body').then(($body) => {
|
|
78
|
+
if ($body.find('[data-cy^="superadmin-user-row"]').length > 0) {
|
|
79
|
+
cy.get('[data-cy^="superadmin-user-row"]').first().click()
|
|
80
|
+
|
|
81
|
+
// 3. Validate user details view
|
|
82
|
+
cy.url().should('include', '/superadmin/users/')
|
|
83
|
+
|
|
84
|
+
cy.log('✅ User details accessible')
|
|
85
|
+
} else {
|
|
86
|
+
cy.log('⚠️ No user rows found to test details view')
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
describe('ADMIN-USERS-004: User Search', () => {
|
|
93
|
+
it('should filter users by search query', () => {
|
|
94
|
+
allure.severity('high')
|
|
95
|
+
|
|
96
|
+
// 1. Visit Sector7 Users
|
|
97
|
+
superadmin.visitUsers()
|
|
98
|
+
|
|
99
|
+
// 2. Check if search exists
|
|
100
|
+
cy.get('body').then(($body) => {
|
|
101
|
+
if ($body.find(superadmin.selectors.usersSearch).length > 0) {
|
|
102
|
+
superadmin.searchUsers('carlos')
|
|
103
|
+
|
|
104
|
+
// 3. Wait for filter to apply
|
|
105
|
+
cy.wait(500)
|
|
106
|
+
|
|
107
|
+
cy.log('✅ User search functional')
|
|
108
|
+
} else {
|
|
109
|
+
cy.log('⚠️ Search not implemented yet')
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
describe('ADMIN-USERS-005: User Email Display', () => {
|
|
116
|
+
it('should display email for each user', () => {
|
|
117
|
+
allure.severity('normal')
|
|
118
|
+
|
|
119
|
+
// 1. Visit Sector7 Users
|
|
120
|
+
superadmin.visitUsers()
|
|
121
|
+
|
|
122
|
+
// 2. Check for email display
|
|
123
|
+
cy.get(superadmin.selectors.usersContainer).within(() => {
|
|
124
|
+
cy.get('[data-cy^="superadmin-user-row"]').first().then(($user) => {
|
|
125
|
+
// Email might be in table cell or other format
|
|
126
|
+
cy.wrap($user).should('contain', '@')
|
|
127
|
+
cy.log('✅ User email visible in row')
|
|
128
|
+
})
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
describe('ADMIN-USERS-006: User App Role Display', () => {
|
|
134
|
+
it('should display app role for users with global roles', () => {
|
|
135
|
+
allure.severity('normal')
|
|
136
|
+
|
|
137
|
+
// 1. Visit Sector7 Users
|
|
138
|
+
superadmin.visitUsers()
|
|
139
|
+
|
|
140
|
+
// 2. Check for role indicators (defensive check)
|
|
141
|
+
cy.get(superadmin.selectors.usersContainer).then(($container) => {
|
|
142
|
+
if ($container.find('[data-cy^="user-app-role-"]').length > 0) {
|
|
143
|
+
cy.get('[data-cy^="user-app-role-"]').first().should('be.visible')
|
|
144
|
+
cy.log('✅ App role displayed')
|
|
145
|
+
} else {
|
|
146
|
+
// Role is shown as text in table, check for role-related content
|
|
147
|
+
cy.get(superadmin.selectors.usersTable).should('be.visible')
|
|
148
|
+
cy.log('⚠️ App role shown as table column, not dedicated selector')
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
describe('ADMIN-USERS-007: User Verified Status', () => {
|
|
155
|
+
it('should display email verification status', () => {
|
|
156
|
+
allure.severity('normal')
|
|
157
|
+
|
|
158
|
+
// 1. Visit Sector7 Users
|
|
159
|
+
superadmin.visitUsers()
|
|
160
|
+
|
|
161
|
+
// 2. Check for verification status (defensive check)
|
|
162
|
+
cy.get(superadmin.selectors.usersContainer).then(($container) => {
|
|
163
|
+
if ($container.find('[data-cy="user-verified-status"]').length > 0) {
|
|
164
|
+
cy.get('[data-cy="user-verified-status"]').first().should('be.visible')
|
|
165
|
+
cy.log('✅ Verification status displayed')
|
|
166
|
+
} else {
|
|
167
|
+
// Status is shown in table, check for table visibility
|
|
168
|
+
cy.get(superadmin.selectors.usersTable).should('be.visible')
|
|
169
|
+
cy.log('⚠️ Verification status shown in table, not dedicated selector')
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
describe('ADMIN-USERS-008: Navigate Back to Dashboard', () => {
|
|
176
|
+
it('should navigate back to Sector7 dashboard', () => {
|
|
177
|
+
allure.severity('normal')
|
|
178
|
+
|
|
179
|
+
// 1. Visit Sector7 Users
|
|
180
|
+
superadmin.visitUsers()
|
|
181
|
+
|
|
182
|
+
// 2. Click on dashboard nav
|
|
183
|
+
superadmin.clickNavDashboard()
|
|
184
|
+
|
|
185
|
+
// 3. Validate back at dashboard
|
|
186
|
+
cy.url().should('match', /\/superadmin\/?$/)
|
|
187
|
+
superadmin.assertDashboardVisible()
|
|
188
|
+
|
|
189
|
+
cy.log('✅ Navigation to dashboard works')
|
|
190
|
+
})
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
describe('ADMIN-USERS-009: User Team Memberships', () => {
|
|
194
|
+
it('should display team memberships for users', () => {
|
|
195
|
+
allure.severity('normal')
|
|
196
|
+
|
|
197
|
+
// 1. Visit Sector7 Users
|
|
198
|
+
superadmin.visitUsers()
|
|
199
|
+
|
|
200
|
+
// 2. Check user details for team info (defensive check)
|
|
201
|
+
cy.get(superadmin.selectors.usersContainer).then(($container) => {
|
|
202
|
+
if ($container.find('[data-cy="user-teams-count"]').length > 0) {
|
|
203
|
+
cy.get('[data-cy="user-teams-count"]').first().should('be.visible')
|
|
204
|
+
cy.log('✅ Team memberships displayed')
|
|
205
|
+
} else {
|
|
206
|
+
// Team info not shown in list view, verify table is visible
|
|
207
|
+
cy.get(superadmin.selectors.usersTable).should('be.visible')
|
|
208
|
+
cy.log('⚠️ Team memberships not displayed in list view (available in detail)')
|
|
209
|
+
}
|
|
210
|
+
})
|
|
211
|
+
})
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
describe('ADMIN-USERS-010: User Metadata Box', () => {
|
|
215
|
+
it('should display user metadata card in user detail view', () => {
|
|
216
|
+
allure.severity('normal')
|
|
217
|
+
|
|
218
|
+
// 1. Visit Sector7 Users
|
|
219
|
+
superadmin.visitUsers()
|
|
220
|
+
|
|
221
|
+
// 2. Navigate to first user's detail view
|
|
222
|
+
cy.get('body').then(($body) => {
|
|
223
|
+
if ($body.find('[data-cy^="superadmin-user-row"]').length > 0) {
|
|
224
|
+
cy.get('[data-cy^="superadmin-user-row"]').first().click()
|
|
225
|
+
|
|
226
|
+
// 3. Wait for user detail page to load
|
|
227
|
+
cy.url().should('include', '/superadmin/users/')
|
|
228
|
+
|
|
229
|
+
// 4. Validate User Metadata card is visible
|
|
230
|
+
cy.get('[data-cy="superadmin-user-metas"]').should('be.visible')
|
|
231
|
+
cy.get('[data-cy="superadmin-user-metas-title"]').should('be.visible')
|
|
232
|
+
cy.get('[data-cy="superadmin-user-metas-title"]').should('contain', 'User Metadata')
|
|
233
|
+
|
|
234
|
+
cy.log('✅ User Metadata card visible in user detail')
|
|
235
|
+
} else {
|
|
236
|
+
cy.log('⚠️ No user rows found to test metadata view')
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
it('should display metadata table or empty state', () => {
|
|
242
|
+
allure.severity('normal')
|
|
243
|
+
|
|
244
|
+
// 1. Visit Sector7 Users
|
|
245
|
+
superadmin.visitUsers()
|
|
246
|
+
|
|
247
|
+
// 2. Navigate to first user's detail view
|
|
248
|
+
cy.get('body').then(($body) => {
|
|
249
|
+
if ($body.find('[data-cy^="superadmin-user-row"]').length > 0) {
|
|
250
|
+
cy.get('[data-cy^="superadmin-user-row"]').first().click()
|
|
251
|
+
|
|
252
|
+
// 3. Wait for user detail page to load
|
|
253
|
+
cy.url().should('include', '/superadmin/users/')
|
|
254
|
+
|
|
255
|
+
// 4. Check for either table or empty state
|
|
256
|
+
cy.get('[data-cy="superadmin-user-metas"]').within(() => {
|
|
257
|
+
cy.get('body').then(() => {
|
|
258
|
+
// Either table or empty state should be present
|
|
259
|
+
cy.document().then((doc) => {
|
|
260
|
+
const hasTable = doc.querySelector('[data-cy="superadmin-user-metas-table"]')
|
|
261
|
+
const hasEmpty = doc.querySelector('[data-cy="superadmin-user-metas-empty"]')
|
|
262
|
+
|
|
263
|
+
if (hasTable) {
|
|
264
|
+
cy.get('[data-cy="superadmin-user-metas-table"]').should('be.visible')
|
|
265
|
+
// Verify table has expected headers
|
|
266
|
+
cy.get('[data-cy="superadmin-user-metas-table"]').within(() => {
|
|
267
|
+
cy.contains('Key').should('be.visible')
|
|
268
|
+
cy.contains('Value').should('be.visible')
|
|
269
|
+
cy.contains('Type').should('be.visible')
|
|
270
|
+
cy.contains('Public').should('be.visible')
|
|
271
|
+
cy.contains('Searchable').should('be.visible')
|
|
272
|
+
})
|
|
273
|
+
cy.log('✅ User Metadata table displayed with records')
|
|
274
|
+
} else if (hasEmpty) {
|
|
275
|
+
cy.get('[data-cy="superadmin-user-metas-empty"]').should('be.visible')
|
|
276
|
+
cy.get('[data-cy="superadmin-user-metas-empty"]').should('contain', 'No metadata')
|
|
277
|
+
cy.log('✅ User Metadata empty state displayed')
|
|
278
|
+
} else {
|
|
279
|
+
cy.log('⚠️ Neither table nor empty state found')
|
|
280
|
+
}
|
|
281
|
+
})
|
|
282
|
+
})
|
|
283
|
+
})
|
|
284
|
+
} else {
|
|
285
|
+
cy.log('⚠️ No user rows found to test metadata view')
|
|
286
|
+
}
|
|
287
|
+
})
|
|
288
|
+
})
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
after(() => {
|
|
292
|
+
cy.log('✅ Sector7 all users tests completed')
|
|
293
|
+
})
|
|
294
|
+
})
|