@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,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: Settings Teams
|
|
3
|
+
*
|
|
4
|
+
* This test validates that settings teams selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate SettingsPOM teams selectors work correctly
|
|
9
|
+
* - Ensure all settings.teams.* selectors are implemented
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Navigate to teams settings page (requires login)
|
|
14
|
+
* - Assert elements exist in DOM (no form submissions)
|
|
15
|
+
* - Fast execution (< 30 seconds per describe block)
|
|
16
|
+
*
|
|
17
|
+
* Test IDs:
|
|
18
|
+
* - SEL_STMS_001: Teams Page Selectors
|
|
19
|
+
* - SEL_STMS_002: Create Team Dialog (documentation only)
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { SettingsPOM } from '../../../src/features/SettingsPOM'
|
|
23
|
+
import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
|
|
24
|
+
|
|
25
|
+
describe('Settings Teams Selectors Validation', { tags: ['@ui-selectors', '@settings'] }, () => {
|
|
26
|
+
const settings = SettingsPOM.create()
|
|
27
|
+
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
loginAsDefaultDeveloper()
|
|
30
|
+
cy.visit('/dashboard/settings/teams', { timeout: 60000 })
|
|
31
|
+
// Wait for teams page to load - either main or loading should appear
|
|
32
|
+
cy.get('[data-cy="teams-settings-main"], [data-cy="teams-settings-loading"]', { timeout: 15000 }).should('exist')
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
// ============================================
|
|
36
|
+
// SEL_STMS_001: TEAMS PAGE SELECTORS
|
|
37
|
+
// ============================================
|
|
38
|
+
describe('SEL_STMS_001: Teams Page Selectors', { tags: '@SEL_STMS_001' }, () => {
|
|
39
|
+
it('should find teams main container', () => {
|
|
40
|
+
// Wait for loading to finish
|
|
41
|
+
cy.get('[data-cy="teams-settings-main"]', { timeout: 15000 }).should('exist')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('should find teams header', () => {
|
|
45
|
+
cy.get('[data-cy="teams-settings-header"]', { timeout: 15000 }).should('exist')
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('should find teams list', () => {
|
|
49
|
+
cy.get('[data-cy="teams-settings-teams-list"]', { timeout: 15000 }).should('exist')
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it('should find team item in list', () => {
|
|
53
|
+
cy.get('[data-cy^="team-item-"]', { timeout: 15000 }).should('have.length.at.least', 1)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('should find team details section when team is selected', () => {
|
|
57
|
+
// Click on first team to select it
|
|
58
|
+
cy.get('[data-cy^="team-item-"]').first().click()
|
|
59
|
+
// Team details should appear
|
|
60
|
+
cy.get('[data-cy="teams-settings-team-details"]', { timeout: 15000 }).should('exist')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
// Additional selectors implemented but not in CORE_SELECTORS.settings.teams
|
|
64
|
+
it('should find create team button', () => {
|
|
65
|
+
cy.get('[data-cy="create-team-button"]', { timeout: 15000 }).should('exist')
|
|
66
|
+
})
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
// ============================================
|
|
70
|
+
// SEL_STMS_002: CREATE TEAM DIALOG
|
|
71
|
+
// Tested in teams.cy.ts, documented here for reference
|
|
72
|
+
// ============================================
|
|
73
|
+
describe('SEL_STMS_002: Create Team Dialog Documentation', { tags: '@SEL_STMS_002' }, () => {
|
|
74
|
+
it('should document create team dialog selectors', () => {
|
|
75
|
+
cy.log('Create Team Dialog selectors are tested in teams.cy.ts')
|
|
76
|
+
cy.log('Dialog selectors:')
|
|
77
|
+
cy.log('- create-team-dialog')
|
|
78
|
+
cy.log('- team-name-input')
|
|
79
|
+
cy.log('- team-slug-input')
|
|
80
|
+
cy.log('- team-description-input')
|
|
81
|
+
cy.log('- cancel-create-team')
|
|
82
|
+
cy.log('- submit-create-team')
|
|
83
|
+
cy.wrap(true).should('be.true')
|
|
84
|
+
})
|
|
85
|
+
})
|
|
86
|
+
})
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Superadmin UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, superadmin, ui-validation, admin-panel]
|
|
5
|
+
grepTags: [ui-selectors, superadmin, SEL_SADM_001, SEL_SADM_002, SEL_SADM_003, SEL_SADM_004, SEL_SADM_005, SEL_SADM_006]
|
|
6
|
+
coverage: 6
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Superadmin UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that superadmin area selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Runs as Phase 12 sub-gate before functional tests.
|
|
12
|
+
|
|
13
|
+
## @test SEL_SADM_001: Superadmin Dashboard Selectors
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** High
|
|
17
|
+
- **Type:** Selector Validation
|
|
18
|
+
- **Tags:** superadmin, dashboard, container
|
|
19
|
+
- **Grep:** `@ui-selectors` `@SEL_SADM_001`
|
|
20
|
+
- **Status:** Active
|
|
21
|
+
|
|
22
|
+
```gherkin:en
|
|
23
|
+
Scenario: Superadmin dashboard has required selectors
|
|
24
|
+
|
|
25
|
+
Given I am logged in as superadmin
|
|
26
|
+
And I navigate to the superadmin dashboard
|
|
27
|
+
Then I should find the superadmin container
|
|
28
|
+
And I should find the dashboard container
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```gherkin:es
|
|
32
|
+
Scenario: El dashboard de superadmin tiene los selectores requeridos
|
|
33
|
+
|
|
34
|
+
Given estoy logueado como superadmin
|
|
35
|
+
And navego al dashboard de superadmin
|
|
36
|
+
Then deberia encontrar el contenedor de superadmin
|
|
37
|
+
And deberia encontrar el contenedor del dashboard
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Expected Results
|
|
41
|
+
- `superadmin.container` selector exists (superadmin-container)
|
|
42
|
+
- `superadmin.dashboard.container` selector exists (superadmin-dashboard)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## @test SEL_SADM_002: Superadmin Navigation Selectors
|
|
47
|
+
|
|
48
|
+
### Metadata
|
|
49
|
+
- **Priority:** High
|
|
50
|
+
- **Type:** Selector Validation
|
|
51
|
+
- **Tags:** superadmin, navigation, sidebar
|
|
52
|
+
- **Grep:** `@ui-selectors` `@SEL_SADM_002`
|
|
53
|
+
- **Status:** Active
|
|
54
|
+
|
|
55
|
+
```gherkin:en
|
|
56
|
+
Scenario: Superadmin navigation has all required links
|
|
57
|
+
|
|
58
|
+
Given I am logged in as superadmin
|
|
59
|
+
And I navigate to the superadmin area
|
|
60
|
+
Then I should find the dashboard nav link
|
|
61
|
+
And I should find the users nav link
|
|
62
|
+
And I should find the teams nav link
|
|
63
|
+
And I should find the team-roles nav link
|
|
64
|
+
And I should find the subscriptions nav link
|
|
65
|
+
And I should find the exit to dashboard link
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```gherkin:es
|
|
69
|
+
Scenario: La navegacion de superadmin tiene todos los links requeridos
|
|
70
|
+
|
|
71
|
+
Given estoy logueado como superadmin
|
|
72
|
+
And navego al area de superadmin
|
|
73
|
+
Then deberia encontrar el link de navegacion a dashboard
|
|
74
|
+
And deberia encontrar el link de navegacion a users
|
|
75
|
+
And deberia encontrar el link de navegacion a teams
|
|
76
|
+
And deberia encontrar el link de navegacion a team-roles
|
|
77
|
+
And deberia encontrar el link de navegacion a subscriptions
|
|
78
|
+
And deberia encontrar el link de salir al dashboard
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Expected Results
|
|
82
|
+
- `superadmin.navigation.dashboard` selector exists (superadmin-nav-dashboard)
|
|
83
|
+
- `superadmin.navigation.users` selector exists (superadmin-nav-users)
|
|
84
|
+
- `superadmin.navigation.teams` selector exists (superadmin-nav-teams)
|
|
85
|
+
- `superadmin.navigation.teamRoles` selector exists (superadmin-nav-team-roles)
|
|
86
|
+
- `superadmin.navigation.subscriptions` selector exists (superadmin-nav-subscriptions)
|
|
87
|
+
- `superadmin.navigation.exitToDashboard` selector exists (superadmin-sidebar-exit-to-dashboard)
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## @test SEL_SADM_003: Superadmin Users Page Selectors
|
|
92
|
+
|
|
93
|
+
### Metadata
|
|
94
|
+
- **Priority:** High
|
|
95
|
+
- **Type:** Selector Validation
|
|
96
|
+
- **Tags:** superadmin, users, management
|
|
97
|
+
- **Grep:** `@ui-selectors` `@SEL_SADM_003`
|
|
98
|
+
- **Status:** Active
|
|
99
|
+
|
|
100
|
+
```gherkin:en
|
|
101
|
+
Scenario: Superadmin users page has required selectors
|
|
102
|
+
|
|
103
|
+
Given I am logged in as superadmin
|
|
104
|
+
And I navigate to the superadmin users page
|
|
105
|
+
Then I should find the users container
|
|
106
|
+
And I should find the users table
|
|
107
|
+
And I should find the users search input
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
```gherkin:es
|
|
111
|
+
Scenario: La pagina de usuarios de superadmin tiene los selectores requeridos
|
|
112
|
+
|
|
113
|
+
Given estoy logueado como superadmin
|
|
114
|
+
And navego a la pagina de usuarios de superadmin
|
|
115
|
+
Then deberia encontrar el contenedor de usuarios
|
|
116
|
+
And deberia encontrar la tabla de usuarios
|
|
117
|
+
And deberia encontrar el input de busqueda de usuarios
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Expected Results
|
|
121
|
+
- `superadmin.users.container` selector exists (superadmin-users-container)
|
|
122
|
+
- `superadmin.users.table` selector exists (superadmin-users-table)
|
|
123
|
+
- `superadmin.users.search` selector exists (superadmin-users-search)
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## @test SEL_SADM_004: Superadmin Teams Page Selectors
|
|
128
|
+
|
|
129
|
+
### Metadata
|
|
130
|
+
- **Priority:** High
|
|
131
|
+
- **Type:** Selector Validation
|
|
132
|
+
- **Tags:** superadmin, teams, management
|
|
133
|
+
- **Grep:** `@ui-selectors` `@SEL_SADM_004`
|
|
134
|
+
- **Status:** Active
|
|
135
|
+
|
|
136
|
+
```gherkin:en
|
|
137
|
+
Scenario: Superadmin teams page has required selectors
|
|
138
|
+
|
|
139
|
+
Given I am logged in as superadmin
|
|
140
|
+
And I navigate to the superadmin teams page
|
|
141
|
+
Then I should find the teams container
|
|
142
|
+
And I should find the teams table
|
|
143
|
+
And I should find the teams search input
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```gherkin:es
|
|
147
|
+
Scenario: La pagina de equipos de superadmin tiene los selectores requeridos
|
|
148
|
+
|
|
149
|
+
Given estoy logueado como superadmin
|
|
150
|
+
And navego a la pagina de equipos de superadmin
|
|
151
|
+
Then deberia encontrar el contenedor de equipos
|
|
152
|
+
And deberia encontrar la tabla de equipos
|
|
153
|
+
And deberia encontrar el input de busqueda de equipos
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Expected Results
|
|
157
|
+
- `superadmin.teams.container` selector exists (superadmin-teams-container)
|
|
158
|
+
- `superadmin.teams.table` selector exists (superadmin-teams-table)
|
|
159
|
+
- `superadmin.teams.search` selector exists (superadmin-teams-search)
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## @test SEL_SADM_005: Superadmin Subscriptions Page Selectors
|
|
164
|
+
|
|
165
|
+
### Metadata
|
|
166
|
+
- **Priority:** High
|
|
167
|
+
- **Type:** Selector Validation
|
|
168
|
+
- **Tags:** superadmin, subscriptions, billing
|
|
169
|
+
- **Grep:** `@ui-selectors` `@SEL_SADM_005`
|
|
170
|
+
- **Status:** Active
|
|
171
|
+
|
|
172
|
+
```gherkin:en
|
|
173
|
+
Scenario: Superadmin subscriptions page has required selectors
|
|
174
|
+
|
|
175
|
+
Given I am logged in as superadmin
|
|
176
|
+
And I navigate to the superadmin subscriptions page
|
|
177
|
+
Then I should find the subscriptions container
|
|
178
|
+
And I should find the MRR stat card
|
|
179
|
+
And I should find the plan distribution section
|
|
180
|
+
And I should find the active count stat card
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
```gherkin:es
|
|
184
|
+
Scenario: La pagina de suscripciones de superadmin tiene los selectores requeridos
|
|
185
|
+
|
|
186
|
+
Given estoy logueado como superadmin
|
|
187
|
+
And navego a la pagina de suscripciones de superadmin
|
|
188
|
+
Then deberia encontrar el contenedor de suscripciones
|
|
189
|
+
And deberia encontrar la tarjeta de estadisticas MRR
|
|
190
|
+
And deberia encontrar la seccion de distribucion de planes
|
|
191
|
+
And deberia encontrar la tarjeta de conteo activo
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Expected Results
|
|
195
|
+
- `superadmin.subscriptions.container` selector exists (superadmin-subscriptions-container)
|
|
196
|
+
- `superadmin.subscriptions.mrr` selector exists (superadmin-subscriptions-mrr)
|
|
197
|
+
- `superadmin.subscriptions.planDistribution` selector exists (superadmin-subscriptions-plan-distribution)
|
|
198
|
+
- `superadmin.subscriptions.activeCount` selector exists (superadmin-subscriptions-active-count)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## @test SEL_SADM_006: Dynamic Selectors (Pattern Validation)
|
|
203
|
+
|
|
204
|
+
### Metadata
|
|
205
|
+
- **Priority:** Medium
|
|
206
|
+
- **Type:** Selector Validation
|
|
207
|
+
- **Tags:** superadmin, dynamic, patterns
|
|
208
|
+
- **Grep:** `@ui-selectors` `@SEL_SADM_006`
|
|
209
|
+
- **Status:** Active
|
|
210
|
+
|
|
211
|
+
```gherkin:en
|
|
212
|
+
Scenario: Dynamic selectors return valid patterns
|
|
213
|
+
|
|
214
|
+
Given I am logged in as superadmin
|
|
215
|
+
And I navigate to the superadmin users page
|
|
216
|
+
Then the userRow selector should return a valid pattern
|
|
217
|
+
And the userView selector should return a valid pattern
|
|
218
|
+
And the teamRow selector should return a valid pattern
|
|
219
|
+
And the subscriptionsPlanCount selector should return a valid pattern
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```gherkin:es
|
|
223
|
+
Scenario: Los selectores dinamicos retornan patrones validos
|
|
224
|
+
|
|
225
|
+
Given estoy logueado como superadmin
|
|
226
|
+
And navego a la pagina de usuarios de superadmin
|
|
227
|
+
Then el selector userRow deberia retornar un patron valido
|
|
228
|
+
And el selector userView deberia retornar un patron valido
|
|
229
|
+
And el selector teamRow deberia retornar un patron valido
|
|
230
|
+
And el selector subscriptionsPlanCount deberia retornar un patron valido
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Expected Results
|
|
234
|
+
- `superadmin.users.row` pattern includes 'superadmin-user-row'
|
|
235
|
+
- `superadmin.users.viewButton` pattern includes 'superadmin-user-view'
|
|
236
|
+
- `superadmin.teams.row` pattern includes 'superadmin-team-row'
|
|
237
|
+
- `superadmin.subscriptions.planCount` pattern includes 'superadmin-subscriptions-plan-count'
|
|
238
|
+
|
|
239
|
+
### Notes
|
|
240
|
+
These tests validate that dynamic selector functions (those that accept parameters like `id` or `plan`) return correctly formatted selector strings. They do not test actual DOM elements.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Related Components
|
|
245
|
+
|
|
246
|
+
| Component | File | Selectors |
|
|
247
|
+
|-----------|------|-----------|
|
|
248
|
+
| SuperadminLayout | `packages/core/templates/app/superadmin/layout.tsx` | superadmin-container |
|
|
249
|
+
| SuperadminSidebar | `packages/core/src/components/superadmin/layouts/SuperadminSidebar.tsx` | superadmin-nav-* |
|
|
250
|
+
| SuperadminDashboard | `packages/core/templates/app/superadmin/page.tsx` | superadmin-dashboard |
|
|
251
|
+
| UsersPage | `packages/core/templates/app/superadmin/users/page.tsx` | superadmin-users-* |
|
|
252
|
+
| TeamsPage | `packages/core/templates/app/superadmin/teams/page.tsx` | superadmin-teams-* |
|
|
253
|
+
| SubscriptionsPage | `packages/core/templates/app/superadmin/subscriptions/page.tsx` | superadmin-subscriptions-* |
|
|
254
|
+
| UsersTable | `packages/core/src/components/users/tables/UsersTable.tsx` | superadmin-users-table, superadmin-user-row-{id} |
|
|
255
|
+
| TeamsTable | `packages/core/src/components/superadmin/tables/TeamsTable.tsx` | superadmin-teams-table, superadmin-team-row-{id} |
|
|
256
|
+
|
|
257
|
+
## Related POMs
|
|
258
|
+
|
|
259
|
+
| POM | File | Usage |
|
|
260
|
+
|-----|------|-------|
|
|
261
|
+
| SuperadminPOM | `themes/default/tests/cypress/src/features/SuperadminPOM.ts` | Superadmin area interactions and selectors |
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: Superadmin (Superadmin Area)
|
|
3
|
+
*
|
|
4
|
+
* This test validates that Superadmin selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate SuperadminPOM selectors work correctly
|
|
9
|
+
* - Ensure all superadmin.* selectors are implemented
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Navigate to superadmin pages (requires superadmin login)
|
|
14
|
+
* - Assert elements exist in DOM (no form submissions)
|
|
15
|
+
* - Fast execution (< 30 seconds per describe block)
|
|
16
|
+
*
|
|
17
|
+
* Test IDs:
|
|
18
|
+
* - SEL_SADM_001: Superadmin Dashboard Selectors
|
|
19
|
+
* - SEL_SADM_002: Superadmin Navigation Selectors
|
|
20
|
+
* - SEL_SADM_003: Superadmin Users Page Selectors
|
|
21
|
+
* - SEL_SADM_004: Superadmin Teams Page Selectors
|
|
22
|
+
* - SEL_SADM_005: Superadmin Subscriptions Page Selectors
|
|
23
|
+
* - SEL_SADM_006: Dynamic Selectors (Pattern Validation)
|
|
24
|
+
*
|
|
25
|
+
* NOTE: Requires superadmin role to access /superadmin/* pages.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { SuperadminPOM } from '../../../src/features/SuperadminPOM'
|
|
29
|
+
import { loginAsDefaultSuperadmin } from '../../../src/session-helpers'
|
|
30
|
+
|
|
31
|
+
describe('Superadmin Selectors Validation', { tags: ['@ui-selectors', '@superadmin'] }, () => {
|
|
32
|
+
const superadmin = SuperadminPOM.create()
|
|
33
|
+
|
|
34
|
+
// ============================================
|
|
35
|
+
// SEL_SADM_001: SUPERADMIN DASHBOARD
|
|
36
|
+
// ============================================
|
|
37
|
+
describe('SEL_SADM_001: Superadmin Dashboard', { tags: '@SEL_SADM_001' }, () => {
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
loginAsDefaultSuperadmin()
|
|
40
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
41
|
+
cy.url().should('include', '/superadmin')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('should find superadmin container', () => {
|
|
45
|
+
cy.get(superadmin.selectors.navContainer).should('exist')
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('should find dashboard container', () => {
|
|
49
|
+
cy.get(superadmin.selectors.dashboardContainer).should('exist')
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
// ============================================
|
|
54
|
+
// SEL_SADM_002: SUPERADMIN NAVIGATION
|
|
55
|
+
// ============================================
|
|
56
|
+
describe('SEL_SADM_002: Superadmin Navigation', { tags: '@SEL_SADM_002' }, () => {
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
loginAsDefaultSuperadmin()
|
|
59
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
60
|
+
cy.url().should('include', '/superadmin')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('should find nav dashboard link', () => {
|
|
64
|
+
cy.get(superadmin.selectors.navDashboard).should('exist')
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it('should find nav users link', () => {
|
|
68
|
+
cy.get(superadmin.selectors.navUsers).should('exist')
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('should find nav teams link', () => {
|
|
72
|
+
cy.get(superadmin.selectors.navTeams).should('exist')
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('should find nav team-roles link', () => {
|
|
76
|
+
cy.get(superadmin.selectors.navTeamRoles).should('exist')
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('should find nav subscriptions link', () => {
|
|
80
|
+
cy.get(superadmin.selectors.navSubscriptions).should('exist')
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('should find exit to dashboard link', () => {
|
|
84
|
+
cy.get(superadmin.selectors.exitToDashboard).should('exist')
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
// ============================================
|
|
89
|
+
// SEL_SADM_003: SUPERADMIN USERS PAGE
|
|
90
|
+
// ============================================
|
|
91
|
+
describe('SEL_SADM_003: Superadmin Users Page', { tags: '@SEL_SADM_003' }, () => {
|
|
92
|
+
beforeEach(() => {
|
|
93
|
+
loginAsDefaultSuperadmin()
|
|
94
|
+
cy.visit('/superadmin/users', { timeout: 60000, failOnStatusCode: false })
|
|
95
|
+
cy.url().should('include', '/superadmin/users')
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
it('should find users container', () => {
|
|
99
|
+
cy.get(superadmin.selectors.usersContainer).should('exist')
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('should find users table', () => {
|
|
103
|
+
cy.get(superadmin.selectors.usersTable).should('exist')
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('should find users search input', () => {
|
|
107
|
+
cy.get(superadmin.selectors.usersSearch).should('exist')
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
// ============================================
|
|
112
|
+
// SEL_SADM_004: SUPERADMIN TEAMS PAGE
|
|
113
|
+
// ============================================
|
|
114
|
+
describe('SEL_SADM_004: Superadmin Teams Page', { tags: '@SEL_SADM_004' }, () => {
|
|
115
|
+
beforeEach(() => {
|
|
116
|
+
loginAsDefaultSuperadmin()
|
|
117
|
+
cy.visit('/superadmin/teams', { timeout: 60000, failOnStatusCode: false })
|
|
118
|
+
cy.url().should('include', '/superadmin/teams')
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
it('should find teams container', () => {
|
|
122
|
+
cy.get(superadmin.selectors.teamsContainer).should('exist')
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
it('should find teams table', () => {
|
|
126
|
+
cy.get(superadmin.selectors.teamsTable).should('exist')
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
it('should find teams search input', () => {
|
|
130
|
+
cy.get(superadmin.selectors.teamsSearch).should('exist')
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
// ============================================
|
|
135
|
+
// SEL_SADM_005: SUPERADMIN SUBSCRIPTIONS PAGE
|
|
136
|
+
// ============================================
|
|
137
|
+
describe('SEL_SADM_005: Superadmin Subscriptions Page', { tags: '@SEL_SADM_005' }, () => {
|
|
138
|
+
beforeEach(() => {
|
|
139
|
+
loginAsDefaultSuperadmin()
|
|
140
|
+
cy.visit('/superadmin/subscriptions', { timeout: 60000, failOnStatusCode: false })
|
|
141
|
+
cy.url().should('include', '/superadmin/subscriptions')
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
it('should find subscriptions container', () => {
|
|
145
|
+
cy.get(superadmin.selectors.subscriptionsContainer).should('exist')
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('should find MRR stat', () => {
|
|
149
|
+
cy.get(superadmin.selectors.subscriptionsMrr).should('exist')
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
it('should find plan distribution section', () => {
|
|
153
|
+
cy.get(superadmin.selectors.subscriptionsPlanDistribution).should('exist')
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
it('should find active count stat', () => {
|
|
157
|
+
cy.get(superadmin.selectors.subscriptionsActiveCount).should('exist')
|
|
158
|
+
})
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
// ============================================
|
|
162
|
+
// SEL_SADM_006: DYNAMIC SELECTORS (PATTERN VALIDATION)
|
|
163
|
+
// These test the selector pattern, not actual elements
|
|
164
|
+
// ============================================
|
|
165
|
+
describe('SEL_SADM_006: Dynamic Selectors (Pattern Validation)', { tags: '@SEL_SADM_006' }, () => {
|
|
166
|
+
beforeEach(() => {
|
|
167
|
+
loginAsDefaultSuperadmin()
|
|
168
|
+
cy.visit('/superadmin/users', { timeout: 60000, failOnStatusCode: false })
|
|
169
|
+
cy.url().should('include', '/superadmin/users')
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it('should have valid userRow selector pattern', () => {
|
|
173
|
+
// Just verify the selector function returns a valid string
|
|
174
|
+
const selector = superadmin.selectors.userRow('test-id')
|
|
175
|
+
expect(selector).to.include('superadmin-user-row')
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
it('should have valid userView selector pattern', () => {
|
|
179
|
+
const selector = superadmin.selectors.userView('test-id')
|
|
180
|
+
expect(selector).to.include('superadmin-user-view')
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
it('should have valid teamRow selector pattern', () => {
|
|
184
|
+
const selector = superadmin.selectors.teamRow('test-id')
|
|
185
|
+
expect(selector).to.include('superadmin-team-row')
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it('should have valid subscriptionsPlanCount selector pattern', () => {
|
|
189
|
+
const selector = superadmin.selectors.subscriptionsPlanCount('free')
|
|
190
|
+
expect(selector).to.include('superadmin-subscriptions-plan-count')
|
|
191
|
+
})
|
|
192
|
+
})
|
|
193
|
+
})
|