@nextsparkjs/theme-default 0.1.0-beta.1 → 0.1.0-beta.101
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/LICENSE +21 -0
- package/api/ai/chat/stream/route.ts +4 -1
- package/api/ai/orchestrator/route.ts +10 -3
- package/api/ai/single-agent/route.ts +10 -3
- package/api/ai/usage/route.ts +4 -1
- package/blocks/benefits/component.tsx +4 -4
- package/blocks/cta-section/component.tsx +4 -4
- package/blocks/faq-accordion/component.tsx +2 -2
- package/blocks/features-grid/component.tsx +5 -5
- package/blocks/hero/component.tsx +2 -2
- package/blocks/hero/fields.ts +1 -1
- package/blocks/hero-with-form/component.tsx +7 -7
- package/blocks/hero-with-form/fields.ts +1 -1
- package/blocks/jumbotron/component.tsx +7 -7
- package/blocks/jumbotron/fields.ts +1 -1
- package/blocks/logo-cloud/component.tsx +6 -6
- package/blocks/logo-cloud/fields.ts +1 -1
- package/blocks/post-content/component.tsx +2 -2
- package/blocks/pricing-table/component.tsx +5 -5
- package/blocks/split-content/component.tsx +5 -5
- package/blocks/split-content/fields.ts +1 -1
- package/blocks/stats-counter/component.tsx +9 -9
- package/blocks/testimonials/component.tsx +4 -4
- package/blocks/testimonials/fields.ts +1 -1
- package/blocks/text-content/component.tsx +12 -10
- package/blocks/timeline/component.tsx +12 -12
- package/blocks/video-hero/component.tsx +7 -7
- package/blocks/video-hero/fields.ts +1 -1
- package/components/ai-chat/ChatPanel.tsx +7 -7
- package/components/ai-chat/Message.tsx +2 -2
- package/components/ai-chat/MessageInput.tsx +3 -3
- package/components/ai-chat/MessageList.tsx +3 -3
- package/components/ai-chat/TypingIndicator.tsx +2 -2
- package/config/app.config.ts +75 -62
- package/config/dashboard.config.ts +14 -0
- package/config/features.config.ts +10 -0
- package/config/permissions.config.ts +26 -1
- package/docs/{01-overview → public/01-overview}/01-introduction.md +5 -0
- package/docs/{01-overview → public/01-overview}/02-customization.md +5 -0
- package/docs/{02-features → public/02-features}/03-tasks-entity.md +5 -0
- package/docs/{03-ai → public/03-ai}/01-overview.md +5 -0
- package/docs/{03-ai → public/03-ai}/02-customization.md +5 -0
- package/docs/superadmin/01-setup/01-configuration.md +79 -0
- package/docs/superadmin/01-setup/02-deployment.md +82 -0
- package/docs/superadmin/02-management/01-users.md +83 -0
- package/docs/superadmin/03-integrations/01-langchain.md +139 -0
- package/entities/customers/api/docs.md +107 -0
- package/entities/customers/api/presets.ts +80 -0
- package/entities/pages/api/docs.md +114 -0
- package/entities/pages/api/presets.ts +72 -0
- package/entities/posts/api/docs.md +120 -0
- package/entities/posts/api/presets.ts +74 -0
- package/entities/tasks/api/docs.md +126 -0
- package/entities/tasks/api/presets.ts +84 -0
- package/lib/selectors.ts +7 -4
- package/messages/de/admin.json +45 -0
- package/messages/en/admin.json +56 -0
- package/messages/en/navigation.json +2 -1
- package/messages/es/admin.json +56 -0
- package/messages/es/navigation.json +2 -1
- package/messages/fr/admin.json +45 -0
- package/messages/it/admin.json +45 -0
- package/messages/pt/admin.json +45 -0
- package/migrations/090_demo_users_teams.sql +11 -11
- package/migrations/091_greek_teams_billing.sql +15 -15
- package/migrations/093_pages_sample_data.sql +7 -7
- package/migrations/098_patterns_sample_data.sql +234 -0
- package/package.json +8 -3
- package/styles/globals.css +42 -0
- package/templates/(public)/blog/[slug]/page.tsx +1 -1
- package/templates/(public)/page.tsx +1 -1
- package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_utils/docs/README.md +215 -0
- package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
- package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
- package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
- package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
- package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
- package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
- package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_utils/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 +119 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
- package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
- package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
- package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
- package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
- package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -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/features/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +87 -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/MediaAPIController.js +231 -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 +33 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -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/PatternsPOM.ts +329 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +246 -0
- package/tests/cypress/src/entities/index.ts +16 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +271 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +283 -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 +707 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +851 -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 +20 -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 +518 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress/support/e2e.ts +90 -0
- package/tests/cypress.config.ts +178 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
- package/tests/jest/__mocks__/jose.js +22 -0
- package/tests/jest/__mocks__/next/image.js +15 -0
- package/tests/jest/__mocks__/next-server.js +56 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/jest.config.cjs +154 -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 +370 -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/services/tasks.service.test.ts +707 -0
- package/tests/jest/setup.ts +170 -0
- package/tests/jest/tsconfig.jest.json +6 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +21 -0
- /package/docs/{02-features → public/02-features}/01-components.md +0 -0
- /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: DevTools UI Selectors Validation
|
|
3
|
+
priority: medium
|
|
4
|
+
tags: [selectors, devtools, developer, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, devtools, SEL_DEVT_001, SEL_DEVT_002, SEL_DEVT_003, SEL_DEVT_004, SEL_DEVT_005, SEL_DEVT_006]
|
|
6
|
+
coverage: 6
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# DevTools UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that DevTools (devzone) component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
12
|
+
|
|
13
|
+
**IMPORTANT:** DevTools is only accessible to users with 'developer' app role. All tests use `loginAsDefaultDeveloper()`.
|
|
14
|
+
|
|
15
|
+
## @test SEL_DEVT_001: Navigation Structure
|
|
16
|
+
|
|
17
|
+
### Metadata
|
|
18
|
+
- **Priority:** High
|
|
19
|
+
- **Type:** Selector Validation
|
|
20
|
+
- **Tags:** devtools, navigation, sidebar
|
|
21
|
+
- **Grep:** `@ui-selectors` `@SEL_DEVT_001`
|
|
22
|
+
- **Status:** Active - 8 tests
|
|
23
|
+
|
|
24
|
+
```gherkin:en
|
|
25
|
+
Scenario: DevTools navigation has complete structure
|
|
26
|
+
|
|
27
|
+
Given I am logged in as a developer user
|
|
28
|
+
And I navigate to /devtools
|
|
29
|
+
Then I should find the sidebar container
|
|
30
|
+
And I should find the sidebar collapse toggle
|
|
31
|
+
And I should find the nav home item
|
|
32
|
+
And I should find the nav style gallery item
|
|
33
|
+
And I should find the nav test cases item
|
|
34
|
+
And I should find the nav config item
|
|
35
|
+
And I should find the exit to dashboard link
|
|
36
|
+
And I should find the go to admin link
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```gherkin:es
|
|
40
|
+
Scenario: Navegacion de DevTools tiene estructura completa
|
|
41
|
+
|
|
42
|
+
Given estoy logueado como usuario developer
|
|
43
|
+
And navego a /devtools
|
|
44
|
+
Then deberia encontrar el contenedor del sidebar
|
|
45
|
+
And deberia encontrar el toggle de colapso del sidebar
|
|
46
|
+
And deberia encontrar el item de navegacion home
|
|
47
|
+
And deberia encontrar el item de navegacion style gallery
|
|
48
|
+
And deberia encontrar el item de navegacion test cases
|
|
49
|
+
And deberia encontrar el item de navegacion config
|
|
50
|
+
And deberia encontrar el link de salir al dashboard
|
|
51
|
+
And deberia encontrar el link de ir a admin
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Expected Results
|
|
55
|
+
- `devtools-sidebar` selector exists
|
|
56
|
+
- `devtools-sidebar-collapse` selector exists
|
|
57
|
+
- `devtools-nav-home` selector exists
|
|
58
|
+
- `devtools-nav-style` selector exists
|
|
59
|
+
- `devtools-nav-tests` selector exists
|
|
60
|
+
- `devtools-nav-config` selector exists
|
|
61
|
+
- `devtools-exit-dashboard` selector exists
|
|
62
|
+
- `devtools-go-admin` selector exists
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## @test SEL_DEVT_002: Home Page
|
|
67
|
+
|
|
68
|
+
### Metadata
|
|
69
|
+
- **Priority:** Medium
|
|
70
|
+
- **Type:** Selector Validation
|
|
71
|
+
- **Tags:** devtools, home, quicklinks
|
|
72
|
+
- **Grep:** `@ui-selectors` `@SEL_DEVT_002`
|
|
73
|
+
- **Status:** Active - 4 tests
|
|
74
|
+
|
|
75
|
+
```gherkin:en
|
|
76
|
+
Scenario: DevTools home page has quick links
|
|
77
|
+
|
|
78
|
+
Given I am logged in as a developer user
|
|
79
|
+
And I navigate to /devtools
|
|
80
|
+
Then I should find the home page container
|
|
81
|
+
And I should find the style gallery quick link
|
|
82
|
+
And I should find the tests quick link
|
|
83
|
+
And I should find the config quick link
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```gherkin:es
|
|
87
|
+
Scenario: Pagina home de DevTools tiene links rapidos
|
|
88
|
+
|
|
89
|
+
Given estoy logueado como usuario developer
|
|
90
|
+
And navego a /devtools
|
|
91
|
+
Then deberia encontrar el contenedor de la pagina home
|
|
92
|
+
And deberia encontrar el link rapido a style gallery
|
|
93
|
+
And deberia encontrar el link rapido a tests
|
|
94
|
+
And deberia encontrar el link rapido a config
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Expected Results
|
|
98
|
+
- `devtools-home-page` selector exists
|
|
99
|
+
- `devtools-home-style-link` selector exists
|
|
100
|
+
- `devtools-home-tests-link` selector exists
|
|
101
|
+
- `devtools-home-config-link` selector exists
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## @test SEL_DEVT_003: Style Gallery Page
|
|
106
|
+
|
|
107
|
+
### Metadata
|
|
108
|
+
- **Priority:** Medium
|
|
109
|
+
- **Type:** Selector Validation
|
|
110
|
+
- **Tags:** devtools, style, gallery, tabs
|
|
111
|
+
- **Grep:** `@ui-selectors` `@SEL_DEVT_003`
|
|
112
|
+
- **Status:** Active - 8 tests
|
|
113
|
+
|
|
114
|
+
```gherkin:en
|
|
115
|
+
Scenario: DevTools style gallery has all tabs and content
|
|
116
|
+
|
|
117
|
+
Given I am logged in as a developer user
|
|
118
|
+
And I navigate to /devtools/style
|
|
119
|
+
Then I should find the style page container
|
|
120
|
+
And I should find the components tab
|
|
121
|
+
And I should find the field types tab
|
|
122
|
+
And I should find the theme tab
|
|
123
|
+
And I should find the guidelines tab
|
|
124
|
+
And I should find the component gallery (default tab)
|
|
125
|
+
When I click the field types tab
|
|
126
|
+
Then I should find the field types content
|
|
127
|
+
When I click the theme tab
|
|
128
|
+
Then I should find the theme preview
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
```gherkin:es
|
|
132
|
+
Scenario: Style gallery de DevTools tiene todas las tabs y contenido
|
|
133
|
+
|
|
134
|
+
Given estoy logueado como usuario developer
|
|
135
|
+
And navego a /devtools/style
|
|
136
|
+
Then deberia encontrar el contenedor de la pagina style
|
|
137
|
+
And deberia encontrar la tab de components
|
|
138
|
+
And deberia encontrar la tab de field types
|
|
139
|
+
And deberia encontrar la tab de theme
|
|
140
|
+
And deberia encontrar la tab de guidelines
|
|
141
|
+
And deberia encontrar la galeria de componentes (tab por defecto)
|
|
142
|
+
When hago click en la tab de field types
|
|
143
|
+
Then deberia encontrar el contenido de field types
|
|
144
|
+
When hago click en la tab de theme
|
|
145
|
+
Then deberia encontrar el preview del tema
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Expected Results
|
|
149
|
+
- `devtools-style-page` selector exists
|
|
150
|
+
- `devtools-style-tab-components` selector exists
|
|
151
|
+
- `devtools-style-tab-fieldtypes` selector exists
|
|
152
|
+
- `devtools-style-tab-theme` selector exists
|
|
153
|
+
- `devtools-style-tab-guidelines` selector exists
|
|
154
|
+
- `devtools-style-component-gallery` selector exists
|
|
155
|
+
- `devtools-style-fieldtypes` selector exists (when tab clicked)
|
|
156
|
+
- `devtools-style-theme-preview` selector exists (when tab clicked)
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## @test SEL_DEVT_004: Config Viewer Page
|
|
161
|
+
|
|
162
|
+
### Metadata
|
|
163
|
+
- **Priority:** Medium
|
|
164
|
+
- **Type:** Selector Validation
|
|
165
|
+
- **Tags:** devtools, config, viewer, tabs
|
|
166
|
+
- **Grep:** `@ui-selectors` `@SEL_DEVT_004`
|
|
167
|
+
- **Status:** Active - 8 tests
|
|
168
|
+
|
|
169
|
+
```gherkin:en
|
|
170
|
+
Scenario: DevTools config viewer has all tabs and actions
|
|
171
|
+
|
|
172
|
+
Given I am logged in as a developer user
|
|
173
|
+
And I navigate to /devtools/config
|
|
174
|
+
Then I should find the config page container
|
|
175
|
+
And I should find the config viewer container
|
|
176
|
+
And I should find the theme tab
|
|
177
|
+
And I should find the entities tab
|
|
178
|
+
And I should find the theme content (default tab)
|
|
179
|
+
And I should find the copy theme button
|
|
180
|
+
When I click the entities tab
|
|
181
|
+
Then I should find the entities content
|
|
182
|
+
And I should find the copy entities button
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```gherkin:es
|
|
186
|
+
Scenario: Config viewer de DevTools tiene todas las tabs y acciones
|
|
187
|
+
|
|
188
|
+
Given estoy logueado como usuario developer
|
|
189
|
+
And navego a /devtools/config
|
|
190
|
+
Then deberia encontrar el contenedor de la pagina config
|
|
191
|
+
And deberia encontrar el contenedor del config viewer
|
|
192
|
+
And deberia encontrar la tab de theme
|
|
193
|
+
And deberia encontrar la tab de entities
|
|
194
|
+
And deberia encontrar el contenido de theme (tab por defecto)
|
|
195
|
+
And deberia encontrar el boton de copiar theme
|
|
196
|
+
When hago click en la tab de entities
|
|
197
|
+
Then deberia encontrar el contenido de entities
|
|
198
|
+
And deberia encontrar el boton de copiar entities
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Expected Results
|
|
202
|
+
- `devtools-config-page` selector exists
|
|
203
|
+
- `devtools-config-viewer` selector exists
|
|
204
|
+
- `devtools-config-tab-theme` selector exists
|
|
205
|
+
- `devtools-config-tab-entities` selector exists
|
|
206
|
+
- `devtools-config-theme-content` selector exists
|
|
207
|
+
- `devtools-config-copy-theme` selector exists
|
|
208
|
+
- `devtools-config-entities-content` selector exists (when tab clicked)
|
|
209
|
+
- `devtools-config-copy-entities` selector exists (when tab clicked)
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## @test SEL_DEVT_005: Test Cases Page
|
|
214
|
+
|
|
215
|
+
### Metadata
|
|
216
|
+
- **Priority:** Medium
|
|
217
|
+
- **Type:** Selector Validation
|
|
218
|
+
- **Tags:** devtools, tests, viewer
|
|
219
|
+
- **Grep:** `@ui-selectors` `@SEL_DEVT_005`
|
|
220
|
+
- **Status:** Active - 3 tests
|
|
221
|
+
|
|
222
|
+
```gherkin:en
|
|
223
|
+
Scenario: DevTools test cases page has viewer components
|
|
224
|
+
|
|
225
|
+
Given I am logged in as a developer user
|
|
226
|
+
And I navigate to /devtools/tests
|
|
227
|
+
Then I should find the tests page container
|
|
228
|
+
And I should find the tests viewer container
|
|
229
|
+
And I should find the tests tree
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
```gherkin:es
|
|
233
|
+
Scenario: Pagina test cases de DevTools tiene componentes del viewer
|
|
234
|
+
|
|
235
|
+
Given estoy logueado como usuario developer
|
|
236
|
+
And navego a /devtools/tests
|
|
237
|
+
Then deberia encontrar el contenedor de la pagina tests
|
|
238
|
+
And deberia encontrar el contenedor del tests viewer
|
|
239
|
+
And deberia encontrar el arbol de tests
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Expected Results
|
|
243
|
+
- `devtools-tests-page` selector exists
|
|
244
|
+
- `devtools-tests-viewer` selector exists
|
|
245
|
+
- `devtools-tests-tree` selector exists
|
|
246
|
+
|
|
247
|
+
### Notes
|
|
248
|
+
Conditional states (loading, empty, error) are not tested in selector validation.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## @test SEL_DEVT_006: Test Coverage Dashboard
|
|
253
|
+
|
|
254
|
+
### Metadata
|
|
255
|
+
- **Priority:** Medium
|
|
256
|
+
- **Type:** Selector Validation
|
|
257
|
+
- **Tags:** devtools, tests, dashboard, coverage
|
|
258
|
+
- **Grep:** `@ui-selectors` `@SEL_DEVT_006`
|
|
259
|
+
- **Status:** Active - 9 tests
|
|
260
|
+
|
|
261
|
+
```gherkin:en
|
|
262
|
+
Scenario: DevTools test coverage dashboard has all components
|
|
263
|
+
|
|
264
|
+
Given I am logged in as a developer user
|
|
265
|
+
And I navigate to /devtools/tests
|
|
266
|
+
Then I should find the dashboard container
|
|
267
|
+
And I should find the dashboard stats container
|
|
268
|
+
And I should find the features stat card
|
|
269
|
+
And I should find the flows stat card
|
|
270
|
+
And I should find the files stat card
|
|
271
|
+
And I should find the tags stat card
|
|
272
|
+
And I should find the coverage gaps container
|
|
273
|
+
When I select a test file from the tree
|
|
274
|
+
Then I should find the dashboard button in sidebar
|
|
275
|
+
When I click the dashboard button
|
|
276
|
+
Then I should see the dashboard again
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
```gherkin:es
|
|
280
|
+
Scenario: Dashboard de cobertura de DevTools tiene todos los componentes
|
|
281
|
+
|
|
282
|
+
Given estoy logueado como usuario developer
|
|
283
|
+
And navego a /devtools/tests
|
|
284
|
+
Then deberia encontrar el contenedor del dashboard
|
|
285
|
+
And deberia encontrar el contenedor de estadisticas
|
|
286
|
+
And deberia encontrar la tarjeta de estadisticas de features
|
|
287
|
+
And deberia encontrar la tarjeta de estadisticas de flows
|
|
288
|
+
And deberia encontrar la tarjeta de estadisticas de files
|
|
289
|
+
And deberia encontrar la tarjeta de estadisticas de tags
|
|
290
|
+
And deberia encontrar el contenedor de gaps de cobertura
|
|
291
|
+
When selecciono un archivo de test del arbol
|
|
292
|
+
Then deberia encontrar el boton de dashboard en el sidebar
|
|
293
|
+
When hago click en el boton de dashboard
|
|
294
|
+
Then deberia ver el dashboard nuevamente
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Expected Results
|
|
298
|
+
- `devtools-tests-dashboard` selector exists (when no file selected)
|
|
299
|
+
- `devtools-tests-dashboard-stats` selector exists
|
|
300
|
+
- `devtools-tests-dashboard-stat-features` selector exists
|
|
301
|
+
- `devtools-tests-dashboard-stat-flows` selector exists
|
|
302
|
+
- `devtools-tests-dashboard-stat-files` selector exists
|
|
303
|
+
- `devtools-tests-dashboard-stat-tags` selector exists
|
|
304
|
+
- `devtools-tests-dashboard-gaps` selector exists
|
|
305
|
+
- `devtools-tests-dashboard-button` selector exists (when file selected)
|
|
306
|
+
- Dashboard button returns to dashboard view
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: DevTools (DevTools)
|
|
3
|
+
*
|
|
4
|
+
* This test validates that devtools selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate DevtoolsPOM selectors work correctly
|
|
9
|
+
* - Ensure all dev.* selectors are implemented
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Navigate to /devtools pages (requires developer role)
|
|
14
|
+
* - Assert elements exist in DOM (no form submissions)
|
|
15
|
+
* - Fast execution (< 30 seconds per describe block)
|
|
16
|
+
*
|
|
17
|
+
* Test IDs:
|
|
18
|
+
* - SEL_DEVT_001: Navigation Structure
|
|
19
|
+
* - SEL_DEVT_002: Home Page
|
|
20
|
+
* - SEL_DEVT_003: Style Gallery Page
|
|
21
|
+
* - SEL_DEVT_004: Config Viewer Page
|
|
22
|
+
* - SEL_DEVT_005: Test Cases Page
|
|
23
|
+
*
|
|
24
|
+
* IMPORTANT: DevTools is only accessible to users with 'developer' app role.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { DevtoolsPOM } from '../../../src/features/DevtoolsPOM'
|
|
28
|
+
import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
|
|
29
|
+
|
|
30
|
+
describe('DevTools Selectors Validation', { tags: ['@ui-selectors', '@devtools'] }, () => {
|
|
31
|
+
const dev = DevtoolsPOM.create()
|
|
32
|
+
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
loginAsDefaultDeveloper()
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
// ============================================
|
|
38
|
+
// SEL_DEVT_001: NAVIGATION STRUCTURE (8 selectors)
|
|
39
|
+
// ============================================
|
|
40
|
+
describe('SEL_DEVT_001: Navigation Structure', { tags: '@SEL_DEVT_001' }, () => {
|
|
41
|
+
beforeEach(() => {
|
|
42
|
+
cy.visit('/devtools', { timeout: 60000, failOnStatusCode: false })
|
|
43
|
+
cy.url().should('include', '/devtools')
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('should find sidebar container', () => {
|
|
47
|
+
cy.get(dev.selectors.sidebar).should('exist')
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('should find sidebar collapse toggle', () => {
|
|
51
|
+
cy.get(dev.selectors.sidebarCollapseToggle).should('exist')
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
it('should find nav home item', () => {
|
|
55
|
+
cy.get(dev.selectors.navHome).should('exist')
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it('should find nav style gallery item', () => {
|
|
59
|
+
cy.get(dev.selectors.navStyleGallery).should('exist')
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it('should find nav test cases item', () => {
|
|
63
|
+
cy.get(dev.selectors.navTestCases).should('exist')
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
it('should find nav config item', () => {
|
|
67
|
+
cy.get(dev.selectors.navConfig).should('exist')
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('should find exit to dashboard link', () => {
|
|
71
|
+
cy.get(dev.selectors.exitToDashboard).should('exist')
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
it('should find go to admin link', () => {
|
|
75
|
+
cy.get(dev.selectors.goToAdmin).should('exist')
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
// ============================================
|
|
80
|
+
// SEL_DEVT_002: HOME PAGE (4 selectors)
|
|
81
|
+
// ============================================
|
|
82
|
+
describe('SEL_DEVT_002: Home Page', { tags: '@SEL_DEVT_002' }, () => {
|
|
83
|
+
beforeEach(() => {
|
|
84
|
+
cy.visit('/devtools', { timeout: 60000, failOnStatusCode: false })
|
|
85
|
+
cy.url().should('include', '/devtools')
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('should find home page container', () => {
|
|
89
|
+
cy.get(dev.selectors.homePage).should('exist')
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('should find style gallery quick link', () => {
|
|
93
|
+
cy.get(dev.selectors.homeStyleLink).should('exist')
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('should find tests quick link', () => {
|
|
97
|
+
cy.get(dev.selectors.homeTestsLink).should('exist')
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
it('should find config quick link', () => {
|
|
101
|
+
cy.get(dev.selectors.homeConfigLink).should('exist')
|
|
102
|
+
})
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
// ============================================
|
|
106
|
+
// SEL_DEVT_003: STYLE GALLERY PAGE (8 selectors)
|
|
107
|
+
// ============================================
|
|
108
|
+
describe('SEL_DEVT_003: Style Gallery Page', { tags: '@SEL_DEVT_003' }, () => {
|
|
109
|
+
beforeEach(() => {
|
|
110
|
+
cy.visit('/devtools/style', { timeout: 60000, failOnStatusCode: false })
|
|
111
|
+
cy.url().should('include', '/devtools/style')
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it('should find style page container', () => {
|
|
115
|
+
cy.get(dev.selectors.stylePage).should('exist')
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
it('should find components tab', () => {
|
|
119
|
+
cy.get(dev.selectors.styleTabComponents).should('exist')
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('should find field types tab', () => {
|
|
123
|
+
cy.get(dev.selectors.styleTabFieldTypes).should('exist')
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
it('should find theme tab', () => {
|
|
127
|
+
cy.get(dev.selectors.styleTabTheme).should('exist')
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
it('should find guidelines tab', () => {
|
|
131
|
+
cy.get(dev.selectors.styleTabGuidelines).should('exist')
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('should find component gallery (default tab content)', () => {
|
|
135
|
+
cy.get(dev.selectors.styleComponentGallery).should('exist')
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
it('should find field types content when tab clicked', () => {
|
|
139
|
+
cy.get(dev.selectors.styleTabFieldTypes).click()
|
|
140
|
+
cy.get(dev.selectors.styleFieldTypes).should('exist')
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
it('should find theme preview when tab clicked', () => {
|
|
144
|
+
cy.get(dev.selectors.styleTabTheme).click()
|
|
145
|
+
cy.get(dev.selectors.styleThemePreview).should('exist')
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
// ============================================
|
|
150
|
+
// SEL_DEVT_004: CONFIG VIEWER PAGE (8 selectors)
|
|
151
|
+
// ============================================
|
|
152
|
+
describe('SEL_DEVT_004: Config Viewer Page', { tags: '@SEL_DEVT_004' }, () => {
|
|
153
|
+
beforeEach(() => {
|
|
154
|
+
cy.visit('/devtools/config', { timeout: 60000, failOnStatusCode: false })
|
|
155
|
+
cy.url().should('include', '/devtools/config')
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
it('should find config page container', () => {
|
|
159
|
+
cy.get(dev.selectors.configPage).should('exist')
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
it('should find config viewer container', () => {
|
|
163
|
+
cy.get(dev.selectors.configViewer).should('exist')
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('should find theme tab', () => {
|
|
167
|
+
cy.get(dev.selectors.configTabTheme).should('exist')
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
it('should find entities tab', () => {
|
|
171
|
+
cy.get(dev.selectors.configTabEntities).should('exist')
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
it('should find theme content (default tab)', () => {
|
|
175
|
+
cy.get(dev.selectors.configThemeContent).should('exist')
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
it('should find entities content when tab clicked', () => {
|
|
179
|
+
cy.get(dev.selectors.configTabEntities).click()
|
|
180
|
+
cy.get(dev.selectors.configEntitiesContent).should('exist')
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
it('should find copy theme button', () => {
|
|
184
|
+
cy.get(dev.selectors.configCopyTheme).should('exist')
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
it('should find copy entities button when on entities tab', () => {
|
|
188
|
+
cy.get(dev.selectors.configTabEntities).click()
|
|
189
|
+
// Wait for entities to load before checking button
|
|
190
|
+
cy.get(dev.selectors.configEntitiesContent, { timeout: 10000 }).should('exist')
|
|
191
|
+
cy.get(dev.selectors.configCopyEntities).should('exist')
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
// ============================================
|
|
196
|
+
// SEL_DEVT_005: TEST CASES PAGE (3 selectors)
|
|
197
|
+
// NOTE: Tests page components may not implement all data-cy selectors
|
|
198
|
+
// ============================================
|
|
199
|
+
describe('SEL_DEVT_005: Test Cases Page', { tags: '@SEL_DEVT_005' }, () => {
|
|
200
|
+
beforeEach(() => {
|
|
201
|
+
cy.visit('/devtools/tests', { timeout: 60000, failOnStatusCode: false })
|
|
202
|
+
cy.url().should('include', '/devtools/tests')
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
it('should find tests page container', () => {
|
|
206
|
+
cy.get(dev.selectors.testsPage).should('exist')
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
it('should find tests viewer container', () => {
|
|
210
|
+
cy.get(dev.selectors.testsViewer).should('exist')
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
it('should find tests tree', () => {
|
|
214
|
+
cy.get(dev.selectors.testsTree).should('exist')
|
|
215
|
+
})
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
// ============================================
|
|
219
|
+
// SEL_DEVT_006: TEST COVERAGE DASHBOARD (9 selectors)
|
|
220
|
+
// ============================================
|
|
221
|
+
describe('SEL_DEVT_006: Test Coverage Dashboard', { tags: '@SEL_DEVT_006' }, () => {
|
|
222
|
+
beforeEach(() => {
|
|
223
|
+
cy.visit('/devtools/tests', { timeout: 60000, failOnStatusCode: false })
|
|
224
|
+
cy.url().should('include', '/devtools/tests')
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
it('should find dashboard container (no file selected)', () => {
|
|
228
|
+
cy.get(dev.selectors.testsDashboard).should('exist')
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
it('should find dashboard stats container', () => {
|
|
232
|
+
cy.get(dev.selectors.testsDashboardStats).should('exist')
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
it('should find features stat card', () => {
|
|
236
|
+
cy.get(dev.selectors.testsDashboardStatFeatures).should('exist')
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
it('should find flows stat card', () => {
|
|
240
|
+
cy.get(dev.selectors.testsDashboardStatFlows).should('exist')
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
it('should find files stat card', () => {
|
|
244
|
+
cy.get(dev.selectors.testsDashboardStatFiles).should('exist')
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
it('should find tags stat card', () => {
|
|
248
|
+
cy.get(dev.selectors.testsDashboardStatTags).should('exist')
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
it('should find coverage gaps container', () => {
|
|
252
|
+
cy.get(dev.selectors.testsDashboardGaps).should('exist')
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
it('should find dashboard button when file selected', () => {
|
|
256
|
+
// First expand a folder to reveal files
|
|
257
|
+
cy.get(dev.selectors.testsTree).find('[data-cy*="folder"]').first().click()
|
|
258
|
+
// Then select a file
|
|
259
|
+
cy.get(dev.selectors.testsTree).find('[data-cy*="file"]').first().click()
|
|
260
|
+
cy.get(dev.selectors.testsDashboardButton).should('exist')
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
it('should return to dashboard when button clicked', () => {
|
|
264
|
+
// Expand folder and select a file
|
|
265
|
+
cy.get(dev.selectors.testsTree).find('[data-cy*="folder"]').first().click()
|
|
266
|
+
cy.get(dev.selectors.testsTree).find('[data-cy*="file"]').first().click()
|
|
267
|
+
// Click dashboard button
|
|
268
|
+
cy.get(dev.selectors.testsDashboardButton).click()
|
|
269
|
+
// Dashboard should be visible again
|
|
270
|
+
cy.get(dev.selectors.testsDashboard).should('exist')
|
|
271
|
+
})
|
|
272
|
+
})
|
|
273
|
+
})
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Global Search UI Selectors Validation
|
|
3
|
+
priority: medium
|
|
4
|
+
tags: [selectors, search, modal, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, search, SEL_GSRCH_001, SEL_GSRCH_002, SEL_GSRCH_003]
|
|
6
|
+
coverage: 3
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Global Search UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that global search component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Most selectors require the search modal to be open.
|
|
12
|
+
|
|
13
|
+
## @test SEL_GSRCH_001: Search Trigger
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Medium
|
|
17
|
+
- **Type:** Selector Validation
|
|
18
|
+
- **Tags:** search, trigger, button
|
|
19
|
+
- **Grep:** `@ui-selectors` `@SEL_GSRCH_001`
|
|
20
|
+
- **Status:** Skipped - selector not implemented
|
|
21
|
+
|
|
22
|
+
```gherkin:en
|
|
23
|
+
Scenario: Search trigger button is accessible
|
|
24
|
+
|
|
25
|
+
Given I am logged in as a valid user
|
|
26
|
+
And I navigate to the dashboard
|
|
27
|
+
Then I should find the search trigger button
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```gherkin:es
|
|
31
|
+
Scenario: Boton de trigger de busqueda es accesible
|
|
32
|
+
|
|
33
|
+
Given estoy logueado como usuario valido
|
|
34
|
+
And navego al dashboard
|
|
35
|
+
Then deberia encontrar el boton de trigger de busqueda
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Expected Results
|
|
39
|
+
- `global-search-trigger` selector exists
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## @test SEL_GSRCH_002: Search Modal (when open)
|
|
44
|
+
|
|
45
|
+
### Metadata
|
|
46
|
+
- **Priority:** High
|
|
47
|
+
- **Type:** Selector Validation
|
|
48
|
+
- **Tags:** search, modal, input
|
|
49
|
+
- **Grep:** `@ui-selectors` `@SEL_GSRCH_002`
|
|
50
|
+
- **Status:** Partial - 1 passing, 3 skipped
|
|
51
|
+
|
|
52
|
+
```gherkin:en
|
|
53
|
+
Scenario: Search modal has required components when opened
|
|
54
|
+
|
|
55
|
+
Given I am logged in as a valid user
|
|
56
|
+
And I navigate to the dashboard
|
|
57
|
+
When I press Cmd+K to open the search modal
|
|
58
|
+
Then I should find the search modal container
|
|
59
|
+
And I should find the search input
|
|
60
|
+
And I should find the search results container (when query entered)
|
|
61
|
+
And I should find search result items (when results available)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```gherkin:es
|
|
65
|
+
Scenario: Modal de busqueda tiene componentes requeridos cuando esta abierto
|
|
66
|
+
|
|
67
|
+
Given estoy logueado como usuario valido
|
|
68
|
+
And navego al dashboard
|
|
69
|
+
When presiono Cmd+K para abrir el modal de busqueda
|
|
70
|
+
Then deberia encontrar el contenedor del modal de busqueda
|
|
71
|
+
And deberia encontrar el input de busqueda
|
|
72
|
+
And deberia encontrar el contenedor de resultados (cuando hay query)
|
|
73
|
+
And deberia encontrar items de resultados (cuando hay resultados)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Expected Results
|
|
77
|
+
- `global-search-modal` skipped - selector not implemented
|
|
78
|
+
- `global-search-input` selector exists (WORKING)
|
|
79
|
+
- `global-search-results` skipped - requires search query
|
|
80
|
+
- `global-search-result` skipped - requires results
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## @test SEL_GSRCH_003: Search Modal (opened via click)
|
|
85
|
+
|
|
86
|
+
### Metadata
|
|
87
|
+
- **Priority:** Low
|
|
88
|
+
- **Type:** Selector Validation
|
|
89
|
+
- **Tags:** search, modal, click
|
|
90
|
+
- **Grep:** `@ui-selectors` `@SEL_GSRCH_003`
|
|
91
|
+
- **Status:** Skipped - trigger selector not implemented
|
|
92
|
+
|
|
93
|
+
```gherkin:en
|
|
94
|
+
Scenario: Search modal opens via click on trigger
|
|
95
|
+
|
|
96
|
+
Given I am logged in as a valid user
|
|
97
|
+
And I navigate to the dashboard
|
|
98
|
+
When I click on the search trigger button
|
|
99
|
+
Then the search modal should open
|
|
100
|
+
And I should find the search input
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```gherkin:es
|
|
104
|
+
Scenario: Modal de busqueda se abre via click en trigger
|
|
105
|
+
|
|
106
|
+
Given estoy logueado como usuario valido
|
|
107
|
+
And navego al dashboard
|
|
108
|
+
When hago click en el boton de trigger de busqueda
|
|
109
|
+
Then el modal de busqueda deberia abrirse
|
|
110
|
+
And deberia encontrar el input de busqueda
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Expected Results
|
|
114
|
+
- Search modal opens when trigger is clicked
|
|
115
|
+
- `global-search-input` selector exists inside modal
|