@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.
Files changed (220) hide show
  1. package/package.json +1 -1
  2. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  3. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  4. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  5. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  6. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  7. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  8. package/tests/cypress/e2e/_docs/README.md +215 -0
  9. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  11. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  13. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  14. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  15. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  19. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  20. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  21. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  22. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  23. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  24. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  25. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  26. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  27. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  28. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  29. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  30. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  31. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  32. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  33. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  34. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  36. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  38. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  40. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  42. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  43. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  44. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  45. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  46. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  47. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  48. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  49. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  50. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  51. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  52. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  53. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  54. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  55. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  56. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  57. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  58. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  59. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  60. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  61. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  62. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  63. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  64. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  65. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  66. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  67. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  68. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  69. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  70. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  71. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  72. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  78. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  79. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  83. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  85. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  87. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  89. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  95. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  96. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  97. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  99. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  100. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  101. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  102. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  103. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  105. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  106. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  107. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  109. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  110. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  112. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  114. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  118. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  120. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  122. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  126. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  128. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  130. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  132. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  136. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  138. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  140. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  142. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  144. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  146. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  148. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  149. package/tests/cypress/fixtures/blocks.json +218 -0
  150. package/tests/cypress/fixtures/entities.json +78 -0
  151. package/tests/cypress/fixtures/page-builder.json +21 -0
  152. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  153. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  154. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  155. package/tests/cypress/src/components/EntityForm.ts +375 -0
  156. package/tests/cypress/src/components/EntityList.ts +389 -0
  157. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  158. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  159. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  160. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  161. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  162. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  163. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  164. package/tests/cypress/src/components/index.ts +21 -0
  165. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  166. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  167. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  168. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  169. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  170. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  171. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  172. package/tests/cypress/src/controllers/index.js +25 -0
  173. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  174. package/tests/cypress/src/core/BasePOM.ts +86 -0
  175. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  176. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  177. package/tests/cypress/src/core/index.ts +14 -0
  178. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  179. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  180. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  181. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  182. package/tests/cypress/src/entities/index.ts +14 -0
  183. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  184. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  185. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  186. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  187. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  188. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  189. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  190. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  191. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  192. package/tests/cypress/src/features/index.ts +28 -0
  193. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  194. package/tests/cypress/src/index.ts +101 -0
  195. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  196. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  198. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  199. package/tests/cypress/src/pages/index.js +5 -0
  200. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  201. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  202. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  203. package/tests/cypress/src/pages/public/index.js +6 -0
  204. package/tests/cypress/src/selectors.ts +46 -0
  205. package/tests/cypress/src/session-helpers.ts +500 -0
  206. package/tests/cypress/support/doc-commands.ts +260 -0
  207. package/tests/cypress.config.ts +150 -0
  208. package/tests/jest/components/post-header.test.tsx +377 -0
  209. package/tests/jest/config/role-config.test.ts +529 -0
  210. package/tests/jest/jest.config.ts +81 -0
  211. package/tests/jest/langchain/COVERAGE.md +372 -0
  212. package/tests/jest/langchain/guardrails.test.ts +465 -0
  213. package/tests/jest/langchain/streaming.test.ts +367 -0
  214. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  215. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  216. package/tests/jest/langchain/tracer.test.ts +823 -0
  217. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  218. package/tests/jest/validation/categories.test.ts +429 -0
  219. package/tests/jest/validation/posts.test.ts +546 -0
  220. 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
+ })