@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,163 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Member Team Role Login Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Member team role login and specific restrictions:
|
|
7
|
+
* - Read-only access to most entities
|
|
8
|
+
* - Cannot create/update/delete (restricted)
|
|
9
|
+
* - Limited navigation
|
|
10
|
+
* - No settings or billing access
|
|
11
|
+
* - Cannot access /dev or /superadmin (app roles only)
|
|
12
|
+
*
|
|
13
|
+
* Note: Basic login is tested in login-logout.cy.ts
|
|
14
|
+
* This file focuses on Member-specific restrictions.
|
|
15
|
+
*
|
|
16
|
+
* Tags: @uat, @feat-auth, @team-role, @member
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import * as allure from 'allure-cypress'
|
|
20
|
+
|
|
21
|
+
import { loginAsDefaultMember, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
|
|
22
|
+
import { DashboardPOM } from '../../../../src/features/DashboardPOM'
|
|
23
|
+
import { SettingsPOM } from '../../../../src/features/SettingsPOM'
|
|
24
|
+
import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
|
|
25
|
+
import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
|
|
26
|
+
|
|
27
|
+
describe('Authentication - Member Team Role Restrictions', {
|
|
28
|
+
tags: ['@uat', '@feat-auth', '@team-role', '@member']
|
|
29
|
+
}, () => {
|
|
30
|
+
const dashboard = DashboardPOM.create()
|
|
31
|
+
const settings = SettingsPOM.create()
|
|
32
|
+
const sector7 = SuperadminPOM.create()
|
|
33
|
+
const devArea = DevAreaPOM.create()
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
allure.epic('Authentication')
|
|
37
|
+
allure.feature('Team Roles')
|
|
38
|
+
allure.story('Member Restrictions')
|
|
39
|
+
loginAsDefaultMember()
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
describe('MEMBER-PERM-001: Member Dashboard Access', { tags: '@smoke' }, () => {
|
|
43
|
+
it('should access dashboard with limited navigation', { tags: '@smoke' }, () => {
|
|
44
|
+
allure.severity('critical')
|
|
45
|
+
|
|
46
|
+
// 1. Visit dashboard and wait for load
|
|
47
|
+
dashboard.visitDashboard()
|
|
48
|
+
dashboard.waitForDashboard()
|
|
49
|
+
|
|
50
|
+
// 2. Validate dashboard is accessible
|
|
51
|
+
dashboard.assertDashboardVisible()
|
|
52
|
+
|
|
53
|
+
cy.log(`✅ Member dashboard access verified (${DEFAULT_THEME_USERS.MEMBER})`)
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
describe('MEMBER-PERM-002: Member Read-Only Entity Access', { tags: '@smoke' }, () => {
|
|
58
|
+
it('should have read-only access to customers', { tags: '@smoke' }, () => {
|
|
59
|
+
allure.severity('critical')
|
|
60
|
+
|
|
61
|
+
// 1. Navigate to customers
|
|
62
|
+
dashboard.visitEntity('customers')
|
|
63
|
+
dashboard.waitForEntityPage('customers')
|
|
64
|
+
|
|
65
|
+
// 2. Validate table is visible (Member can read)
|
|
66
|
+
dashboard.assertEntityPageVisible('customers')
|
|
67
|
+
|
|
68
|
+
// 3. Create button should NOT be visible for Member
|
|
69
|
+
dashboard.assertEntityAddButtonNotVisible('customers')
|
|
70
|
+
|
|
71
|
+
cy.log('✅ Member has read-only access to customers')
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
describe('MEMBER-PERM-003: Member Create Permissions per Entity', () => {
|
|
76
|
+
it('should have entity-specific create permissions', () => {
|
|
77
|
+
allure.severity('high')
|
|
78
|
+
|
|
79
|
+
// 1. Check customers page - Member CANNOT create customers
|
|
80
|
+
// (customers.create roles: ['owner', 'admin'])
|
|
81
|
+
dashboard.visitEntity('customers')
|
|
82
|
+
dashboard.waitForEntityPage('customers')
|
|
83
|
+
dashboard.assertEntityAddButtonNotVisible('customers')
|
|
84
|
+
|
|
85
|
+
// 2. Check tasks page - Member CAN create tasks
|
|
86
|
+
// (tasks.create roles: ['owner', 'admin', 'member'])
|
|
87
|
+
dashboard.visitEntity('tasks')
|
|
88
|
+
dashboard.waitForEntityPage('tasks')
|
|
89
|
+
dashboard.assertEntityAddButtonVisible('tasks')
|
|
90
|
+
|
|
91
|
+
cy.log('✅ Member has correct entity-specific create permissions')
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
describe('MEMBER-PERM-004: Member Settings Restricted', () => {
|
|
96
|
+
it('should have limited or no settings access', () => {
|
|
97
|
+
allure.severity('high')
|
|
98
|
+
|
|
99
|
+
// 1. Navigate to settings
|
|
100
|
+
settings.visitSettings()
|
|
101
|
+
|
|
102
|
+
// 2. Check access
|
|
103
|
+
cy.url().then((url) => {
|
|
104
|
+
if (url.includes('/settings')) {
|
|
105
|
+
// If accessible, should only see profile
|
|
106
|
+
settings.assertSettingsVisible()
|
|
107
|
+
settings.assertNavItemVisible('profile')
|
|
108
|
+
// Team nav should not be visible
|
|
109
|
+
settings.assertNavItemNotVisible('team')
|
|
110
|
+
cy.log('✅ Member has limited settings access (profile only)')
|
|
111
|
+
} else {
|
|
112
|
+
cy.log('✅ Member redirected from settings')
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
describe('MEMBER-PERM-005: Member Billing Blocked', () => {
|
|
119
|
+
it('should not have access to billing', () => {
|
|
120
|
+
allure.severity('high')
|
|
121
|
+
|
|
122
|
+
// 1. Navigate to billing
|
|
123
|
+
cy.visit('/dashboard/settings/billing', { timeout: 60000, failOnStatusCode: false })
|
|
124
|
+
|
|
125
|
+
// 2. Should be redirected or access denied
|
|
126
|
+
cy.url().should('not.include', '/billing')
|
|
127
|
+
|
|
128
|
+
cy.log('✅ Member correctly blocked from billing')
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
describe('MEMBER-PERM-006: Member Cannot Access Superadmin', () => {
|
|
133
|
+
it('should be redirected when trying to access /superadmin', () => {
|
|
134
|
+
allure.severity('high')
|
|
135
|
+
|
|
136
|
+
// 1. Attempt to visit Superadmin
|
|
137
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
138
|
+
|
|
139
|
+
// 2. Should be redirected
|
|
140
|
+
sector7.assertAccessDenied()
|
|
141
|
+
|
|
142
|
+
cy.log('✅ Member correctly blocked from Superadmin')
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
describe('MEMBER-PERM-007: Member Cannot Access Dev Zone', () => {
|
|
147
|
+
it('should be redirected when trying to access /dev', () => {
|
|
148
|
+
allure.severity('high')
|
|
149
|
+
|
|
150
|
+
// 1. Attempt to visit Dev Zone
|
|
151
|
+
devArea.attemptToVisitDev()
|
|
152
|
+
|
|
153
|
+
// 2. Should be redirected
|
|
154
|
+
devArea.assertRedirectedToDashboard()
|
|
155
|
+
|
|
156
|
+
cy.log('✅ Member correctly blocked from Dev Zone')
|
|
157
|
+
})
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
after(() => {
|
|
161
|
+
cy.log('✅ Member team role tests completed')
|
|
162
|
+
})
|
|
163
|
+
})
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Owner Team Role Permissions
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [auth, team-role, owner, permissions, security]
|
|
5
|
+
grepTags: [uat, feat-auth, team-role, owner]
|
|
6
|
+
coverage: 6
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Owner Team Role Permissions
|
|
10
|
+
|
|
11
|
+
> Tests for Owner team role permissions and access control. Owner is the highest team-based role with full CRUD access to all entities, team settings, and billing. Does not have access to app-role areas like /dev or /sector7.
|
|
12
|
+
|
|
13
|
+
## @test OWNER-PERM-001: Owner Dashboard Access
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** owner, dashboard, navigation
|
|
19
|
+
- **Grep:** `@smoke`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Owner can access dashboard with full navigation
|
|
23
|
+
|
|
24
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
25
|
+
When I visit /dashboard
|
|
26
|
+
Then the dashboard container should be visible
|
|
27
|
+
And I should see navigation for customers
|
|
28
|
+
And I should see navigation for tasks
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```gherkin:es
|
|
32
|
+
Scenario: Owner puede acceder al dashboard con navegacion completa
|
|
33
|
+
|
|
34
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
35
|
+
When visito /dashboard
|
|
36
|
+
Then el contenedor del dashboard deberia estar visible
|
|
37
|
+
And deberia ver navegacion a customers
|
|
38
|
+
And deberia ver navegacion a tasks
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Expected Results
|
|
42
|
+
- Dashboard loads correctly
|
|
43
|
+
- All navigation items visible
|
|
44
|
+
- No restrictions on sidebar
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## @test OWNER-PERM-002: Owner Full Entity Access
|
|
49
|
+
|
|
50
|
+
### Metadata
|
|
51
|
+
- **Priority:** Critical
|
|
52
|
+
- **Type:** Smoke
|
|
53
|
+
- **Tags:** owner, customers, crud
|
|
54
|
+
- **Grep:** `@smoke`
|
|
55
|
+
|
|
56
|
+
```gherkin:en
|
|
57
|
+
Scenario: Owner has full CRUD access to customers
|
|
58
|
+
|
|
59
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
60
|
+
When I visit /customers
|
|
61
|
+
Then the create button should be visible
|
|
62
|
+
And the entity list should be visible
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```gherkin:es
|
|
66
|
+
Scenario: Owner tiene acceso CRUD completo a customers
|
|
67
|
+
|
|
68
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
69
|
+
When visito /customers
|
|
70
|
+
Then el boton de crear deberia estar visible
|
|
71
|
+
And la lista de entidades deberia estar visible
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Expected Results
|
|
75
|
+
- Create button is visible (can create)
|
|
76
|
+
- List is visible (can read)
|
|
77
|
+
- Edit/Delete buttons available on items
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## @test OWNER-PERM-003: Owner Team Settings Access
|
|
82
|
+
|
|
83
|
+
### Metadata
|
|
84
|
+
- **Priority:** High
|
|
85
|
+
- **Type:** Regression
|
|
86
|
+
- **Tags:** owner, settings, team
|
|
87
|
+
|
|
88
|
+
```gherkin:en
|
|
89
|
+
Scenario: Owner can access team settings
|
|
90
|
+
|
|
91
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
92
|
+
When I visit /settings
|
|
93
|
+
Then the settings container should be visible
|
|
94
|
+
And the team settings tab should be visible
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```gherkin:es
|
|
98
|
+
Scenario: Owner puede acceder a configuracion de equipo
|
|
99
|
+
|
|
100
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
101
|
+
When visito /settings
|
|
102
|
+
Then el contenedor de settings deberia estar visible
|
|
103
|
+
And la pestana de team settings deberia estar visible
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Expected Results
|
|
107
|
+
- Settings page loads
|
|
108
|
+
- Team settings tab accessible
|
|
109
|
+
- Can manage team configuration
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## @test OWNER-PERM-004: Owner Billing Access
|
|
114
|
+
|
|
115
|
+
### Metadata
|
|
116
|
+
- **Priority:** High
|
|
117
|
+
- **Type:** Regression
|
|
118
|
+
- **Tags:** owner, billing
|
|
119
|
+
|
|
120
|
+
```gherkin:en
|
|
121
|
+
Scenario: Owner can access billing
|
|
122
|
+
|
|
123
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
124
|
+
When I visit /billing
|
|
125
|
+
Then the billing container should be visible
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```gherkin:es
|
|
129
|
+
Scenario: Owner puede acceder a billing
|
|
130
|
+
|
|
131
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
132
|
+
When visito /billing
|
|
133
|
+
Then el contenedor de billing deberia estar visible
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Expected Results
|
|
137
|
+
- Billing page loads
|
|
138
|
+
- Plan information visible
|
|
139
|
+
- Upgrade options available
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## @test OWNER-PERM-005: Owner Cannot Access Sector7
|
|
144
|
+
|
|
145
|
+
### Metadata
|
|
146
|
+
- **Priority:** High
|
|
147
|
+
- **Type:** Security
|
|
148
|
+
- **Tags:** owner, sector7, blocked
|
|
149
|
+
|
|
150
|
+
```gherkin:en
|
|
151
|
+
Scenario: Owner is blocked from Sector7
|
|
152
|
+
|
|
153
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
154
|
+
When I attempt to visit /sector7
|
|
155
|
+
Then I should be redirected away from /sector7
|
|
156
|
+
And the URL should include /dashboard or error=access_denied
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
```gherkin:es
|
|
160
|
+
Scenario: Owner no puede acceder a Sector7
|
|
161
|
+
|
|
162
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
163
|
+
When intento visitar /sector7
|
|
164
|
+
Then deberia ser redirigido fuera de /sector7
|
|
165
|
+
And la URL deberia incluir /dashboard o error=access_denied
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Expected Results
|
|
169
|
+
- Access denied to Sector7
|
|
170
|
+
- Redirect to dashboard with error
|
|
171
|
+
- Security control working
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## @test OWNER-PERM-006: Owner Cannot Access Dev Zone
|
|
176
|
+
|
|
177
|
+
### Metadata
|
|
178
|
+
- **Priority:** High
|
|
179
|
+
- **Type:** Security
|
|
180
|
+
- **Tags:** owner, dev-zone, blocked
|
|
181
|
+
|
|
182
|
+
```gherkin:en
|
|
183
|
+
Scenario: Owner is blocked from Dev Zone
|
|
184
|
+
|
|
185
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
186
|
+
When I attempt to visit /dev
|
|
187
|
+
Then I should be redirected away from /dev
|
|
188
|
+
And the URL should include /dashboard or error=access_denied
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
```gherkin:es
|
|
192
|
+
Scenario: Owner no puede acceder a Dev Zone
|
|
193
|
+
|
|
194
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
195
|
+
When intento visitar /dev
|
|
196
|
+
Then deberia ser redirigido fuera de /dev
|
|
197
|
+
And la URL deberia incluir /dashboard o error=access_denied
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Expected Results
|
|
201
|
+
- Access denied to Dev Zone
|
|
202
|
+
- Redirect to dashboard with error
|
|
203
|
+
- Security control working
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## UI Elements
|
|
208
|
+
|
|
209
|
+
| Element | Selector | Description |
|
|
210
|
+
|---------|----------|-------------|
|
|
211
|
+
| Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
|
|
212
|
+
| Customers Nav | `[data-cy="sidebar-nav-customers"]` | Customers navigation item |
|
|
213
|
+
| Tasks Nav | `[data-cy="sidebar-nav-tasks"]` | Tasks navigation item |
|
|
214
|
+
| Create Button | `[data-cy="entity-create-button"]` | Entity create button |
|
|
215
|
+
| Entity List | `[data-cy="entity-list-container"]` | Entity list container |
|
|
216
|
+
| Settings Container | `[data-cy="settings-container"]` | Settings page container |
|
|
217
|
+
| Team Settings Tab | `[data-cy="settings-tab-team"]` | Team settings tab |
|
|
218
|
+
| Billing Container | `[data-cy="billing-container"]` | Billing page container |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Summary
|
|
223
|
+
|
|
224
|
+
| Test ID | Block | Description | Tags |
|
|
225
|
+
|---------|-------|-------------|------|
|
|
226
|
+
| OWNER-PERM-001 | Access | Dashboard with full navigation | `@smoke` |
|
|
227
|
+
| OWNER-PERM-002 | Access | Full CRUD access to customers | `@smoke` |
|
|
228
|
+
| OWNER-PERM-003 | Access | Team settings access | |
|
|
229
|
+
| OWNER-PERM-004 | Access | Billing access | |
|
|
230
|
+
| OWNER-PERM-005 | Blocked | Cannot access Sector7 | |
|
|
231
|
+
| OWNER-PERM-006 | Blocked | Cannot access Dev Zone | |
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Owner Team Role Login Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Owner team role login and specific permissions:
|
|
7
|
+
* - Full CRUD access to all entities
|
|
8
|
+
* - Team settings access
|
|
9
|
+
* - Billing access
|
|
10
|
+
* - Member management
|
|
11
|
+
* - Cannot access /dev or /superadmin (app roles only)
|
|
12
|
+
*
|
|
13
|
+
* Note: Basic login is tested in login-logout.cy.ts
|
|
14
|
+
* This file focuses on Owner-specific permissions and access.
|
|
15
|
+
*
|
|
16
|
+
* Tags: @uat, @feat-auth, @team-role, @owner
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import * as allure from 'allure-cypress'
|
|
20
|
+
|
|
21
|
+
import { loginAsDefaultOwner, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
|
|
22
|
+
import { DashboardPOM } from '../../../../src/features/DashboardPOM'
|
|
23
|
+
import { SettingsPOM } from '../../../../src/features/SettingsPOM'
|
|
24
|
+
import { BillingPOM } from '../../../../src/features/BillingPOM'
|
|
25
|
+
import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
|
|
26
|
+
import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
|
|
27
|
+
|
|
28
|
+
describe('Authentication - Owner Team Role Permissions', {
|
|
29
|
+
tags: ['@uat', '@feat-auth', '@team-role', '@owner']
|
|
30
|
+
}, () => {
|
|
31
|
+
const dashboard = DashboardPOM.create()
|
|
32
|
+
const settings = SettingsPOM.create()
|
|
33
|
+
const billing = BillingPOM.create()
|
|
34
|
+
const sector7 = SuperadminPOM.create()
|
|
35
|
+
const devArea = DevAreaPOM.create()
|
|
36
|
+
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
allure.epic('Authentication')
|
|
39
|
+
allure.feature('Team Roles')
|
|
40
|
+
allure.story('Owner Permissions')
|
|
41
|
+
loginAsDefaultOwner()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
describe('OWNER-PERM-001: Owner Dashboard Access', { tags: '@smoke' }, () => {
|
|
45
|
+
it('should access dashboard with full navigation', { tags: '@smoke' }, () => {
|
|
46
|
+
allure.severity('critical')
|
|
47
|
+
|
|
48
|
+
// 1. Visit dashboard and wait for it to load
|
|
49
|
+
dashboard.visitDashboard()
|
|
50
|
+
dashboard.waitForDashboard()
|
|
51
|
+
|
|
52
|
+
// 2. Validate sidebar navigation items (Owner should see entity links)
|
|
53
|
+
dashboard.assertEntityNavVisible('customers')
|
|
54
|
+
dashboard.assertEntityNavVisible('tasks')
|
|
55
|
+
|
|
56
|
+
cy.log(`✅ Owner dashboard access verified (${DEFAULT_THEME_USERS.OWNER})`)
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
describe('OWNER-PERM-002: Owner Full Entity Access', { tags: '@smoke' }, () => {
|
|
61
|
+
it('should have full CRUD access to customers', { tags: '@smoke' }, () => {
|
|
62
|
+
allure.severity('critical')
|
|
63
|
+
|
|
64
|
+
// 1. Navigate to customers (correct route is /dashboard/customers)
|
|
65
|
+
dashboard.visitEntity('customers')
|
|
66
|
+
dashboard.waitForEntityPage('customers')
|
|
67
|
+
|
|
68
|
+
// 2. Validate create button is visible (Owner can create)
|
|
69
|
+
dashboard.assertEntityAddButtonVisible('customers')
|
|
70
|
+
|
|
71
|
+
// 3. Validate table is visible
|
|
72
|
+
dashboard.assertEntityPageVisible('customers')
|
|
73
|
+
|
|
74
|
+
cy.log('✅ Owner has full CRUD access to customers')
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
describe('OWNER-PERM-003: Owner Team Settings Access', { tags: '@in-develop' }, () => {
|
|
79
|
+
it('should access team settings page', { tags: '@in-develop' }, () => {
|
|
80
|
+
allure.severity('high')
|
|
81
|
+
|
|
82
|
+
// 1. Navigate to settings
|
|
83
|
+
settings.visitSettings()
|
|
84
|
+
settings.waitForSettings()
|
|
85
|
+
|
|
86
|
+
// 2. Validate settings page is accessible
|
|
87
|
+
settings.assertSettingsVisible()
|
|
88
|
+
|
|
89
|
+
// 3. Validate team settings nav is visible (key is 'teams' not 'team')
|
|
90
|
+
settings.assertNavItemVisible('teams')
|
|
91
|
+
|
|
92
|
+
cy.log('✅ Owner can access team settings')
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
describe('OWNER-PERM-004: Owner Billing Access', () => {
|
|
97
|
+
it('should access billing page', () => {
|
|
98
|
+
allure.severity('high')
|
|
99
|
+
|
|
100
|
+
// 1. Navigate to billing using BillingPOM
|
|
101
|
+
billing.visitBilling()
|
|
102
|
+
|
|
103
|
+
// 2. Validate billing page is accessible
|
|
104
|
+
billing.assertBillingPageVisible()
|
|
105
|
+
|
|
106
|
+
cy.log('✅ Owner can access billing')
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
describe('OWNER-PERM-005: Owner Cannot Access Superadmin', () => {
|
|
111
|
+
it('should be redirected when trying to access /superadmin', () => {
|
|
112
|
+
allure.severity('high')
|
|
113
|
+
|
|
114
|
+
// 1. Attempt to visit Superadmin
|
|
115
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
116
|
+
|
|
117
|
+
// 2. Should be redirected (Owner is not superadmin)
|
|
118
|
+
sector7.assertAccessDenied()
|
|
119
|
+
|
|
120
|
+
cy.log('✅ Owner correctly blocked from Superadmin')
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
describe('OWNER-PERM-006: Owner Cannot Access Dev Zone', () => {
|
|
125
|
+
it('should be redirected when trying to access /dev', () => {
|
|
126
|
+
allure.severity('high')
|
|
127
|
+
|
|
128
|
+
// 1. Attempt to visit Dev Zone
|
|
129
|
+
devArea.attemptToVisitDev()
|
|
130
|
+
|
|
131
|
+
// 2. Should be redirected (Owner is not developer)
|
|
132
|
+
devArea.assertRedirectedToDashboard()
|
|
133
|
+
|
|
134
|
+
cy.log('✅ Owner correctly blocked from Dev Zone')
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
after(() => {
|
|
139
|
+
cy.log('✅ Owner team role tests completed')
|
|
140
|
+
})
|
|
141
|
+
})
|