@nextsparkjs/theme-default 0.1.0-beta.17 → 0.1.0-beta.170
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/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 +90 -62
- package/config/billing.config.ts +5 -10
- package/config/dashboard.config.ts +14 -0
- package/config/features.config.ts +10 -0
- package/config/permissions.config.ts +22 -23
- 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/emails/verify-email.ts +33 -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/089_add_editor_team_role.sql +15 -23
- 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/nextsparkjs-theme-default-0.1.0-beta.137.tgz +0 -0
- package/package.json +4 -3
- package/styles/globals.css +42 -0
- 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,144 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Developer App Role Login Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Developer app role login and specific access:
|
|
7
|
+
* - Login as developer@nextspark.dev
|
|
8
|
+
* - Access to /dev zone
|
|
9
|
+
* - Access to /superadmin (inherited)
|
|
10
|
+
* - No team context required (global role)
|
|
11
|
+
*
|
|
12
|
+
* Tags: @uat, @feat-auth, @app-role, @developer
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import * as allure from 'allure-cypress'
|
|
16
|
+
|
|
17
|
+
import { loginAsDefaultDeveloper, CORE_USERS } from '../../../../src/session-helpers'
|
|
18
|
+
|
|
19
|
+
describe('Authentication - Developer App Role', {
|
|
20
|
+
tags: ['@uat', '@feat-auth', '@app-role', '@developer']
|
|
21
|
+
}, () => {
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
allure.epic('Authentication')
|
|
24
|
+
allure.feature('App Roles')
|
|
25
|
+
allure.story('Developer Login')
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
describe('DEV-LOGIN-001: Developer Login and Dev Zone Access', { tags: '@smoke' }, () => {
|
|
29
|
+
it('should login as developer and access /dev zone', { tags: '@smoke' }, () => {
|
|
30
|
+
allure.severity('critical')
|
|
31
|
+
|
|
32
|
+
// 1. Login as Developer
|
|
33
|
+
loginAsDefaultDeveloper()
|
|
34
|
+
|
|
35
|
+
// 2. Visit Dev Zone
|
|
36
|
+
cy.visit('/dev', { timeout: 60000 })
|
|
37
|
+
|
|
38
|
+
// 3. Validate access to Dev Zone
|
|
39
|
+
cy.url().should('include', '/dev')
|
|
40
|
+
cy.get('[data-cy="dev-home-page"]').should('be.visible')
|
|
41
|
+
|
|
42
|
+
cy.log(`✅ Developer login successful (${CORE_USERS.DEVELOPER})`)
|
|
43
|
+
cy.log('✅ Dev Zone access granted')
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
describe('DEV-LOGIN-002: Developer Access to Style Gallery', { tags: '@smoke' }, () => {
|
|
48
|
+
it('should access /dev/style page', { tags: '@smoke' }, () => {
|
|
49
|
+
allure.severity('normal')
|
|
50
|
+
|
|
51
|
+
// 1. Login as Developer
|
|
52
|
+
loginAsDefaultDeveloper()
|
|
53
|
+
|
|
54
|
+
// 2. Visit Style Gallery
|
|
55
|
+
cy.visit('/dev/style', { timeout: 60000 })
|
|
56
|
+
|
|
57
|
+
// 3. Validate access
|
|
58
|
+
cy.url().should('include', '/dev/style')
|
|
59
|
+
cy.get('[data-cy="dev-style-page"]').should('be.visible')
|
|
60
|
+
|
|
61
|
+
cy.log('✅ Style Gallery access granted')
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
describe('DEV-LOGIN-003: Developer Access to Test Cases', { tags: '@smoke' }, () => {
|
|
66
|
+
it('should access /dev/tests page', { tags: '@smoke' }, () => {
|
|
67
|
+
allure.severity('normal')
|
|
68
|
+
|
|
69
|
+
// 1. Login as Developer
|
|
70
|
+
loginAsDefaultDeveloper()
|
|
71
|
+
|
|
72
|
+
// 2. Visit Test Cases viewer
|
|
73
|
+
cy.visit('/dev/tests', { timeout: 60000 })
|
|
74
|
+
|
|
75
|
+
// 3. Validate access
|
|
76
|
+
cy.url().should('include', '/dev/tests')
|
|
77
|
+
cy.get('[data-cy="dev-tests-page"]').should('be.visible')
|
|
78
|
+
|
|
79
|
+
cy.log('✅ Test Cases viewer access granted')
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
describe('DEV-LOGIN-004: Developer Access to Config Viewer', { tags: '@smoke' }, () => {
|
|
84
|
+
it('should access /dev/config page', { tags: '@smoke' }, () => {
|
|
85
|
+
allure.severity('normal')
|
|
86
|
+
|
|
87
|
+
// 1. Login as Developer
|
|
88
|
+
loginAsDefaultDeveloper()
|
|
89
|
+
|
|
90
|
+
// 2. Visit Config Viewer
|
|
91
|
+
cy.visit('/dev/config', { timeout: 60000 })
|
|
92
|
+
|
|
93
|
+
// 3. Validate access
|
|
94
|
+
cy.url().should('include', '/dev/config')
|
|
95
|
+
cy.get('[data-cy="dev-config-page"]').should('be.visible')
|
|
96
|
+
|
|
97
|
+
cy.log('✅ Config Viewer access granted')
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
describe('DEV-LOGIN-005: Developer Inherited Superadmin Access', () => {
|
|
102
|
+
it('should have access to /superadmin (inherited from superadmin)', () => {
|
|
103
|
+
allure.severity('high')
|
|
104
|
+
|
|
105
|
+
// 1. Login as Developer
|
|
106
|
+
loginAsDefaultDeveloper()
|
|
107
|
+
|
|
108
|
+
// 2. Visit Superadmin
|
|
109
|
+
cy.visit('/superadmin', { timeout: 60000 })
|
|
110
|
+
|
|
111
|
+
// 3. Validate access to Superadmin
|
|
112
|
+
cy.url().should('include', '/superadmin')
|
|
113
|
+
cy.get('[data-cy="sector7-container"]').should('be.visible')
|
|
114
|
+
|
|
115
|
+
cy.log('✅ Superadmin access granted (inherited privilege)')
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
describe('DEV-LOGIN-006: Developer Logout Flow', () => {
|
|
120
|
+
it('should logout successfully and redirect to login', () => {
|
|
121
|
+
allure.severity('normal')
|
|
122
|
+
|
|
123
|
+
// 1. Login as Developer
|
|
124
|
+
loginAsDefaultDeveloper()
|
|
125
|
+
|
|
126
|
+
// 2. Visit dashboard
|
|
127
|
+
cy.visit('/dashboard', { timeout: 60000 })
|
|
128
|
+
cy.url().should('include', '/dashboard')
|
|
129
|
+
|
|
130
|
+
// 3. Logout via user menu
|
|
131
|
+
cy.get('[data-cy="topnav-user-menu-trigger"]').click()
|
|
132
|
+
cy.get('[data-cy="topnav-menu-signOut"]').should('be.visible').click()
|
|
133
|
+
|
|
134
|
+
// 4. Validate redirected to login
|
|
135
|
+
cy.url().should('include', '/login')
|
|
136
|
+
|
|
137
|
+
cy.log('✅ Developer logout successful')
|
|
138
|
+
})
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
after(() => {
|
|
142
|
+
cy.log('✅ Developer app role tests completed')
|
|
143
|
+
})
|
|
144
|
+
})
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: SuperAdmin Authentication Flow
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [authentication, superadmin, sector7, security]
|
|
5
|
+
grepTags: [uat, feat-auth, security, regression]
|
|
6
|
+
coverage: 1
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# SuperAdmin Authentication Flow
|
|
10
|
+
|
|
11
|
+
> Complete authentication flow for SuperAdmin users including Sector7 access, user/team management navigation, and logout.
|
|
12
|
+
|
|
13
|
+
## @test SUPERADMIN_001: SuperAdmin complete login and Sector7 flow
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** auth, sector7, security
|
|
19
|
+
- **Grep:** `@smoke`, `@security`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: SuperAdmin complete flow - login, Sector7 access, navigate tables, logout
|
|
23
|
+
|
|
24
|
+
Given I am logged in as SuperAdmin (superadmin@nextspark.dev)
|
|
25
|
+
And I am on the dashboard
|
|
26
|
+
|
|
27
|
+
# Sector7 Access
|
|
28
|
+
When I verify the Sector7 icon is visible in TopNavbar
|
|
29
|
+
And I click the Sector7 icon
|
|
30
|
+
Then the URL should include /sector7
|
|
31
|
+
And "Super Administrator Control Panel" should be visible
|
|
32
|
+
|
|
33
|
+
# Users Management
|
|
34
|
+
When I click the Users navigation link
|
|
35
|
+
Then the URL should include /sector7/users
|
|
36
|
+
And "User Management" should be visible
|
|
37
|
+
And a table should be visible
|
|
38
|
+
|
|
39
|
+
# Teams Management
|
|
40
|
+
When I click the Teams navigation link
|
|
41
|
+
Then the URL should include /sector7/teams
|
|
42
|
+
And "Team Management" should be visible
|
|
43
|
+
And a table should be visible
|
|
44
|
+
|
|
45
|
+
# Exit Sector7
|
|
46
|
+
When I click the "Exit to Dashboard" button
|
|
47
|
+
Then the URL should include /dashboard
|
|
48
|
+
And the URL should not include /sector7
|
|
49
|
+
|
|
50
|
+
# Logout
|
|
51
|
+
When I click the user menu trigger
|
|
52
|
+
And I click the Sign Out option
|
|
53
|
+
Then I should be redirected to /login
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```gherkin:es
|
|
57
|
+
Scenario: Flujo completo SuperAdmin - login, acceso Sector7, navegar tablas, logout
|
|
58
|
+
|
|
59
|
+
Given estoy logueado como SuperAdmin (superadmin@nextspark.dev)
|
|
60
|
+
And estoy en el dashboard
|
|
61
|
+
|
|
62
|
+
# Acceso a Sector7
|
|
63
|
+
When verifico que el icono de Sector7 esta visible en TopNavbar
|
|
64
|
+
And hago clic en el icono de Sector7
|
|
65
|
+
Then la URL deberia incluir /sector7
|
|
66
|
+
And "Super Administrator Control Panel" deberia estar visible
|
|
67
|
+
|
|
68
|
+
# Gestion de Usuarios
|
|
69
|
+
When hago clic en el enlace de navegacion Users
|
|
70
|
+
Then la URL deberia incluir /sector7/users
|
|
71
|
+
And "User Management" deberia estar visible
|
|
72
|
+
And una tabla deberia estar visible
|
|
73
|
+
|
|
74
|
+
# Gestion de Equipos
|
|
75
|
+
When hago clic en el enlace de navegacion Teams
|
|
76
|
+
Then la URL deberia incluir /sector7/teams
|
|
77
|
+
And "Team Management" deberia estar visible
|
|
78
|
+
And una tabla deberia estar visible
|
|
79
|
+
|
|
80
|
+
# Salir de Sector7
|
|
81
|
+
When hago clic en el boton "Exit to Dashboard"
|
|
82
|
+
Then la URL deberia incluir /dashboard
|
|
83
|
+
And la URL no deberia incluir /sector7
|
|
84
|
+
|
|
85
|
+
# Cerrar Sesion
|
|
86
|
+
When hago clic en el trigger del menu de usuario
|
|
87
|
+
And hago clic en la opcion Sign Out
|
|
88
|
+
Then deberia ser redirigido a /login
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Expected Results
|
|
92
|
+
- SuperAdmin can access dashboard after login
|
|
93
|
+
- Sector7 icon visible in TopNavbar (superadmin only)
|
|
94
|
+
- Sector7 control panel accessible
|
|
95
|
+
- Users and Teams management tables visible
|
|
96
|
+
- Exit to dashboard works correctly
|
|
97
|
+
- Logout redirects to login page
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## UI Elements
|
|
102
|
+
|
|
103
|
+
| Element | Selector | Description |
|
|
104
|
+
|---------|----------|-------------|
|
|
105
|
+
| Sector7 Icon | `[data-cy="topnav-sector7"]` | Sector7 access (SuperAdmin/Developer only) |
|
|
106
|
+
| Users Nav | `[data-cy="sector7-nav-users"]` | Navigate to Users management |
|
|
107
|
+
| Teams Nav | `[data-cy="sector7-nav-teams"]` | Navigate to Teams management |
|
|
108
|
+
| Exit Button | `[data-cy="sector7-sidebar-exit-to-dashboard"]` | Exit Sector7 to dashboard |
|
|
109
|
+
| User Menu | `[data-cy="topnav-user-menu-trigger"]` | User dropdown menu trigger |
|
|
110
|
+
| Sign Out | `[data-cy="topnav-menu-signOut"]` | Logout option |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Summary
|
|
115
|
+
|
|
116
|
+
| Test ID | Block | Description | Tags |
|
|
117
|
+
|---------|-------|-------------|------|
|
|
118
|
+
| SUPERADMIN_001 | Complete Flow | Login, Sector7 access, Users/Teams navigation, Logout | `@smoke`, `@security`, `@critical` |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
import * as allure from 'allure-cypress'
|
|
4
|
+
|
|
5
|
+
import { loginAsDefaultSuperadmin, CORE_USERS } from '../../../../src/session-helpers'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* SuperAdmin Login Test
|
|
9
|
+
*
|
|
10
|
+
* Tests the complete SuperAdmin flow:
|
|
11
|
+
* 1. Login via API (using session helper)
|
|
12
|
+
* 2. Access Superadmin panel
|
|
13
|
+
* 3. Navigate through Users and Teams management
|
|
14
|
+
* 4. Logout
|
|
15
|
+
*
|
|
16
|
+
* Uses: loginAsDefaultSuperadmin() from session-helpers
|
|
17
|
+
* User: superadmin@nextspark.dev (core system user with global superadmin role)
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
describe('Authentication - SuperAdmin Flow', {
|
|
21
|
+
tags: ['@uat', '@feat-auth', '@security', '@regression']
|
|
22
|
+
}, () => {
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
allure.epic('UAT')
|
|
25
|
+
allure.feature('Authentication')
|
|
26
|
+
allure.story('SuperAdmin Access')
|
|
27
|
+
loginAsDefaultSuperadmin()
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
describe('SUPERADMIN_001: SuperAdmin Login and Panel Access', () => {
|
|
31
|
+
it('should login as superadmin, access panel, view tables, and logout', () => {
|
|
32
|
+
allure.severity('critical')
|
|
33
|
+
|
|
34
|
+
// 1. Visit dashboard (session already established)
|
|
35
|
+
cy.visit('/dashboard', { timeout: 60000 })
|
|
36
|
+
cy.url().should('include', '/dashboard')
|
|
37
|
+
cy.log(`✅ SuperAdmin login successful (${CORE_USERS.SUPERADMIN})`)
|
|
38
|
+
|
|
39
|
+
// 2. Validate Superadmin icon is visible (superadmin only)
|
|
40
|
+
cy.get('[data-cy="topnav-superadmin"]').should('be.visible')
|
|
41
|
+
cy.log('✅ Superadmin icon visible in TopNavbar')
|
|
42
|
+
|
|
43
|
+
// 3. Navigate to Superadmin panel
|
|
44
|
+
cy.get('[data-cy="topnav-superadmin"]').click()
|
|
45
|
+
cy.url().should('include', '/superadmin')
|
|
46
|
+
cy.contains('Super Administrator Control Panel').should('be.visible')
|
|
47
|
+
cy.log('✅ Navigated to Superadmin dashboard')
|
|
48
|
+
|
|
49
|
+
// 4. Navigate to Users table and validate
|
|
50
|
+
cy.get('[data-cy="superadmin-nav-users"]').click()
|
|
51
|
+
cy.url().should('include', '/superadmin/users')
|
|
52
|
+
cy.contains('User Management').should('be.visible')
|
|
53
|
+
cy.get('table').should('be.visible')
|
|
54
|
+
cy.log('✅ Users table loaded and visible')
|
|
55
|
+
|
|
56
|
+
// 5. Navigate to Teams table and validate
|
|
57
|
+
cy.get('[data-cy="superadmin-nav-teams"]').click()
|
|
58
|
+
cy.url().should('include', '/superadmin/teams')
|
|
59
|
+
cy.contains('Team Management').should('be.visible')
|
|
60
|
+
cy.get('table').should('be.visible')
|
|
61
|
+
cy.log('✅ Teams table loaded and visible')
|
|
62
|
+
|
|
63
|
+
// 6. Exit Superadmin back to dashboard
|
|
64
|
+
cy.get('[data-cy="superadmin-sidebar-exit-to-dashboard"]').click()
|
|
65
|
+
cy.url().should('include', '/dashboard')
|
|
66
|
+
cy.url().should('not.include', '/superadmin')
|
|
67
|
+
cy.log('✅ Exited Superadmin')
|
|
68
|
+
|
|
69
|
+
// 7. Logout from the main dashboard
|
|
70
|
+
cy.get('[data-cy="topnav-user-menu-trigger"]').click()
|
|
71
|
+
cy.get('[data-cy="topnav-menu-signOut"]').should('be.visible').click()
|
|
72
|
+
|
|
73
|
+
// Verify redirected to login
|
|
74
|
+
cy.url().should('include', '/login')
|
|
75
|
+
cy.log('✅ Logout successful')
|
|
76
|
+
|
|
77
|
+
cy.log('✅ SuperAdmin flow completed successfully')
|
|
78
|
+
})
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
after(() => {
|
|
82
|
+
cy.log('✅ SuperAdmin authentication tests completed')
|
|
83
|
+
})
|
|
84
|
+
})
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Editor Custom Role Permissions
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [auth, custom-role, editor, permissions, security, theme]
|
|
5
|
+
grepTags: [uat, feat-auth, custom-role, editor]
|
|
6
|
+
coverage: 8
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Editor Custom Role Permissions
|
|
10
|
+
|
|
11
|
+
> Tests for Editor custom role permissions. Editor is a theme-defined custom role with view-only access to entities. Cannot create, update, or delete. Cannot access Sector7 or Dev Zone.
|
|
12
|
+
|
|
13
|
+
## @test EDITOR-PERM-001: Editor Dashboard Access
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** editor, dashboard
|
|
19
|
+
- **Grep:** `@smoke`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Editor can access dashboard
|
|
23
|
+
|
|
24
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
25
|
+
When I visit /dashboard
|
|
26
|
+
Then the dashboard container should be visible
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```gherkin:es
|
|
30
|
+
Scenario: Editor puede acceder al dashboard
|
|
31
|
+
|
|
32
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
33
|
+
When visito /dashboard
|
|
34
|
+
Then el contenedor del dashboard deberia estar visible
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Expected Results
|
|
38
|
+
- Dashboard loads correctly
|
|
39
|
+
- Limited navigation based on permissions
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## @test EDITOR-PERM-002: Editor View-Only Customer Access
|
|
44
|
+
|
|
45
|
+
### Metadata
|
|
46
|
+
- **Priority:** Critical
|
|
47
|
+
- **Type:** Smoke
|
|
48
|
+
- **Tags:** editor, customers, view-only
|
|
49
|
+
- **Grep:** `@smoke`
|
|
50
|
+
|
|
51
|
+
```gherkin:en
|
|
52
|
+
Scenario: Editor has view-only access to customers list
|
|
53
|
+
|
|
54
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
55
|
+
When I visit /customers
|
|
56
|
+
Then the entity list should be visible
|
|
57
|
+
And the create button should NOT exist
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```gherkin:es
|
|
61
|
+
Scenario: Editor tiene acceso solo lectura a lista de customers
|
|
62
|
+
|
|
63
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
64
|
+
When visito /customers
|
|
65
|
+
Then la lista de entidades deberia estar visible
|
|
66
|
+
And el boton de crear NO deberia existir
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Expected Results
|
|
70
|
+
- Can view customer list
|
|
71
|
+
- No create button
|
|
72
|
+
- Read-only experience
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## @test EDITOR-PERM-003: Editor Cannot Edit Customers
|
|
77
|
+
|
|
78
|
+
### Metadata
|
|
79
|
+
- **Priority:** High
|
|
80
|
+
- **Type:** Security
|
|
81
|
+
- **Tags:** editor, customers, no-edit
|
|
82
|
+
|
|
83
|
+
```gherkin:en
|
|
84
|
+
Scenario: Editor cannot see edit buttons on customers
|
|
85
|
+
|
|
86
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
87
|
+
When I visit /customers
|
|
88
|
+
Then the entity list should be visible
|
|
89
|
+
And edit buttons should not exist on items
|
|
90
|
+
And delete buttons should not exist on items
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```gherkin:es
|
|
94
|
+
Scenario: Editor no puede ver botones de editar en customers
|
|
95
|
+
|
|
96
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
97
|
+
When visito /customers
|
|
98
|
+
Then la lista de entidades deberia estar visible
|
|
99
|
+
And los botones de editar no deberian existir en items
|
|
100
|
+
And los botones de eliminar no deberian existir en items
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Expected Results
|
|
104
|
+
- No edit action buttons
|
|
105
|
+
- No delete action buttons
|
|
106
|
+
- Pure read-only interface
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## @test EDITOR-PERM-004: Editor Tasks Access
|
|
111
|
+
|
|
112
|
+
### Metadata
|
|
113
|
+
- **Priority:** High
|
|
114
|
+
- **Type:** Regression
|
|
115
|
+
- **Tags:** editor, tasks, read-only
|
|
116
|
+
|
|
117
|
+
```gherkin:en
|
|
118
|
+
Scenario: Editor has read-only access to tasks
|
|
119
|
+
|
|
120
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
121
|
+
When I visit /tasks
|
|
122
|
+
Then the entity list should be visible
|
|
123
|
+
And the create button should NOT exist
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```gherkin:es
|
|
127
|
+
Scenario: Editor tiene acceso solo lectura a tasks
|
|
128
|
+
|
|
129
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
130
|
+
When visito /tasks
|
|
131
|
+
Then la lista de entidades deberia estar visible
|
|
132
|
+
And el boton de crear NO deberia existir
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Expected Results
|
|
136
|
+
- Can view task list
|
|
137
|
+
- No create functionality
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## @test EDITOR-PERM-005: Editor Settings Access
|
|
142
|
+
|
|
143
|
+
### Metadata
|
|
144
|
+
- **Priority:** Normal
|
|
145
|
+
- **Type:** Regression
|
|
146
|
+
- **Tags:** editor, settings
|
|
147
|
+
|
|
148
|
+
```gherkin:en
|
|
149
|
+
Scenario: Editor has profile-only settings access
|
|
150
|
+
|
|
151
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
152
|
+
When I visit /settings
|
|
153
|
+
Then I should see profile tab or be redirected
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```gherkin:es
|
|
157
|
+
Scenario: Editor tiene acceso solo a perfil en settings
|
|
158
|
+
|
|
159
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
160
|
+
When visito /settings
|
|
161
|
+
Then deberia ver pestana de perfil o ser redirigido
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Expected Results
|
|
165
|
+
- Profile settings accessible
|
|
166
|
+
- No team settings access
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## @test EDITOR-PERM-006: Editor Cannot Access Sector7
|
|
171
|
+
|
|
172
|
+
### Metadata
|
|
173
|
+
- **Priority:** High
|
|
174
|
+
- **Type:** Security
|
|
175
|
+
- **Tags:** editor, sector7, blocked
|
|
176
|
+
|
|
177
|
+
```gherkin:en
|
|
178
|
+
Scenario: Editor is blocked from Sector7
|
|
179
|
+
|
|
180
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
181
|
+
When I attempt to visit /sector7
|
|
182
|
+
Then I should be redirected away from /sector7
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```gherkin:es
|
|
186
|
+
Scenario: Editor no puede acceder a Sector7
|
|
187
|
+
|
|
188
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
189
|
+
When intento visitar /sector7
|
|
190
|
+
Then deberia ser redirigido fuera de /sector7
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Expected Results
|
|
194
|
+
- Access denied
|
|
195
|
+
- Redirect to dashboard
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## @test EDITOR-PERM-007: Editor Cannot Access Dev Zone
|
|
200
|
+
|
|
201
|
+
### Metadata
|
|
202
|
+
- **Priority:** High
|
|
203
|
+
- **Type:** Security
|
|
204
|
+
- **Tags:** editor, dev-zone, blocked
|
|
205
|
+
|
|
206
|
+
```gherkin:en
|
|
207
|
+
Scenario: Editor is blocked from Dev Zone
|
|
208
|
+
|
|
209
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
210
|
+
When I attempt to visit /dev
|
|
211
|
+
Then I should be redirected away from /dev
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```gherkin:es
|
|
215
|
+
Scenario: Editor no puede acceder a Dev Zone
|
|
216
|
+
|
|
217
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
218
|
+
When intento visitar /dev
|
|
219
|
+
Then deberia ser redirigido fuera de /dev
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Expected Results
|
|
223
|
+
- Access denied
|
|
224
|
+
- Redirect to dashboard
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## @test EDITOR-PERM-008: Editor Logout Flow
|
|
229
|
+
|
|
230
|
+
### Metadata
|
|
231
|
+
- **Priority:** Normal
|
|
232
|
+
- **Type:** Regression
|
|
233
|
+
- **Tags:** editor, logout
|
|
234
|
+
|
|
235
|
+
```gherkin:en
|
|
236
|
+
Scenario: Editor can logout successfully
|
|
237
|
+
|
|
238
|
+
Given I am logged in as Editor (diego.ramirez@nextspark.dev)
|
|
239
|
+
And I am on the dashboard
|
|
240
|
+
When I click on user menu
|
|
241
|
+
And I click on Sign Out
|
|
242
|
+
Then I should be redirected to /login
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
```gherkin:es
|
|
246
|
+
Scenario: Editor puede cerrar sesion correctamente
|
|
247
|
+
|
|
248
|
+
Given estoy logueado como Editor (diego.ramirez@nextspark.dev)
|
|
249
|
+
And estoy en el dashboard
|
|
250
|
+
When hago click en el menu de usuario
|
|
251
|
+
And hago click en Sign Out
|
|
252
|
+
Then deberia ser redirigido a /login
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Expected Results
|
|
256
|
+
- Logout works correctly
|
|
257
|
+
- Redirect to login page
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## UI Elements
|
|
262
|
+
|
|
263
|
+
| Element | Selector | Description |
|
|
264
|
+
|---------|----------|-------------|
|
|
265
|
+
| Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
|
|
266
|
+
| Create Button | `[data-cy="entity-create-button"]` | Entity create button (should not exist) |
|
|
267
|
+
| Entity List | `[data-cy="entity-list-container"]` | Entity list container |
|
|
268
|
+
| Row Edit | `[data-cy="entity-row-edit"]` | Row edit button (should not exist) |
|
|
269
|
+
| Row Delete | `[data-cy="entity-row-delete"]` | Row delete button (should not exist) |
|
|
270
|
+
| Settings Container | `[data-cy="settings-container"]` | Settings page container |
|
|
271
|
+
| Profile Tab | `[data-cy="settings-tab-profile"]` | Profile settings tab |
|
|
272
|
+
| User Menu | `[data-cy="topnav-user-menu-trigger"]` | User menu trigger |
|
|
273
|
+
| Sign Out | `[data-cy="topnav-menu-signOut"]` | Sign out button |
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Summary
|
|
278
|
+
|
|
279
|
+
| Test ID | Block | Description | Tags |
|
|
280
|
+
|---------|-------|-------------|------|
|
|
281
|
+
| EDITOR-PERM-001 | Access | Dashboard access | `@smoke` |
|
|
282
|
+
| EDITOR-PERM-002 | View-Only | View-only customers | `@smoke` |
|
|
283
|
+
| EDITOR-PERM-003 | Blocked | Cannot edit customers | |
|
|
284
|
+
| EDITOR-PERM-004 | View-Only | Read-only tasks | |
|
|
285
|
+
| EDITOR-PERM-005 | Access | Profile-only settings | |
|
|
286
|
+
| EDITOR-PERM-006 | Blocked | Sector7 blocked | |
|
|
287
|
+
| EDITOR-PERM-007 | Blocked | Dev Zone blocked | |
|
|
288
|
+
| EDITOR-PERM-008 | Logout | Logout flow | |
|