@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,739 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevtoolsPOM - Page Object Model for DevTools (/devtools)
|
|
3
|
+
*
|
|
4
|
+
* Provides methods for:
|
|
5
|
+
* - Navigation to /devtools pages (home, style, tests, config)
|
|
6
|
+
* - Sidebar interaction
|
|
7
|
+
* - Access control assertions
|
|
8
|
+
* - Page content validation
|
|
9
|
+
*
|
|
10
|
+
* @version 3.0 - Uses centralized selectors from cySelector()
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const devtools = new DevtoolsPOM()
|
|
14
|
+
* devtools.visitHome()
|
|
15
|
+
* .assertOnDevtoolsHome()
|
|
16
|
+
* .clickStyleGallery()
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { BasePOM } from '../core/BasePOM'
|
|
20
|
+
import { cySelector } from '../selectors'
|
|
21
|
+
|
|
22
|
+
export class DevtoolsPOM extends BasePOM {
|
|
23
|
+
// ============================================
|
|
24
|
+
// SELECTORS using centralized cySelector()
|
|
25
|
+
// ============================================
|
|
26
|
+
|
|
27
|
+
get selectors() {
|
|
28
|
+
return {
|
|
29
|
+
// Layout & Navigation
|
|
30
|
+
mobileHeader: cySelector('devtools.navigation.mobileHeader'),
|
|
31
|
+
sidebarCollapseToggle: cySelector('devtools.navigation.collapseToggle'),
|
|
32
|
+
|
|
33
|
+
// Navigation items
|
|
34
|
+
navHome: cySelector('devtools.navigation.navItem', { section: 'home' }),
|
|
35
|
+
navStyleGallery: cySelector('devtools.navigation.navItem', { section: 'stylegallery' }),
|
|
36
|
+
navTestCases: cySelector('devtools.navigation.navItem', { section: 'testcases' }),
|
|
37
|
+
navConfig: cySelector('devtools.navigation.navItem', { section: 'config' }),
|
|
38
|
+
|
|
39
|
+
// Exit navigation
|
|
40
|
+
exitToDashboard: cySelector('devtools.navigation.exitToDashboard'),
|
|
41
|
+
goToAdmin: cySelector('devtools.navigation.goToAdmin'),
|
|
42
|
+
|
|
43
|
+
// Home Page
|
|
44
|
+
homePage: cySelector('devtools.home.page'),
|
|
45
|
+
homeStyleLink: cySelector('devtools.home.styleLink'),
|
|
46
|
+
homeTestsLink: cySelector('devtools.home.testsLink'),
|
|
47
|
+
homeConfigLink: cySelector('devtools.home.configLink'),
|
|
48
|
+
|
|
49
|
+
// Style Gallery Page
|
|
50
|
+
stylePage: cySelector('devtools.style.page'),
|
|
51
|
+
styleTabComponents: cySelector('devtools.style.tabComponents'),
|
|
52
|
+
styleTabFieldTypes: cySelector('devtools.style.tabFieldTypes'),
|
|
53
|
+
styleTabTheme: cySelector('devtools.style.tabTheme'),
|
|
54
|
+
styleTabGuidelines: cySelector('devtools.style.tabGuidelines'),
|
|
55
|
+
styleComponentGallery: cySelector('devtools.style.componentGallery'),
|
|
56
|
+
styleFieldTypes: cySelector('devtools.style.fieldTypes'),
|
|
57
|
+
styleThemePreview: cySelector('devtools.style.themePreview'),
|
|
58
|
+
|
|
59
|
+
// Test Cases Page
|
|
60
|
+
testsPage: cySelector('devtools.tests.page'),
|
|
61
|
+
testsViewer: cySelector('devtools.tests.viewer'),
|
|
62
|
+
testsTree: cySelector('devtools.tests.tree'),
|
|
63
|
+
testsLoading: cySelector('devtools.tests.loading'),
|
|
64
|
+
testsFileLoading: cySelector('devtools.tests.fileLoading'),
|
|
65
|
+
testsEmptyState: cySelector('devtools.tests.emptyState'),
|
|
66
|
+
testsContent: cySelector('devtools.tests.content'),
|
|
67
|
+
testsError: cySelector('devtools.tests.error'),
|
|
68
|
+
testsMarkdownContent: cySelector('devtools.tests.markdownContent'),
|
|
69
|
+
|
|
70
|
+
// Dynamic selectors for file tree
|
|
71
|
+
testsFolder: (name: string) => cySelector('devtools.tests.folder', { name }),
|
|
72
|
+
testsFile: (name: string) => cySelector('devtools.tests.file', { name }),
|
|
73
|
+
|
|
74
|
+
// Config Viewer Page
|
|
75
|
+
configPage: cySelector('devtools.config.page'),
|
|
76
|
+
configViewer: cySelector('devtools.config.viewer'),
|
|
77
|
+
configTabTheme: cySelector('devtools.config.tabTheme'),
|
|
78
|
+
configTabEntities: cySelector('devtools.config.tabEntities'),
|
|
79
|
+
configThemeContent: cySelector('devtools.config.themeContent'),
|
|
80
|
+
configEntitiesContent: cySelector('devtools.config.entitiesContent'),
|
|
81
|
+
configCopyTheme: cySelector('devtools.config.copyTheme'),
|
|
82
|
+
configCopyEntities: cySelector('devtools.config.copyEntities'),
|
|
83
|
+
|
|
84
|
+
// Additional tests selectors
|
|
85
|
+
testsNotFound: cySelector('devtools.tests.notFound'),
|
|
86
|
+
testsBackToList: cySelector('devtools.tests.backToList'),
|
|
87
|
+
|
|
88
|
+
// Sidebar
|
|
89
|
+
sidebar: cySelector('devtools.navigation.sidebar'),
|
|
90
|
+
|
|
91
|
+
// API Tester selectors (new feature)
|
|
92
|
+
apiTester: '[data-cy="api-tester"]',
|
|
93
|
+
apiTesterBackBtn: '[data-cy="api-tester-back-btn"]',
|
|
94
|
+
apiTesterEndpointInfo: '[data-cy="api-tester-endpoint-info"]',
|
|
95
|
+
apiTesterMethodSelector: '[data-cy="api-tester-method-selector"]',
|
|
96
|
+
apiTesterMethodBadge: (method: string) => `[data-cy="api-tester-method-${method.toLowerCase()}"]`,
|
|
97
|
+
apiTesterUrlPreview: '[data-cy="api-tester-url-preview"]',
|
|
98
|
+
apiTesterPathParams: '[data-cy="api-tester-path-params"]',
|
|
99
|
+
apiTesterPathParam: (name: string) => `[data-cy="api-tester-path-param-${name}"]`,
|
|
100
|
+
apiTesterPathParamInput: (name: string) => `[data-cy="api-tester-path-param-${name}-input"]`,
|
|
101
|
+
apiTesterQueryEditor: '[data-cy="api-tester-query-editor"]',
|
|
102
|
+
apiTesterQueryRow: (index: number) => `[data-cy="api-tester-query-row-${index}"]`,
|
|
103
|
+
apiTesterQueryKey: (index: number) => `[data-cy="api-tester-query-row-${index}-key"]`,
|
|
104
|
+
apiTesterQueryValue: (index: number) => `[data-cy="api-tester-query-row-${index}-value"]`,
|
|
105
|
+
apiTesterQueryDelete: (index: number) => `[data-cy="api-tester-query-row-${index}-delete"]`,
|
|
106
|
+
apiTesterQueryAddBtn: '[data-cy="api-tester-query-add-btn"]',
|
|
107
|
+
apiTesterHeadersEditor: '[data-cy="api-tester-headers-editor"]',
|
|
108
|
+
apiTesterAuth: '[data-cy="api-tester-auth"]',
|
|
109
|
+
apiTesterAuthType: '[data-cy="api-tester-auth-type"]',
|
|
110
|
+
apiTesterAuthSession: '[data-cy="api-tester-auth-session"]',
|
|
111
|
+
apiTesterAuthApiKey: '[data-cy="api-tester-auth-apikey"]',
|
|
112
|
+
apiTesterApiKeyInput: '[data-cy="api-tester-apikey-input"]',
|
|
113
|
+
apiTesterPayload: '[data-cy="api-tester-payload"]',
|
|
114
|
+
apiTesterPayloadTextarea: '[data-cy="api-tester-payload-textarea"]',
|
|
115
|
+
apiTesterPayloadError: '[data-cy="api-tester-payload-error"]',
|
|
116
|
+
apiTesterSendBtn: '[data-cy="api-tester-send-btn"]',
|
|
117
|
+
apiTesterCancelBtn: '[data-cy="api-tester-cancel-btn"]',
|
|
118
|
+
apiTesterResponse: '[data-cy="api-tester-response"]',
|
|
119
|
+
apiTesterResponseIdle: '[data-cy="api-tester-response-idle"]',
|
|
120
|
+
apiTesterResponseLoading: '[data-cy="api-tester-response-loading"]',
|
|
121
|
+
apiTesterResponseError: '[data-cy="api-tester-response-error"]',
|
|
122
|
+
apiTesterResponseStatus: '[data-cy="api-tester-response-status"]',
|
|
123
|
+
apiTesterResponseTime: '[data-cy="api-tester-response-time"]',
|
|
124
|
+
apiTesterResponseTabBody: '[data-cy="api-tester-response-tab-body"]',
|
|
125
|
+
apiTesterResponseTabHeaders: '[data-cy="api-tester-response-tab-headers"]',
|
|
126
|
+
apiTesterResponseBody: '[data-cy="api-tester-response-body"]',
|
|
127
|
+
apiTesterResponseHeaders: '[data-cy="api-tester-response-headers"]',
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// ============================================
|
|
132
|
+
// FACTORY METHOD
|
|
133
|
+
// ============================================
|
|
134
|
+
|
|
135
|
+
static create(): DevtoolsPOM {
|
|
136
|
+
return new DevtoolsPOM()
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ============================================
|
|
140
|
+
// NAVIGATION
|
|
141
|
+
// ============================================
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Visit /devtools home page
|
|
145
|
+
*/
|
|
146
|
+
visitHome() {
|
|
147
|
+
cy.visit('/devtools')
|
|
148
|
+
return this
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Visit /devtools/style (Style Gallery)
|
|
153
|
+
*/
|
|
154
|
+
visitStyleGallery() {
|
|
155
|
+
cy.visit('/devtools/style')
|
|
156
|
+
return this
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Visit /devtools/tests (Test Cases Viewer)
|
|
161
|
+
*/
|
|
162
|
+
visitTestCases() {
|
|
163
|
+
cy.visit('/devtools/tests')
|
|
164
|
+
return this
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Visit /devtools/config (Config Viewer)
|
|
169
|
+
*/
|
|
170
|
+
visitConfig() {
|
|
171
|
+
cy.visit('/devtools/config')
|
|
172
|
+
return this
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Attempt to visit /devtools (for access control tests)
|
|
177
|
+
* Uses failOnStatusCode: false to capture redirects
|
|
178
|
+
*/
|
|
179
|
+
attemptToVisitDevtools() {
|
|
180
|
+
cy.visit('/devtools', { failOnStatusCode: false })
|
|
181
|
+
return this
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ============================================
|
|
185
|
+
// SIDEBAR NAVIGATION ACTIONS
|
|
186
|
+
// ============================================
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Click on Home navigation item in sidebar
|
|
190
|
+
*/
|
|
191
|
+
clickNavHome() {
|
|
192
|
+
cy.get(this.selectors.navHome).click()
|
|
193
|
+
return this
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Click on Style Gallery navigation item in sidebar
|
|
198
|
+
*/
|
|
199
|
+
clickNavStyleGallery() {
|
|
200
|
+
cy.get(this.selectors.navStyleGallery).click()
|
|
201
|
+
return this
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Click on Test Cases navigation item in sidebar
|
|
206
|
+
*/
|
|
207
|
+
clickNavTestCases() {
|
|
208
|
+
cy.get(this.selectors.navTestCases).click()
|
|
209
|
+
return this
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Click on Config navigation item in sidebar
|
|
214
|
+
*/
|
|
215
|
+
clickNavConfig() {
|
|
216
|
+
cy.get(this.selectors.navConfig).click()
|
|
217
|
+
return this
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Click on "Exit to Dashboard" link
|
|
222
|
+
*/
|
|
223
|
+
clickExitToDashboard() {
|
|
224
|
+
cy.get(this.selectors.exitToDashboard).click()
|
|
225
|
+
return this
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Click on "Go to Admin" link
|
|
230
|
+
*/
|
|
231
|
+
clickGoToAdmin() {
|
|
232
|
+
cy.get(this.selectors.goToAdmin).click()
|
|
233
|
+
return this
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// ============================================
|
|
237
|
+
// HOME PAGE QUICK LINKS
|
|
238
|
+
// ============================================
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Click on Style Gallery quick link (home page)
|
|
242
|
+
*/
|
|
243
|
+
clickHomeStyleLink() {
|
|
244
|
+
cy.get(this.selectors.homeStyleLink).click()
|
|
245
|
+
return this
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Click on Test Cases quick link (home page)
|
|
250
|
+
*/
|
|
251
|
+
clickHomeTestsLink() {
|
|
252
|
+
cy.get(this.selectors.homeTestsLink).click()
|
|
253
|
+
return this
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Click on Config Viewer quick link (home page)
|
|
258
|
+
*/
|
|
259
|
+
clickHomeConfigLink() {
|
|
260
|
+
cy.get(this.selectors.homeConfigLink).click()
|
|
261
|
+
return this
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// ============================================
|
|
265
|
+
// CONFIG VIEWER ACTIONS
|
|
266
|
+
// ============================================
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Click on Theme tab in config viewer
|
|
270
|
+
*/
|
|
271
|
+
clickConfigTabTheme() {
|
|
272
|
+
cy.get(this.selectors.configTabTheme).click()
|
|
273
|
+
return this
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Click on Entities tab in config viewer
|
|
278
|
+
*/
|
|
279
|
+
clickConfigTabEntities() {
|
|
280
|
+
cy.get(this.selectors.configTabEntities).click()
|
|
281
|
+
return this
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Click copy button for theme config
|
|
286
|
+
*/
|
|
287
|
+
clickCopyThemeConfig() {
|
|
288
|
+
cy.get(this.selectors.configCopyTheme).click()
|
|
289
|
+
return this
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Click copy button for entities config
|
|
294
|
+
*/
|
|
295
|
+
clickCopyEntitiesConfig() {
|
|
296
|
+
cy.get(this.selectors.configCopyEntities).click()
|
|
297
|
+
return this
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// ============================================
|
|
301
|
+
// WAITS
|
|
302
|
+
// ============================================
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Wait for /devtools home page to load
|
|
306
|
+
*/
|
|
307
|
+
waitForHomePage() {
|
|
308
|
+
cy.get(this.selectors.homePage, { timeout: 10000 }).should('be.visible')
|
|
309
|
+
return this
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Wait for style gallery page to load
|
|
314
|
+
*/
|
|
315
|
+
waitForStylePage() {
|
|
316
|
+
cy.get(this.selectors.stylePage, { timeout: 10000 }).should('be.visible')
|
|
317
|
+
return this
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Wait for test cases page to load
|
|
322
|
+
*/
|
|
323
|
+
waitForTestsPage() {
|
|
324
|
+
cy.get(this.selectors.testsPage, { timeout: 10000 }).should('be.visible')
|
|
325
|
+
return this
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Wait for config page to load
|
|
330
|
+
*/
|
|
331
|
+
waitForConfigPage() {
|
|
332
|
+
cy.get(this.selectors.configPage, { timeout: 10000 }).should('be.visible')
|
|
333
|
+
return this
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// ============================================
|
|
337
|
+
// ASSERTIONS - URL
|
|
338
|
+
// ============================================
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Assert user is on /devtools home page
|
|
342
|
+
*/
|
|
343
|
+
assertOnDevtoolsHome() {
|
|
344
|
+
cy.url().should('eq', Cypress.config().baseUrl + '/devtools')
|
|
345
|
+
return this
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Assert user is on /devtools/style
|
|
350
|
+
*/
|
|
351
|
+
assertOnStyleGallery() {
|
|
352
|
+
cy.url().should('include', '/devtools/style')
|
|
353
|
+
return this
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Assert user is on /devtools/tests
|
|
358
|
+
*/
|
|
359
|
+
assertOnTestCases() {
|
|
360
|
+
cy.url().should('include', '/devtools/tests')
|
|
361
|
+
return this
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Assert user is on /devtools/config
|
|
366
|
+
*/
|
|
367
|
+
assertOnConfig() {
|
|
368
|
+
cy.url().should('include', '/devtools/config')
|
|
369
|
+
return this
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Assert user was redirected to /dashboard (blocked from /devtools)
|
|
374
|
+
*/
|
|
375
|
+
assertRedirectedToDashboard() {
|
|
376
|
+
cy.url().should('include', '/dashboard')
|
|
377
|
+
cy.url().should('not.include', '/devtools')
|
|
378
|
+
return this
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Assert user is on /superadmin (superadmin panel)
|
|
383
|
+
*/
|
|
384
|
+
assertOnSuperadmin() {
|
|
385
|
+
cy.url().should('include', '/superadmin')
|
|
386
|
+
return this
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// ============================================
|
|
390
|
+
// ASSERTIONS - PAGE CONTENT
|
|
391
|
+
// ============================================
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Assert home page container is visible
|
|
395
|
+
*/
|
|
396
|
+
assertHomePageVisible() {
|
|
397
|
+
cy.get(this.selectors.homePage).should('be.visible')
|
|
398
|
+
return this
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Assert all home page quick links are visible
|
|
403
|
+
*/
|
|
404
|
+
assertHomeQuickLinksVisible() {
|
|
405
|
+
cy.get(this.selectors.homeStyleLink).should('be.visible')
|
|
406
|
+
cy.get(this.selectors.homeTestsLink).should('be.visible')
|
|
407
|
+
cy.get(this.selectors.homeConfigLink).should('be.visible')
|
|
408
|
+
return this
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Assert style gallery page is visible
|
|
413
|
+
*/
|
|
414
|
+
assertStylePageVisible() {
|
|
415
|
+
cy.get(this.selectors.stylePage).should('be.visible')
|
|
416
|
+
return this
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Assert all style gallery sections are visible by clicking through tabs
|
|
421
|
+
* Tabs work one at a time - Components is default, need to click others
|
|
422
|
+
*/
|
|
423
|
+
assertStyleSectionsVisible() {
|
|
424
|
+
// Components tab is active by default
|
|
425
|
+
cy.get(this.selectors.styleComponentGallery).should('be.visible')
|
|
426
|
+
|
|
427
|
+
// Click Field Types tab and verify
|
|
428
|
+
cy.get(this.selectors.styleTabFieldTypes).click()
|
|
429
|
+
cy.get(this.selectors.styleFieldTypes).should('be.visible')
|
|
430
|
+
|
|
431
|
+
// Click Theme tab and verify
|
|
432
|
+
cy.get(this.selectors.styleTabTheme).click()
|
|
433
|
+
cy.get(this.selectors.styleThemePreview).should('be.visible')
|
|
434
|
+
|
|
435
|
+
// Click back to Components tab (restore default state)
|
|
436
|
+
cy.get(this.selectors.styleTabComponents).click()
|
|
437
|
+
return this
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Click Style Gallery Components tab
|
|
442
|
+
*/
|
|
443
|
+
clickStyleTabComponents() {
|
|
444
|
+
cy.get(this.selectors.styleTabComponents).click()
|
|
445
|
+
return this
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Click Style Gallery Field Types tab
|
|
450
|
+
*/
|
|
451
|
+
clickStyleTabFieldTypes() {
|
|
452
|
+
cy.get(this.selectors.styleTabFieldTypes).click()
|
|
453
|
+
return this
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Click Style Gallery Theme tab
|
|
458
|
+
*/
|
|
459
|
+
clickStyleTabTheme() {
|
|
460
|
+
cy.get(this.selectors.styleTabTheme).click()
|
|
461
|
+
return this
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Assert test cases page is visible
|
|
466
|
+
*/
|
|
467
|
+
assertTestsPageVisible() {
|
|
468
|
+
cy.get(this.selectors.testsPage).should('be.visible')
|
|
469
|
+
return this
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Assert test cases viewer (file tree) is visible
|
|
474
|
+
*/
|
|
475
|
+
assertTestsViewerVisible() {
|
|
476
|
+
cy.get(this.selectors.testsViewer).should('be.visible')
|
|
477
|
+
cy.get(this.selectors.testsTree).should('be.visible')
|
|
478
|
+
return this
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Assert config page is visible
|
|
483
|
+
*/
|
|
484
|
+
assertConfigPageVisible() {
|
|
485
|
+
cy.get(this.selectors.configPage).should('be.visible')
|
|
486
|
+
return this
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Assert config viewer tabs are visible
|
|
491
|
+
*/
|
|
492
|
+
assertConfigTabsVisible() {
|
|
493
|
+
cy.get(this.selectors.configViewer).should('be.visible')
|
|
494
|
+
cy.get(this.selectors.configTabTheme).should('be.visible')
|
|
495
|
+
cy.get(this.selectors.configTabEntities).should('be.visible')
|
|
496
|
+
return this
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// ============================================
|
|
500
|
+
// ASSERTIONS - NAVIGATION
|
|
501
|
+
// ============================================
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* Assert all sidebar navigation items are visible
|
|
505
|
+
*/
|
|
506
|
+
assertSidebarNavigationVisible() {
|
|
507
|
+
cy.get(this.selectors.navHome).should('be.visible')
|
|
508
|
+
cy.get(this.selectors.navStyleGallery).should('be.visible')
|
|
509
|
+
cy.get(this.selectors.navTestCases).should('be.visible')
|
|
510
|
+
cy.get(this.selectors.navConfig).should('be.visible')
|
|
511
|
+
return this
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Assert exit links (Dashboard, Admin) are visible
|
|
516
|
+
*/
|
|
517
|
+
assertExitLinksVisible() {
|
|
518
|
+
cy.get(this.selectors.exitToDashboard).should('be.visible')
|
|
519
|
+
cy.get(this.selectors.goToAdmin).should('be.visible')
|
|
520
|
+
return this
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
// ============================================
|
|
524
|
+
// API TESTER METHODS (New Feature)
|
|
525
|
+
// ============================================
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Visit /devtools/api (API endpoint list)
|
|
529
|
+
*/
|
|
530
|
+
visitApiList() {
|
|
531
|
+
cy.visit('/devtools/api')
|
|
532
|
+
return this
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Visit specific API endpoint detail page
|
|
537
|
+
* @param path - API path without /api prefix (e.g., '/v1/customers')
|
|
538
|
+
*/
|
|
539
|
+
visitApiEndpoint(path: string) {
|
|
540
|
+
cy.visit(`/devtools/api${path}`)
|
|
541
|
+
return this
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* Click on an endpoint link in the API list
|
|
546
|
+
* Uses the first endpoint from Core category as default
|
|
547
|
+
*/
|
|
548
|
+
clickFirstEndpoint() {
|
|
549
|
+
cy.get('[data-cy^="devtools-api-route-"]').first().click()
|
|
550
|
+
return this
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Select HTTP method in API tester
|
|
555
|
+
*/
|
|
556
|
+
selectMethod(method: string) {
|
|
557
|
+
cy.get(this.selectors.apiTesterMethodBadge(method)).click()
|
|
558
|
+
return this
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Fill path parameter input
|
|
563
|
+
*/
|
|
564
|
+
fillPathParam(paramName: string, value: string) {
|
|
565
|
+
cy.get(this.selectors.apiTesterPathParamInput(paramName)).clear().type(value)
|
|
566
|
+
return this
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Add query parameter
|
|
571
|
+
*/
|
|
572
|
+
addQueryParam(key: string, value: string) {
|
|
573
|
+
cy.get(this.selectors.apiTesterQueryAddBtn).click()
|
|
574
|
+
const index = 0 // Assuming first param for simplicity
|
|
575
|
+
cy.get(this.selectors.apiTesterQueryKey(index)).type(key)
|
|
576
|
+
cy.get(this.selectors.apiTesterQueryValue(index)).type(value)
|
|
577
|
+
return this
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* Fill request payload (JSON)
|
|
582
|
+
*/
|
|
583
|
+
fillPayload(json: string) {
|
|
584
|
+
cy.get(this.selectors.apiTesterPayloadTextarea).clear().type(json, { parseSpecialCharSequences: false })
|
|
585
|
+
return this
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Select authentication type
|
|
590
|
+
*/
|
|
591
|
+
selectAuthType(type: 'session' | 'apiKey') {
|
|
592
|
+
if (type === 'session') {
|
|
593
|
+
cy.get(this.selectors.apiTesterAuthSession).click()
|
|
594
|
+
} else {
|
|
595
|
+
cy.get(this.selectors.apiTesterAuthApiKey).click()
|
|
596
|
+
}
|
|
597
|
+
return this
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* Fill API key input
|
|
602
|
+
*/
|
|
603
|
+
fillApiKey(apiKey: string) {
|
|
604
|
+
cy.get(this.selectors.apiTesterApiKeyInput).type(apiKey)
|
|
605
|
+
return this
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Click Send Request button
|
|
610
|
+
*/
|
|
611
|
+
clickSendRequest() {
|
|
612
|
+
cy.get(this.selectors.apiTesterSendBtn).click()
|
|
613
|
+
return this
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* Click Cancel button (during request)
|
|
618
|
+
*/
|
|
619
|
+
clickCancelRequest() {
|
|
620
|
+
cy.get(this.selectors.apiTesterCancelBtn).click()
|
|
621
|
+
return this
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* Wait for response to appear
|
|
626
|
+
*/
|
|
627
|
+
waitForResponse() {
|
|
628
|
+
cy.get(this.selectors.apiTesterResponse, { timeout: 10000 }).should('be.visible')
|
|
629
|
+
return this
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
/**
|
|
633
|
+
* Assert API tester page is visible
|
|
634
|
+
*/
|
|
635
|
+
assertApiTesterVisible() {
|
|
636
|
+
cy.get(this.selectors.apiTester).should('be.visible')
|
|
637
|
+
return this
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Assert endpoint info card is visible
|
|
642
|
+
*/
|
|
643
|
+
assertEndpointInfoVisible() {
|
|
644
|
+
cy.get(this.selectors.apiTesterEndpointInfo).should('be.visible')
|
|
645
|
+
return this
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Assert method selector shows specific method
|
|
650
|
+
*/
|
|
651
|
+
assertMethodExists(method: string) {
|
|
652
|
+
cy.get(this.selectors.apiTesterMethodBadge(method)).should('exist')
|
|
653
|
+
return this
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Assert URL preview contains text
|
|
658
|
+
*/
|
|
659
|
+
assertUrlPreviewContains(text: string) {
|
|
660
|
+
cy.get(this.selectors.apiTesterUrlPreview).should('contain', text)
|
|
661
|
+
return this
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* Assert payload editor is visible
|
|
666
|
+
*/
|
|
667
|
+
assertPayloadEditorVisible() {
|
|
668
|
+
cy.get(this.selectors.apiTesterPayload).should('be.visible')
|
|
669
|
+
return this
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/**
|
|
673
|
+
* Assert payload editor is NOT visible
|
|
674
|
+
*/
|
|
675
|
+
assertPayloadEditorNotVisible() {
|
|
676
|
+
cy.get(this.selectors.apiTesterPayload).should('not.exist')
|
|
677
|
+
return this
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
* Assert JSON validation error is shown
|
|
682
|
+
*/
|
|
683
|
+
assertPayloadErrorShown() {
|
|
684
|
+
cy.get(this.selectors.apiTesterPayloadError).should('be.visible')
|
|
685
|
+
return this
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* Assert response status code badge is visible and has correct color
|
|
690
|
+
*/
|
|
691
|
+
assertResponseStatus(statusCode: number) {
|
|
692
|
+
cy.get(this.selectors.apiTesterResponseStatus).should('contain', statusCode.toString())
|
|
693
|
+
return this
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Assert response time is visible
|
|
698
|
+
*/
|
|
699
|
+
assertResponseTimeVisible() {
|
|
700
|
+
cy.get(this.selectors.apiTesterResponseTime).should('be.visible')
|
|
701
|
+
return this
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* Click Response Body tab
|
|
706
|
+
*/
|
|
707
|
+
clickResponseBodyTab() {
|
|
708
|
+
cy.get(this.selectors.apiTesterResponseTabBody).click()
|
|
709
|
+
return this
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* Click Response Headers tab
|
|
714
|
+
*/
|
|
715
|
+
clickResponseHeadersTab() {
|
|
716
|
+
cy.get(this.selectors.apiTesterResponseTabHeaders).click()
|
|
717
|
+
return this
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Assert response body contains text
|
|
722
|
+
*/
|
|
723
|
+
assertResponseBodyContains(text: string) {
|
|
724
|
+
cy.get(this.selectors.apiTesterResponseBody).should('contain', text)
|
|
725
|
+
return this
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* Assert back button navigates to /devtools/api
|
|
730
|
+
*/
|
|
731
|
+
clickBackToList() {
|
|
732
|
+
cy.get(this.selectors.apiTesterBackBtn).click()
|
|
733
|
+
cy.url().should('include', '/devtools/api')
|
|
734
|
+
cy.url().should('not.include', '/devtools/api/')
|
|
735
|
+
return this
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
export default DevtoolsPOM
|