@nextsparkjs/theme-default 0.1.0-beta.1 → 0.1.0-beta.100
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 +54 -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/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/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,188 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Editor Custom Role Login Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Editor custom role (theme-defined) login and specific permissions:
|
|
7
|
+
* - Editor is a custom role defined in the Default theme
|
|
8
|
+
* - Can view/list customers but cannot create/update/delete
|
|
9
|
+
* - Limited navigation and entity access
|
|
10
|
+
* - Cannot access Superadmin or Dev Zone
|
|
11
|
+
*
|
|
12
|
+
* Note: Editor role is team-based (not a global app role)
|
|
13
|
+
* This file tests Editor-specific permissions as defined in the theme.
|
|
14
|
+
*
|
|
15
|
+
* Tags: @uat, @feat-auth, @custom-role, @editor
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as allure from 'allure-cypress'
|
|
19
|
+
|
|
20
|
+
import { loginAsDefaultEditor, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
|
|
21
|
+
import { DashboardPOM } from '../../../../src/features/DashboardPOM'
|
|
22
|
+
import { SettingsPOM } from '../../../../src/features/SettingsPOM'
|
|
23
|
+
import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
|
|
24
|
+
import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
|
|
25
|
+
import { AuthPOM } from '../../../../src/core/AuthPOM'
|
|
26
|
+
|
|
27
|
+
describe('Authentication - Editor Custom Role Permissions', {
|
|
28
|
+
tags: ['@uat', '@feat-auth', '@custom-role', '@editor']
|
|
29
|
+
}, () => {
|
|
30
|
+
const dashboard = DashboardPOM.create()
|
|
31
|
+
const settings = SettingsPOM.create()
|
|
32
|
+
const sector7 = SuperadminPOM.create()
|
|
33
|
+
const devArea = DevAreaPOM.create()
|
|
34
|
+
const auth = new AuthPOM()
|
|
35
|
+
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
allure.epic('Authentication')
|
|
38
|
+
allure.feature('Custom Roles')
|
|
39
|
+
allure.story('Editor Permissions')
|
|
40
|
+
loginAsDefaultEditor()
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
describe('EDITOR-PERM-001: Editor Dashboard Access', { tags: '@smoke' }, () => {
|
|
44
|
+
it('should access dashboard with limited navigation', { tags: '@smoke' }, () => {
|
|
45
|
+
allure.severity('critical')
|
|
46
|
+
|
|
47
|
+
// 1. Visit dashboard and wait for load
|
|
48
|
+
dashboard.visitDashboard()
|
|
49
|
+
dashboard.waitForDashboard()
|
|
50
|
+
|
|
51
|
+
// 2. Validate dashboard is accessible
|
|
52
|
+
dashboard.assertDashboardVisible()
|
|
53
|
+
|
|
54
|
+
cy.log(`✅ Editor dashboard access verified (${DEFAULT_THEME_USERS.EDITOR})`)
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
describe('EDITOR-PERM-002: Editor View-Only Customer Access', { tags: '@smoke' }, () => {
|
|
59
|
+
it('should have view-only access to customers list', { tags: '@smoke' }, () => {
|
|
60
|
+
allure.severity('critical')
|
|
61
|
+
|
|
62
|
+
// 1. Navigate to customers
|
|
63
|
+
dashboard.visitEntity('customers')
|
|
64
|
+
dashboard.waitForEntityPage('customers')
|
|
65
|
+
|
|
66
|
+
// 2. Validate table is visible (Editor can read)
|
|
67
|
+
dashboard.assertEntityPageVisible('customers')
|
|
68
|
+
|
|
69
|
+
// 3. Create button should NOT be visible for Editor
|
|
70
|
+
dashboard.assertEntityAddButtonNotVisible('customers')
|
|
71
|
+
|
|
72
|
+
cy.log('✅ Editor has view-only access to customers')
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
describe('EDITOR-PERM-003: Editor Cannot Edit Customers', () => {
|
|
77
|
+
it('should not see edit buttons on customer items', () => {
|
|
78
|
+
allure.severity('high')
|
|
79
|
+
|
|
80
|
+
// 1. Navigate to customers
|
|
81
|
+
dashboard.visitEntity('customers')
|
|
82
|
+
dashboard.waitForEntityPage('customers')
|
|
83
|
+
|
|
84
|
+
// 2. Validate table is visible
|
|
85
|
+
dashboard.assertEntityPageVisible('customers')
|
|
86
|
+
|
|
87
|
+
// 3. If there are items, check they don't have edit buttons
|
|
88
|
+
cy.get('body').then(($body) => {
|
|
89
|
+
if ($body.find('[data-cy^="customers-row-"]').length > 0) {
|
|
90
|
+
// Check first row doesn't have edit action
|
|
91
|
+
cy.get('[data-cy^="customers-row-"]').first().within(() => {
|
|
92
|
+
cy.get('[data-cy*="edit"]').should('not.exist')
|
|
93
|
+
cy.get('[data-cy*="delete"]').should('not.exist')
|
|
94
|
+
})
|
|
95
|
+
cy.log('✅ Editor cannot see edit/delete actions')
|
|
96
|
+
} else {
|
|
97
|
+
cy.log('✅ No items to verify, but create button is hidden')
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
})
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
describe('EDITOR-PERM-004: Editor Tasks Access', { tags: '@in-develop' }, () => {
|
|
104
|
+
it('should NOT have access to tasks (permission denied)', { tags: '@in-develop' }, () => {
|
|
105
|
+
allure.severity('high')
|
|
106
|
+
|
|
107
|
+
// 1. Navigate to tasks - Editor does NOT have tasks.list permission
|
|
108
|
+
cy.visit('/dashboard/tasks', { failOnStatusCode: false })
|
|
109
|
+
|
|
110
|
+
// 2. Should be redirected to permission denied page
|
|
111
|
+
cy.url().should('include', 'permission-denied')
|
|
112
|
+
cy.contains('Acceso denegado').should('be.visible')
|
|
113
|
+
|
|
114
|
+
cy.log('✅ Editor correctly blocked from tasks')
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
describe('EDITOR-PERM-005: Editor Settings Access', () => {
|
|
119
|
+
it('should have profile-only settings access', () => {
|
|
120
|
+
allure.severity('normal')
|
|
121
|
+
|
|
122
|
+
// 1. Navigate to settings
|
|
123
|
+
settings.visitSettings()
|
|
124
|
+
|
|
125
|
+
// 2. Check access
|
|
126
|
+
cy.url().then((url) => {
|
|
127
|
+
if (url.includes('/settings')) {
|
|
128
|
+
settings.assertSettingsVisible()
|
|
129
|
+
// Should only see profile, not team settings
|
|
130
|
+
settings.assertNavItemVisible('profile')
|
|
131
|
+
cy.log('✅ Editor has profile settings access')
|
|
132
|
+
} else {
|
|
133
|
+
cy.log('✅ Editor redirected from settings')
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
describe('EDITOR-PERM-006: Editor Cannot Access Superadmin', () => {
|
|
140
|
+
it('should be redirected when trying to access /superadmin', () => {
|
|
141
|
+
allure.severity('high')
|
|
142
|
+
|
|
143
|
+
// 1. Attempt to visit Superadmin
|
|
144
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
145
|
+
|
|
146
|
+
// 2. Should be redirected
|
|
147
|
+
sector7.assertAccessDenied()
|
|
148
|
+
|
|
149
|
+
cy.log('✅ Editor correctly blocked from Superadmin')
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
describe('EDITOR-PERM-007: Editor Cannot Access Dev Zone', () => {
|
|
154
|
+
it('should be redirected when trying to access /dev', () => {
|
|
155
|
+
allure.severity('high')
|
|
156
|
+
|
|
157
|
+
// 1. Attempt to visit Dev Zone
|
|
158
|
+
devArea.attemptToVisitDev()
|
|
159
|
+
|
|
160
|
+
// 2. Should be redirected
|
|
161
|
+
devArea.assertRedirectedToDashboard()
|
|
162
|
+
|
|
163
|
+
cy.log('✅ Editor correctly blocked from Dev Zone')
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
describe('EDITOR-PERM-008: Editor Logout Flow', () => {
|
|
168
|
+
it('should logout successfully', () => {
|
|
169
|
+
allure.severity('normal')
|
|
170
|
+
|
|
171
|
+
// 1. Visit dashboard
|
|
172
|
+
dashboard.visitDashboard()
|
|
173
|
+
dashboard.waitForDashboard()
|
|
174
|
+
|
|
175
|
+
// 2. Logout using AuthPOM
|
|
176
|
+
auth.logout()
|
|
177
|
+
|
|
178
|
+
// 3. Validate redirected to login
|
|
179
|
+
auth.assertOnLoginPage()
|
|
180
|
+
|
|
181
|
+
cy.log('✅ Editor logout successful')
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
after(() => {
|
|
186
|
+
cy.log('✅ Editor custom role tests completed')
|
|
187
|
+
})
|
|
188
|
+
})
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Authentication via DevKeyring
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [auth, login, logout, devkeyring]
|
|
5
|
+
grepTags: [uat, feat-auth, smoke, critical]
|
|
6
|
+
coverage: 4
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Authentication via DevKeyring
|
|
10
|
+
|
|
11
|
+
> Test suite for user authentication using DevKeyring development tool. Covers login flows for Owner, Member, and Admin roles, plus logout functionality.
|
|
12
|
+
|
|
13
|
+
## @test LOGIN-001: Owner Login via DevKeyring
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** login, owner, devkeyring
|
|
19
|
+
- **Grep:** `@smoke` `@critical`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Owner can login and access dashboard
|
|
23
|
+
|
|
24
|
+
Given I am on the login page
|
|
25
|
+
And the DevKeyring component is visible
|
|
26
|
+
When I select the Owner user (owner@nextspark.dev)
|
|
27
|
+
And I click to login
|
|
28
|
+
Then I should be redirected to the dashboard
|
|
29
|
+
And the dashboard container should be visible
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```gherkin:es
|
|
33
|
+
Scenario: Owner puede loguearse y acceder al dashboard
|
|
34
|
+
|
|
35
|
+
Given estoy en la pagina de login
|
|
36
|
+
And el componente DevKeyring esta visible
|
|
37
|
+
When selecciono el usuario Owner (owner@nextspark.dev)
|
|
38
|
+
And hago clic para iniciar sesion
|
|
39
|
+
Then deberia ser redirigido al dashboard
|
|
40
|
+
And el contenedor del dashboard deberia estar visible
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Expected Results
|
|
44
|
+
- DevKeyring component displays user selector
|
|
45
|
+
- Owner user (owner@nextspark.dev) is selectable
|
|
46
|
+
- Login redirects to /dashboard
|
|
47
|
+
- Dashboard container is visible after login
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## @test LOGIN-002: Member Login via DevKeyring
|
|
52
|
+
|
|
53
|
+
### Metadata
|
|
54
|
+
- **Priority:** Critical
|
|
55
|
+
- **Type:** Smoke
|
|
56
|
+
- **Tags:** login, member, devkeyring
|
|
57
|
+
- **Grep:** `@smoke` `@critical`
|
|
58
|
+
|
|
59
|
+
```gherkin:en
|
|
60
|
+
Scenario: Member can login and access dashboard
|
|
61
|
+
|
|
62
|
+
Given I am on the login page
|
|
63
|
+
And the DevKeyring component is visible
|
|
64
|
+
When I select the Member user (member@nextspark.dev)
|
|
65
|
+
And I click to login
|
|
66
|
+
Then I should be redirected to the dashboard
|
|
67
|
+
And the dashboard container should be visible
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```gherkin:es
|
|
71
|
+
Scenario: Member puede loguearse y acceder al dashboard
|
|
72
|
+
|
|
73
|
+
Given estoy en la pagina de login
|
|
74
|
+
And el componente DevKeyring esta visible
|
|
75
|
+
When selecciono el usuario Member (member@nextspark.dev)
|
|
76
|
+
And hago clic para iniciar sesion
|
|
77
|
+
Then deberia ser redirigido al dashboard
|
|
78
|
+
And el contenedor del dashboard deberia estar visible
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Expected Results
|
|
82
|
+
- Member user (member@nextspark.dev) is selectable
|
|
83
|
+
- Login redirects to /dashboard
|
|
84
|
+
- Dashboard container is visible after login
|
|
85
|
+
- Member has read-only access to most entities
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## @test LOGIN-003: Admin Login via DevKeyring
|
|
90
|
+
|
|
91
|
+
### Metadata
|
|
92
|
+
- **Priority:** High
|
|
93
|
+
- **Type:** Regression
|
|
94
|
+
- **Tags:** login, admin, devkeyring
|
|
95
|
+
|
|
96
|
+
```gherkin:en
|
|
97
|
+
Scenario: Admin can login and access dashboard
|
|
98
|
+
|
|
99
|
+
Given I am on the login page
|
|
100
|
+
And the DevKeyring component is visible
|
|
101
|
+
When I select the Admin user (admin@nextspark.dev)
|
|
102
|
+
And I click to login
|
|
103
|
+
Then I should be redirected to the dashboard
|
|
104
|
+
And the dashboard container should be visible
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
```gherkin:es
|
|
108
|
+
Scenario: Admin puede loguearse y acceder al dashboard
|
|
109
|
+
|
|
110
|
+
Given estoy en la pagina de login
|
|
111
|
+
And el componente DevKeyring esta visible
|
|
112
|
+
When selecciono el usuario Admin (admin@nextspark.dev)
|
|
113
|
+
And hago clic para iniciar sesion
|
|
114
|
+
Then deberia ser redirigido al dashboard
|
|
115
|
+
And el contenedor del dashboard deberia estar visible
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Expected Results
|
|
119
|
+
- Admin user (admin@nextspark.dev) is selectable
|
|
120
|
+
- Login redirects to /dashboard
|
|
121
|
+
- Dashboard container is visible after login
|
|
122
|
+
- Admin has delegated full CRUD access
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## @test LOGOUT-001: User Logout Flow
|
|
127
|
+
|
|
128
|
+
### Metadata
|
|
129
|
+
- **Priority:** High
|
|
130
|
+
- **Type:** Regression
|
|
131
|
+
- **Tags:** logout, signout, navigation
|
|
132
|
+
|
|
133
|
+
```gherkin:en
|
|
134
|
+
Scenario: User can logout successfully
|
|
135
|
+
|
|
136
|
+
Given I am logged in as Owner
|
|
137
|
+
And I am on the dashboard
|
|
138
|
+
When I click on the user menu in the top navigation
|
|
139
|
+
And I click "Sign Out"
|
|
140
|
+
Then I should be redirected to the login page
|
|
141
|
+
And the DevKeyring component should be visible again
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
```gherkin:es
|
|
145
|
+
Scenario: Usuario puede cerrar sesion exitosamente
|
|
146
|
+
|
|
147
|
+
Given estoy logueado como Owner
|
|
148
|
+
And estoy en el dashboard
|
|
149
|
+
When hago clic en el menu de usuario en la navegacion superior
|
|
150
|
+
And hago clic en "Cerrar Sesion"
|
|
151
|
+
Then deberia ser redirigido a la pagina de login
|
|
152
|
+
And el componente DevKeyring deberia estar visible nuevamente
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Expected Results
|
|
156
|
+
- User menu is accessible in top navigation
|
|
157
|
+
- Sign Out option is visible in menu
|
|
158
|
+
- Clicking Sign Out clears session
|
|
159
|
+
- User is redirected to login page
|
|
160
|
+
- DevKeyring component is visible for re-login
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
import * as allure from 'allure-cypress'
|
|
4
|
+
|
|
5
|
+
import { DevKeyringPOM } from '../../../../src/components/DevKeyringPOM'
|
|
6
|
+
import { DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
|
|
7
|
+
|
|
8
|
+
describe('Authentication - DevKeyring Flow', {
|
|
9
|
+
tags: ['@uat', '@feat-auth', '@smoke', '@regression']
|
|
10
|
+
}, () => {
|
|
11
|
+
const devKeyring = DevKeyringPOM.create()
|
|
12
|
+
const users = DEFAULT_THEME_USERS
|
|
13
|
+
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
allure.epic('UAT')
|
|
16
|
+
allure.feature('Authentication')
|
|
17
|
+
allure.story('DevKeyring Login')
|
|
18
|
+
// Clear cookies and localStorage to ensure fresh state
|
|
19
|
+
cy.clearCookies()
|
|
20
|
+
cy.clearLocalStorage()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
describe('LOGIN_001: Owner Login via DevKeyring', { tags: '@smoke' }, () => {
|
|
24
|
+
it('should login as Owner and access dashboard', { tags: '@smoke' }, () => {
|
|
25
|
+
allure.severity('critical')
|
|
26
|
+
|
|
27
|
+
// 1. Visit login page
|
|
28
|
+
cy.visit('/login')
|
|
29
|
+
|
|
30
|
+
// 2. Validate DevKeyring is visible
|
|
31
|
+
devKeyring.validateVisible()
|
|
32
|
+
|
|
33
|
+
// 3. Login as Owner using email
|
|
34
|
+
devKeyring.quickLoginByEmail(users.OWNER)
|
|
35
|
+
|
|
36
|
+
// 4. Validate dashboard access
|
|
37
|
+
cy.url().should('include', '/dashboard')
|
|
38
|
+
cy.get('[data-cy="dashboard-container"]').should('be.visible')
|
|
39
|
+
|
|
40
|
+
cy.log(`✅ Owner login successful (${users.OWNER})`)
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
describe('LOGIN_002: Member Login via DevKeyring', { tags: '@smoke' }, () => {
|
|
45
|
+
it('should login as Member and access dashboard', { tags: '@smoke' }, () => {
|
|
46
|
+
allure.severity('critical')
|
|
47
|
+
|
|
48
|
+
// 1. Visit login page
|
|
49
|
+
cy.visit('/login')
|
|
50
|
+
|
|
51
|
+
// 2. Validate DevKeyring is visible
|
|
52
|
+
devKeyring.validateVisible()
|
|
53
|
+
|
|
54
|
+
// 3. Login as Member using email
|
|
55
|
+
devKeyring.quickLoginByEmail(users.MEMBER)
|
|
56
|
+
|
|
57
|
+
// 4. Validate dashboard access
|
|
58
|
+
cy.url().should('include', '/dashboard')
|
|
59
|
+
cy.get('[data-cy="dashboard-container"]').should('be.visible')
|
|
60
|
+
|
|
61
|
+
cy.log(`✅ Member login successful (${users.MEMBER})`)
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
describe('LOGIN_003: Admin Login via DevKeyring', () => {
|
|
66
|
+
it('should login as Admin and access dashboard', () => {
|
|
67
|
+
// 1. Visit login page
|
|
68
|
+
cy.visit('/login')
|
|
69
|
+
|
|
70
|
+
// 2. Validate DevKeyring is visible
|
|
71
|
+
devKeyring.validateVisible()
|
|
72
|
+
|
|
73
|
+
// 3. Login as Admin using email
|
|
74
|
+
devKeyring.quickLoginByEmail(users.ADMIN)
|
|
75
|
+
|
|
76
|
+
// 4. Validate dashboard access
|
|
77
|
+
cy.url().should('include', '/dashboard')
|
|
78
|
+
cy.get('[data-cy="dashboard-container"]').should('be.visible')
|
|
79
|
+
|
|
80
|
+
cy.log(`✅ Admin login successful (${users.ADMIN})`)
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
describe('LOGOUT_001: User Logout Flow', () => {
|
|
85
|
+
it('should logout successfully and redirect to login', () => {
|
|
86
|
+
// Set desktop viewport to show TopNavbar (requires lg: 1024px+)
|
|
87
|
+
cy.viewport(1280, 800)
|
|
88
|
+
|
|
89
|
+
// 1. Login first as Owner
|
|
90
|
+
cy.visit('/login')
|
|
91
|
+
devKeyring.quickLoginByEmail(users.OWNER)
|
|
92
|
+
|
|
93
|
+
// Wait for dashboard to fully load
|
|
94
|
+
cy.url().should('include', '/dashboard')
|
|
95
|
+
cy.get('[data-cy="dashboard-container"]').should('be.visible')
|
|
96
|
+
|
|
97
|
+
// Wait for user menu to be available (session loaded)
|
|
98
|
+
// TopNavbar uses useAuth() which has loading state
|
|
99
|
+
cy.get('[data-cy="topnav-user-menu-trigger"]', { timeout: 15000 }).should('be.visible')
|
|
100
|
+
|
|
101
|
+
// 2. Logout via user menu
|
|
102
|
+
cy.get('[data-cy="topnav-user-menu-trigger"]').click()
|
|
103
|
+
cy.get('[data-cy="topnav-menu-signOut"]').should('be.visible').click()
|
|
104
|
+
|
|
105
|
+
// 3. Validate redirected to login and DevKeyring is visible again
|
|
106
|
+
cy.url().should('include', '/login')
|
|
107
|
+
devKeyring.validateVisible()
|
|
108
|
+
|
|
109
|
+
cy.log('✅ Logout successful')
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
after(() => {
|
|
114
|
+
cy.log('✅ Authentication tests completed')
|
|
115
|
+
})
|
|
116
|
+
})
|