@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,247 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Owner Role - Full CRUD Permissions
|
|
5
|
+
*
|
|
6
|
+
* Tests to verify that Owner role maintains full CRUD access to customers.
|
|
7
|
+
* This validates that extensible roles don't break existing owner capabilities.
|
|
8
|
+
*
|
|
9
|
+
* Test user: Carlos Mendoza (carlos.mendoza@nextspark.dev) - Everpoint Labs
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import * as allure from 'allure-cypress'
|
|
13
|
+
|
|
14
|
+
import { CustomersPOM } from '../../../src/entities/CustomersPOM'
|
|
15
|
+
import { loginAsDefaultOwner } from '../../../src/session-helpers'
|
|
16
|
+
|
|
17
|
+
describe('Owner Role - Full CRUD Permissions', {
|
|
18
|
+
tags: ['@uat', '@feat-teams', '@security', '@role-owner', '@regression']
|
|
19
|
+
}, () => {
|
|
20
|
+
const customers = CustomersPOM.create()
|
|
21
|
+
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
allure.epic('UAT')
|
|
24
|
+
allure.feature('Permissions')
|
|
25
|
+
allure.story('Owner Full CRUD')
|
|
26
|
+
customers.setupApiIntercepts()
|
|
27
|
+
loginAsDefaultOwner()
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
describe('UI Access - All Buttons Visible', { tags: '@smoke' }, () => {
|
|
31
|
+
it('OWNER_CRUD_001: Owner sees Add button on customers list', { tags: '@smoke' }, () => {
|
|
32
|
+
allure.severity('critical')
|
|
33
|
+
|
|
34
|
+
customers.visitList()
|
|
35
|
+
customers.api.waitForList()
|
|
36
|
+
customers.waitForList()
|
|
37
|
+
|
|
38
|
+
// Owner should see the Add button
|
|
39
|
+
cy.get(customers.selectors.addButton).should('be.visible')
|
|
40
|
+
|
|
41
|
+
cy.log('✅ Owner can see Add button')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('OWNER_CRUD_002: Owner sees row actions menu on customer rows', { tags: '@smoke' }, () => {
|
|
45
|
+
allure.severity('critical')
|
|
46
|
+
|
|
47
|
+
customers.visitList()
|
|
48
|
+
customers.api.waitForList()
|
|
49
|
+
customers.waitForList()
|
|
50
|
+
|
|
51
|
+
cy.get('body').then($body => {
|
|
52
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
53
|
+
// Row actions menu trigger should be visible (Owner has edit/delete permissions)
|
|
54
|
+
cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().should('be.visible')
|
|
55
|
+
|
|
56
|
+
cy.log('✅ Owner can see row actions menu on rows')
|
|
57
|
+
} else {
|
|
58
|
+
cy.log('⚠️ No customers to check row actions')
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('OWNER_CRUD_003: Owner sees Edit and Delete options in row menu', () => {
|
|
64
|
+
allure.severity('critical')
|
|
65
|
+
|
|
66
|
+
customers.visitList()
|
|
67
|
+
customers.api.waitForList()
|
|
68
|
+
customers.waitForList()
|
|
69
|
+
|
|
70
|
+
cy.get('body').then($body => {
|
|
71
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
72
|
+
// Open the first row's menu
|
|
73
|
+
cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
|
|
74
|
+
|
|
75
|
+
// Edit and Delete options should be visible in the dropdown
|
|
76
|
+
cy.get('[role="menuitem"]').contains('Edit').should('be.visible')
|
|
77
|
+
cy.get('[role="menuitem"]').contains('Delete').should('be.visible')
|
|
78
|
+
|
|
79
|
+
// Close dropdown by pressing escape
|
|
80
|
+
cy.get('body').type('{esc}')
|
|
81
|
+
|
|
82
|
+
cy.log('✅ Owner can see Edit and Delete in row menu')
|
|
83
|
+
} else {
|
|
84
|
+
cy.log('⚠️ No customers to check row menu')
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
describe('CRUD Operations - Full Access', () => {
|
|
91
|
+
it('OWNER_CRUD_004: Owner can access customer create form', () => {
|
|
92
|
+
allure.severity('critical')
|
|
93
|
+
|
|
94
|
+
customers.visitList()
|
|
95
|
+
customers.api.waitForList()
|
|
96
|
+
|
|
97
|
+
// Click Add button
|
|
98
|
+
cy.get(customers.selectors.addButton).click()
|
|
99
|
+
|
|
100
|
+
// Should navigate to create form
|
|
101
|
+
cy.url().should('include', '/create')
|
|
102
|
+
customers.waitForForm()
|
|
103
|
+
|
|
104
|
+
cy.log('✅ Owner can access customer create form')
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('OWNER_CRUD_005: Owner can access create form and see submit button', () => {
|
|
108
|
+
allure.severity('critical')
|
|
109
|
+
|
|
110
|
+
customers.visitCreate()
|
|
111
|
+
customers.waitForForm()
|
|
112
|
+
|
|
113
|
+
// Owner should see the form fields
|
|
114
|
+
cy.get(`[data-cy="${customers.entitySlug}-field-name"]`).should('be.visible')
|
|
115
|
+
cy.get(`[data-cy="${customers.entitySlug}-field-account"]`).should('be.visible')
|
|
116
|
+
|
|
117
|
+
// Owner should see the submit button
|
|
118
|
+
cy.get(`[data-cy="${customers.entitySlug}-form-submit"]`).should('be.visible')
|
|
119
|
+
|
|
120
|
+
cy.log('✅ Owner can access create form with submit capability')
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
it('OWNER_CRUD_006: Owner can access customer edit form', () => {
|
|
124
|
+
allure.severity('critical')
|
|
125
|
+
|
|
126
|
+
customers.visitList()
|
|
127
|
+
customers.api.waitForList()
|
|
128
|
+
customers.waitForList()
|
|
129
|
+
|
|
130
|
+
cy.get('body').then($body => {
|
|
131
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
132
|
+
// Open the first row's menu and click Edit
|
|
133
|
+
cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
|
|
134
|
+
cy.get('[role="menuitem"]').contains('Edit').click()
|
|
135
|
+
|
|
136
|
+
// Should navigate to edit form
|
|
137
|
+
cy.url().should('include', '/edit')
|
|
138
|
+
customers.waitForForm()
|
|
139
|
+
|
|
140
|
+
cy.log('✅ Owner can access customer edit form')
|
|
141
|
+
} else {
|
|
142
|
+
cy.log('⚠️ No customers to test edit access')
|
|
143
|
+
}
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
it('OWNER_CRUD_007: Owner can access edit form with submit capability', () => {
|
|
148
|
+
allure.severity('critical')
|
|
149
|
+
|
|
150
|
+
customers.visitList()
|
|
151
|
+
customers.api.waitForList()
|
|
152
|
+
customers.waitForList()
|
|
153
|
+
|
|
154
|
+
cy.get('body').then($body => {
|
|
155
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
156
|
+
// Open the first row's menu and click Edit
|
|
157
|
+
cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
|
|
158
|
+
cy.get('[role="menuitem"]').contains('Edit').click()
|
|
159
|
+
customers.waitForForm()
|
|
160
|
+
|
|
161
|
+
// Owner should see the form fields
|
|
162
|
+
cy.get(`[data-cy="${customers.entitySlug}-field-name"]`).should('be.visible')
|
|
163
|
+
|
|
164
|
+
// Owner should see the submit button
|
|
165
|
+
cy.get(`[data-cy="${customers.entitySlug}-form-submit"]`).should('be.visible')
|
|
166
|
+
|
|
167
|
+
cy.log('✅ Owner can access edit form with submit capability')
|
|
168
|
+
} else {
|
|
169
|
+
cy.log('⚠️ No customers to test edit access')
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
it('OWNER_CRUD_008: Owner can see Delete option in row menu', () => {
|
|
175
|
+
allure.severity('critical')
|
|
176
|
+
|
|
177
|
+
customers.visitList()
|
|
178
|
+
customers.api.waitForList()
|
|
179
|
+
customers.waitForList()
|
|
180
|
+
|
|
181
|
+
cy.get('body').then($body => {
|
|
182
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
183
|
+
// Open the first row's menu
|
|
184
|
+
cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
|
|
185
|
+
|
|
186
|
+
// Owner should see the Delete option (this verifies delete permission)
|
|
187
|
+
cy.get('[role="menuitem"]').contains('Delete').should('be.visible')
|
|
188
|
+
|
|
189
|
+
// Close dropdown
|
|
190
|
+
cy.get('body').type('{esc}')
|
|
191
|
+
|
|
192
|
+
cy.log('✅ Owner can see Delete option in row menu')
|
|
193
|
+
} else {
|
|
194
|
+
cy.log('⚠️ No customers to test delete capability')
|
|
195
|
+
}
|
|
196
|
+
})
|
|
197
|
+
})
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
describe('Direct URL Access - Full Access', () => {
|
|
201
|
+
it('OWNER_CRUD_009: Owner can access /customers/create via URL', () => {
|
|
202
|
+
cy.visit(`/dashboard/${customers.entitySlug}/create`)
|
|
203
|
+
|
|
204
|
+
// Should NOT show permission denied
|
|
205
|
+
cy.get('[data-cy="permission-denied"]').should('not.exist')
|
|
206
|
+
|
|
207
|
+
// Should show form
|
|
208
|
+
customers.waitForForm()
|
|
209
|
+
|
|
210
|
+
cy.log('✅ Owner can access create via direct URL')
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
it('OWNER_CRUD_010: Owner can access /customers/[id]/edit via URL', () => {
|
|
214
|
+
customers.visitList()
|
|
215
|
+
customers.api.waitForList()
|
|
216
|
+
|
|
217
|
+
cy.get('body').then($body => {
|
|
218
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
219
|
+
// Extract customer ID
|
|
220
|
+
cy.get(customers.selectors.rowGeneric).first()
|
|
221
|
+
.invoke('attr', 'data-cy')
|
|
222
|
+
.then((dataCy) => {
|
|
223
|
+
const customerId = dataCy?.replace(`${customers.entitySlug}-row-`, '')
|
|
224
|
+
|
|
225
|
+
if (customerId) {
|
|
226
|
+
cy.visit(`/dashboard/${customers.entitySlug}/${customerId}/edit`)
|
|
227
|
+
|
|
228
|
+
// Should NOT show permission denied
|
|
229
|
+
cy.get('[data-cy="permission-denied"]').should('not.exist')
|
|
230
|
+
|
|
231
|
+
// Should show form
|
|
232
|
+
customers.waitForForm()
|
|
233
|
+
|
|
234
|
+
cy.log('✅ Owner can access edit via direct URL')
|
|
235
|
+
}
|
|
236
|
+
})
|
|
237
|
+
} else {
|
|
238
|
+
cy.log('⚠️ No customers to test direct URL edit')
|
|
239
|
+
}
|
|
240
|
+
})
|
|
241
|
+
})
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
after(() => {
|
|
245
|
+
cy.log('✅ Owner CRUD permission tests completed')
|
|
246
|
+
})
|
|
247
|
+
})
|