@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,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Member Team Role Restrictions
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [auth, team-role, member, permissions, security, restrictions]
|
|
5
|
+
grepTags: [uat, feat-auth, team-role, member]
|
|
6
|
+
coverage: 7
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Member Team Role Restrictions
|
|
10
|
+
|
|
11
|
+
> Tests for Member team role restrictions. Member is the most restricted team role with read-only access to entities, no create/update/delete permissions, and no access to settings, billing, or app-role areas.
|
|
12
|
+
|
|
13
|
+
## @test MEMBER-PERM-001: Member Dashboard Access
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** member, dashboard
|
|
19
|
+
- **Grep:** `@smoke`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Member can access dashboard
|
|
23
|
+
|
|
24
|
+
Given I am logged in as Member (emily.johnson@nextspark.dev)
|
|
25
|
+
When I visit /dashboard
|
|
26
|
+
Then the dashboard container should be visible
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```gherkin:es
|
|
30
|
+
Scenario: Member puede acceder al dashboard
|
|
31
|
+
|
|
32
|
+
Given estoy logueado como Member (emily.johnson@nextspark.dev)
|
|
33
|
+
When visito /dashboard
|
|
34
|
+
Then el contenedor del dashboard deberia estar visible
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Expected Results
|
|
38
|
+
- Dashboard loads
|
|
39
|
+
- Limited navigation visible
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## @test MEMBER-PERM-002: Member Read-Only Entity Access
|
|
44
|
+
|
|
45
|
+
### Metadata
|
|
46
|
+
- **Priority:** Critical
|
|
47
|
+
- **Type:** Smoke
|
|
48
|
+
- **Tags:** member, customers, read-only
|
|
49
|
+
- **Grep:** `@smoke`
|
|
50
|
+
|
|
51
|
+
```gherkin:en
|
|
52
|
+
Scenario: Member has read-only access to customers
|
|
53
|
+
|
|
54
|
+
Given I am logged in as Member (emily.johnson@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: Member tiene acceso solo lectura a customers
|
|
62
|
+
|
|
63
|
+
Given estoy logueado como Member (emily.johnson@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 entity list
|
|
71
|
+
- Cannot create new entities
|
|
72
|
+
- No action buttons visible
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## @test MEMBER-PERM-003: Member Cannot Create Entities
|
|
77
|
+
|
|
78
|
+
### Metadata
|
|
79
|
+
- **Priority:** High
|
|
80
|
+
- **Type:** Security
|
|
81
|
+
- **Tags:** member, create, blocked
|
|
82
|
+
|
|
83
|
+
```gherkin:en
|
|
84
|
+
Scenario: Member cannot see create button on entity pages
|
|
85
|
+
|
|
86
|
+
Given I am logged in as Member (emily.johnson@nextspark.dev)
|
|
87
|
+
When I visit /customers
|
|
88
|
+
Then the create button should not exist
|
|
89
|
+
When I visit /tasks
|
|
90
|
+
Then the create button should not exist
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```gherkin:es
|
|
94
|
+
Scenario: Member no puede ver boton crear en paginas de entidades
|
|
95
|
+
|
|
96
|
+
Given estoy logueado como Member (emily.johnson@nextspark.dev)
|
|
97
|
+
When visito /customers
|
|
98
|
+
Then el boton crear no deberia existir
|
|
99
|
+
When visito /tasks
|
|
100
|
+
Then el boton crear no deberia existir
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Expected Results
|
|
104
|
+
- No create buttons on any entity page
|
|
105
|
+
- Read-only experience
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## @test MEMBER-PERM-004: Member Settings Restricted
|
|
110
|
+
|
|
111
|
+
### Metadata
|
|
112
|
+
- **Priority:** High
|
|
113
|
+
- **Type:** Security
|
|
114
|
+
- **Tags:** member, settings, restricted
|
|
115
|
+
|
|
116
|
+
```gherkin:en
|
|
117
|
+
Scenario: Member has limited or no settings access
|
|
118
|
+
|
|
119
|
+
Given I am logged in as Member (emily.johnson@nextspark.dev)
|
|
120
|
+
When I visit /settings
|
|
121
|
+
Then I should see only profile tab or be redirected
|
|
122
|
+
And the team settings tab should not exist
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```gherkin:es
|
|
126
|
+
Scenario: Member tiene acceso limitado o sin acceso a settings
|
|
127
|
+
|
|
128
|
+
Given estoy logueado como Member (emily.johnson@nextspark.dev)
|
|
129
|
+
When visito /settings
|
|
130
|
+
Then deberia ver solo pestana de perfil o ser redirigido
|
|
131
|
+
And la pestana de team settings no deberia existir
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Expected Results
|
|
135
|
+
- Profile tab only (if accessible)
|
|
136
|
+
- No team settings access
|
|
137
|
+
- No danger zone access
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## @test MEMBER-PERM-005: Member Billing Blocked
|
|
142
|
+
|
|
143
|
+
### Metadata
|
|
144
|
+
- **Priority:** High
|
|
145
|
+
- **Type:** Security
|
|
146
|
+
- **Tags:** member, billing, blocked
|
|
147
|
+
|
|
148
|
+
```gherkin:en
|
|
149
|
+
Scenario: Member cannot access billing
|
|
150
|
+
|
|
151
|
+
Given I am logged in as Member (emily.johnson@nextspark.dev)
|
|
152
|
+
When I visit /billing
|
|
153
|
+
Then I should be redirected away from /billing
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```gherkin:es
|
|
157
|
+
Scenario: Member no puede acceder a billing
|
|
158
|
+
|
|
159
|
+
Given estoy logueado como Member (emily.johnson@nextspark.dev)
|
|
160
|
+
When visito /billing
|
|
161
|
+
Then deberia ser redirigido fuera de /billing
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Expected Results
|
|
165
|
+
- No billing access
|
|
166
|
+
- Redirect to dashboard
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## @test MEMBER-PERM-006: Member Cannot Access Sector7
|
|
171
|
+
|
|
172
|
+
### Metadata
|
|
173
|
+
- **Priority:** High
|
|
174
|
+
- **Type:** Security
|
|
175
|
+
- **Tags:** member, sector7, blocked
|
|
176
|
+
|
|
177
|
+
```gherkin:en
|
|
178
|
+
Scenario: Member is blocked from Sector7
|
|
179
|
+
|
|
180
|
+
Given I am logged in as Member (emily.johnson@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: Member no puede acceder a Sector7
|
|
187
|
+
|
|
188
|
+
Given estoy logueado como Member (emily.johnson@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 MEMBER-PERM-007: Member Cannot Access Dev Zone
|
|
200
|
+
|
|
201
|
+
### Metadata
|
|
202
|
+
- **Priority:** High
|
|
203
|
+
- **Type:** Security
|
|
204
|
+
- **Tags:** member, dev-zone, blocked
|
|
205
|
+
|
|
206
|
+
```gherkin:en
|
|
207
|
+
Scenario: Member is blocked from Dev Zone
|
|
208
|
+
|
|
209
|
+
Given I am logged in as Member (emily.johnson@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: Member no puede acceder a Dev Zone
|
|
216
|
+
|
|
217
|
+
Given estoy logueado como Member (emily.johnson@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
|
+
## UI Elements
|
|
229
|
+
|
|
230
|
+
| Element | Selector | Description |
|
|
231
|
+
|---------|----------|-------------|
|
|
232
|
+
| Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
|
|
233
|
+
| Create Button | `[data-cy="entity-create-button"]` | Entity create button (should not exist) |
|
|
234
|
+
| Entity List | `[data-cy="entity-list-container"]` | Entity list container |
|
|
235
|
+
| Settings Container | `[data-cy="settings-container"]` | Settings page container |
|
|
236
|
+
| Profile Tab | `[data-cy="settings-tab-profile"]` | Profile settings tab |
|
|
237
|
+
| Team Tab | `[data-cy="settings-tab-team"]` | Team settings tab (should not exist) |
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Summary
|
|
242
|
+
|
|
243
|
+
| Test ID | Block | Description | Tags |
|
|
244
|
+
|---------|-------|-------------|------|
|
|
245
|
+
| MEMBER-PERM-001 | Access | Dashboard access | `@smoke` |
|
|
246
|
+
| MEMBER-PERM-002 | Read-Only | Read-only entity access | `@smoke` |
|
|
247
|
+
| MEMBER-PERM-003 | Blocked | Cannot create entities | |
|
|
248
|
+
| MEMBER-PERM-004 | Restricted | Settings limited/blocked | |
|
|
249
|
+
| MEMBER-PERM-005 | Blocked | Billing blocked | |
|
|
250
|
+
| MEMBER-PERM-006 | Blocked | Sector7 blocked | |
|
|
251
|
+
| MEMBER-PERM-007 | Blocked | Dev Zone blocked | |
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Member Team Role Login Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Member team role login and specific restrictions:
|
|
7
|
+
* - Read-only access to most entities
|
|
8
|
+
* - Cannot create/update/delete (restricted)
|
|
9
|
+
* - Limited navigation
|
|
10
|
+
* - No settings or billing access
|
|
11
|
+
* - Cannot access /dev or /superadmin (app roles only)
|
|
12
|
+
*
|
|
13
|
+
* Note: Basic login is tested in login-logout.cy.ts
|
|
14
|
+
* This file focuses on Member-specific restrictions.
|
|
15
|
+
*
|
|
16
|
+
* Tags: @uat, @feat-auth, @team-role, @member
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import * as allure from 'allure-cypress'
|
|
20
|
+
|
|
21
|
+
import { loginAsDefaultMember, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
|
|
22
|
+
import { DashboardPOM } from '../../../../src/features/DashboardPOM'
|
|
23
|
+
import { SettingsPOM } from '../../../../src/features/SettingsPOM'
|
|
24
|
+
import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
|
|
25
|
+
import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
|
|
26
|
+
|
|
27
|
+
describe('Authentication - Member Team Role Restrictions', {
|
|
28
|
+
tags: ['@uat', '@feat-auth', '@team-role', '@member']
|
|
29
|
+
}, () => {
|
|
30
|
+
const dashboard = DashboardPOM.create()
|
|
31
|
+
const settings = SettingsPOM.create()
|
|
32
|
+
const sector7 = SuperadminPOM.create()
|
|
33
|
+
const devArea = DevAreaPOM.create()
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
allure.epic('Authentication')
|
|
37
|
+
allure.feature('Team Roles')
|
|
38
|
+
allure.story('Member Restrictions')
|
|
39
|
+
loginAsDefaultMember()
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
describe('MEMBER-PERM-001: Member Dashboard Access', { tags: '@smoke' }, () => {
|
|
43
|
+
it('should access dashboard with limited navigation', { tags: '@smoke' }, () => {
|
|
44
|
+
allure.severity('critical')
|
|
45
|
+
|
|
46
|
+
// 1. Visit dashboard and wait for load
|
|
47
|
+
dashboard.visitDashboard()
|
|
48
|
+
dashboard.waitForDashboard()
|
|
49
|
+
|
|
50
|
+
// 2. Validate dashboard is accessible
|
|
51
|
+
dashboard.assertDashboardVisible()
|
|
52
|
+
|
|
53
|
+
cy.log(`✅ Member dashboard access verified (${DEFAULT_THEME_USERS.MEMBER})`)
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
describe('MEMBER-PERM-002: Member Read-Only Entity Access', { tags: '@smoke' }, () => {
|
|
58
|
+
it('should have read-only access to customers', { tags: '@smoke' }, () => {
|
|
59
|
+
allure.severity('critical')
|
|
60
|
+
|
|
61
|
+
// 1. Navigate to customers
|
|
62
|
+
dashboard.visitEntity('customers')
|
|
63
|
+
dashboard.waitForEntityPage('customers')
|
|
64
|
+
|
|
65
|
+
// 2. Validate table is visible (Member can read)
|
|
66
|
+
dashboard.assertEntityPageVisible('customers')
|
|
67
|
+
|
|
68
|
+
// 3. Create button should NOT be visible for Member
|
|
69
|
+
dashboard.assertEntityAddButtonNotVisible('customers')
|
|
70
|
+
|
|
71
|
+
cy.log('✅ Member has read-only access to customers')
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
describe('MEMBER-PERM-003: Member Create Permissions per Entity', () => {
|
|
76
|
+
it('should have entity-specific create permissions', () => {
|
|
77
|
+
allure.severity('high')
|
|
78
|
+
|
|
79
|
+
// 1. Check customers page - Member CANNOT create customers
|
|
80
|
+
// (customers.create roles: ['owner', 'admin'])
|
|
81
|
+
dashboard.visitEntity('customers')
|
|
82
|
+
dashboard.waitForEntityPage('customers')
|
|
83
|
+
dashboard.assertEntityAddButtonNotVisible('customers')
|
|
84
|
+
|
|
85
|
+
// 2. Check tasks page - Member CAN create tasks
|
|
86
|
+
// (tasks.create roles: ['owner', 'admin', 'member'])
|
|
87
|
+
dashboard.visitEntity('tasks')
|
|
88
|
+
dashboard.waitForEntityPage('tasks')
|
|
89
|
+
dashboard.assertEntityAddButtonVisible('tasks')
|
|
90
|
+
|
|
91
|
+
cy.log('✅ Member has correct entity-specific create permissions')
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
describe('MEMBER-PERM-004: Member Settings Restricted', () => {
|
|
96
|
+
it('should have limited or no settings access', () => {
|
|
97
|
+
allure.severity('high')
|
|
98
|
+
|
|
99
|
+
// 1. Navigate to settings
|
|
100
|
+
settings.visitSettings()
|
|
101
|
+
|
|
102
|
+
// 2. Check access
|
|
103
|
+
cy.url().then((url) => {
|
|
104
|
+
if (url.includes('/settings')) {
|
|
105
|
+
// If accessible, should only see profile
|
|
106
|
+
settings.assertSettingsVisible()
|
|
107
|
+
settings.assertNavItemVisible('profile')
|
|
108
|
+
// Team nav should not be visible
|
|
109
|
+
settings.assertNavItemNotVisible('team')
|
|
110
|
+
cy.log('✅ Member has limited settings access (profile only)')
|
|
111
|
+
} else {
|
|
112
|
+
cy.log('✅ Member redirected from settings')
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
describe('MEMBER-PERM-005: Member Billing Blocked', () => {
|
|
119
|
+
it('should not have access to billing', () => {
|
|
120
|
+
allure.severity('high')
|
|
121
|
+
|
|
122
|
+
// 1. Navigate to billing
|
|
123
|
+
cy.visit('/dashboard/settings/billing', { timeout: 60000, failOnStatusCode: false })
|
|
124
|
+
|
|
125
|
+
// 2. Should be redirected or access denied
|
|
126
|
+
cy.url().should('not.include', '/billing')
|
|
127
|
+
|
|
128
|
+
cy.log('✅ Member correctly blocked from billing')
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
describe('MEMBER-PERM-006: Member Cannot Access Superadmin', () => {
|
|
133
|
+
it('should be redirected when trying to access /superadmin', () => {
|
|
134
|
+
allure.severity('high')
|
|
135
|
+
|
|
136
|
+
// 1. Attempt to visit Superadmin
|
|
137
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
138
|
+
|
|
139
|
+
// 2. Should be redirected
|
|
140
|
+
sector7.assertAccessDenied()
|
|
141
|
+
|
|
142
|
+
cy.log('✅ Member correctly blocked from Superadmin')
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
describe('MEMBER-PERM-007: Member Cannot Access Dev Zone', () => {
|
|
147
|
+
it('should be redirected when trying to access /dev', () => {
|
|
148
|
+
allure.severity('high')
|
|
149
|
+
|
|
150
|
+
// 1. Attempt to visit Dev Zone
|
|
151
|
+
devArea.attemptToVisitDev()
|
|
152
|
+
|
|
153
|
+
// 2. Should be redirected
|
|
154
|
+
devArea.assertRedirectedToDashboard()
|
|
155
|
+
|
|
156
|
+
cy.log('✅ Member correctly blocked from Dev Zone')
|
|
157
|
+
})
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
after(() => {
|
|
161
|
+
cy.log('✅ Member team role tests completed')
|
|
162
|
+
})
|
|
163
|
+
})
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Owner Team Role Permissions
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [auth, team-role, owner, permissions, security]
|
|
5
|
+
grepTags: [uat, feat-auth, team-role, owner]
|
|
6
|
+
coverage: 6
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Owner Team Role Permissions
|
|
10
|
+
|
|
11
|
+
> Tests for Owner team role permissions and access control. Owner is the highest team-based role with full CRUD access to all entities, team settings, and billing. Does not have access to app-role areas like /dev or /sector7.
|
|
12
|
+
|
|
13
|
+
## @test OWNER-PERM-001: Owner Dashboard Access
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** owner, dashboard, navigation
|
|
19
|
+
- **Grep:** `@smoke`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Owner can access dashboard with full navigation
|
|
23
|
+
|
|
24
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
25
|
+
When I visit /dashboard
|
|
26
|
+
Then the dashboard container should be visible
|
|
27
|
+
And I should see navigation for customers
|
|
28
|
+
And I should see navigation for tasks
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```gherkin:es
|
|
32
|
+
Scenario: Owner puede acceder al dashboard con navegacion completa
|
|
33
|
+
|
|
34
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
35
|
+
When visito /dashboard
|
|
36
|
+
Then el contenedor del dashboard deberia estar visible
|
|
37
|
+
And deberia ver navegacion a customers
|
|
38
|
+
And deberia ver navegacion a tasks
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Expected Results
|
|
42
|
+
- Dashboard loads correctly
|
|
43
|
+
- All navigation items visible
|
|
44
|
+
- No restrictions on sidebar
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## @test OWNER-PERM-002: Owner Full Entity Access
|
|
49
|
+
|
|
50
|
+
### Metadata
|
|
51
|
+
- **Priority:** Critical
|
|
52
|
+
- **Type:** Smoke
|
|
53
|
+
- **Tags:** owner, customers, crud
|
|
54
|
+
- **Grep:** `@smoke`
|
|
55
|
+
|
|
56
|
+
```gherkin:en
|
|
57
|
+
Scenario: Owner has full CRUD access to customers
|
|
58
|
+
|
|
59
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
60
|
+
When I visit /customers
|
|
61
|
+
Then the create button should be visible
|
|
62
|
+
And the entity list should be visible
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```gherkin:es
|
|
66
|
+
Scenario: Owner tiene acceso CRUD completo a customers
|
|
67
|
+
|
|
68
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
69
|
+
When visito /customers
|
|
70
|
+
Then el boton de crear deberia estar visible
|
|
71
|
+
And la lista de entidades deberia estar visible
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Expected Results
|
|
75
|
+
- Create button is visible (can create)
|
|
76
|
+
- List is visible (can read)
|
|
77
|
+
- Edit/Delete buttons available on items
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## @test OWNER-PERM-003: Owner Team Settings Access
|
|
82
|
+
|
|
83
|
+
### Metadata
|
|
84
|
+
- **Priority:** High
|
|
85
|
+
- **Type:** Regression
|
|
86
|
+
- **Tags:** owner, settings, team
|
|
87
|
+
|
|
88
|
+
```gherkin:en
|
|
89
|
+
Scenario: Owner can access team settings
|
|
90
|
+
|
|
91
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
92
|
+
When I visit /settings
|
|
93
|
+
Then the settings container should be visible
|
|
94
|
+
And the team settings tab should be visible
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```gherkin:es
|
|
98
|
+
Scenario: Owner puede acceder a configuracion de equipo
|
|
99
|
+
|
|
100
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
101
|
+
When visito /settings
|
|
102
|
+
Then el contenedor de settings deberia estar visible
|
|
103
|
+
And la pestana de team settings deberia estar visible
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Expected Results
|
|
107
|
+
- Settings page loads
|
|
108
|
+
- Team settings tab accessible
|
|
109
|
+
- Can manage team configuration
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## @test OWNER-PERM-004: Owner Billing Access
|
|
114
|
+
|
|
115
|
+
### Metadata
|
|
116
|
+
- **Priority:** High
|
|
117
|
+
- **Type:** Regression
|
|
118
|
+
- **Tags:** owner, billing
|
|
119
|
+
|
|
120
|
+
```gherkin:en
|
|
121
|
+
Scenario: Owner can access billing
|
|
122
|
+
|
|
123
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
124
|
+
When I visit /billing
|
|
125
|
+
Then the billing container should be visible
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```gherkin:es
|
|
129
|
+
Scenario: Owner puede acceder a billing
|
|
130
|
+
|
|
131
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
132
|
+
When visito /billing
|
|
133
|
+
Then el contenedor de billing deberia estar visible
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Expected Results
|
|
137
|
+
- Billing page loads
|
|
138
|
+
- Plan information visible
|
|
139
|
+
- Upgrade options available
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## @test OWNER-PERM-005: Owner Cannot Access Sector7
|
|
144
|
+
|
|
145
|
+
### Metadata
|
|
146
|
+
- **Priority:** High
|
|
147
|
+
- **Type:** Security
|
|
148
|
+
- **Tags:** owner, sector7, blocked
|
|
149
|
+
|
|
150
|
+
```gherkin:en
|
|
151
|
+
Scenario: Owner is blocked from Sector7
|
|
152
|
+
|
|
153
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
154
|
+
When I attempt to visit /sector7
|
|
155
|
+
Then I should be redirected away from /sector7
|
|
156
|
+
And the URL should include /dashboard or error=access_denied
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
```gherkin:es
|
|
160
|
+
Scenario: Owner no puede acceder a Sector7
|
|
161
|
+
|
|
162
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
163
|
+
When intento visitar /sector7
|
|
164
|
+
Then deberia ser redirigido fuera de /sector7
|
|
165
|
+
And la URL deberia incluir /dashboard o error=access_denied
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Expected Results
|
|
169
|
+
- Access denied to Sector7
|
|
170
|
+
- Redirect to dashboard with error
|
|
171
|
+
- Security control working
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## @test OWNER-PERM-006: Owner Cannot Access Dev Zone
|
|
176
|
+
|
|
177
|
+
### Metadata
|
|
178
|
+
- **Priority:** High
|
|
179
|
+
- **Type:** Security
|
|
180
|
+
- **Tags:** owner, dev-zone, blocked
|
|
181
|
+
|
|
182
|
+
```gherkin:en
|
|
183
|
+
Scenario: Owner is blocked from Dev Zone
|
|
184
|
+
|
|
185
|
+
Given I am logged in as Owner (carlos.mendoza@nextspark.dev)
|
|
186
|
+
When I attempt to visit /dev
|
|
187
|
+
Then I should be redirected away from /dev
|
|
188
|
+
And the URL should include /dashboard or error=access_denied
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
```gherkin:es
|
|
192
|
+
Scenario: Owner no puede acceder a Dev Zone
|
|
193
|
+
|
|
194
|
+
Given estoy logueado como Owner (carlos.mendoza@nextspark.dev)
|
|
195
|
+
When intento visitar /dev
|
|
196
|
+
Then deberia ser redirigido fuera de /dev
|
|
197
|
+
And la URL deberia incluir /dashboard o error=access_denied
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Expected Results
|
|
201
|
+
- Access denied to Dev Zone
|
|
202
|
+
- Redirect to dashboard with error
|
|
203
|
+
- Security control working
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## UI Elements
|
|
208
|
+
|
|
209
|
+
| Element | Selector | Description |
|
|
210
|
+
|---------|----------|-------------|
|
|
211
|
+
| Dashboard Container | `[data-cy="dashboard-container"]` | Main dashboard container |
|
|
212
|
+
| Customers Nav | `[data-cy="sidebar-nav-customers"]` | Customers navigation item |
|
|
213
|
+
| Tasks Nav | `[data-cy="sidebar-nav-tasks"]` | Tasks navigation item |
|
|
214
|
+
| Create Button | `[data-cy="entity-create-button"]` | Entity create button |
|
|
215
|
+
| Entity List | `[data-cy="entity-list-container"]` | Entity list container |
|
|
216
|
+
| Settings Container | `[data-cy="settings-container"]` | Settings page container |
|
|
217
|
+
| Team Settings Tab | `[data-cy="settings-tab-team"]` | Team settings tab |
|
|
218
|
+
| Billing Container | `[data-cy="billing-container"]` | Billing page container |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Summary
|
|
223
|
+
|
|
224
|
+
| Test ID | Block | Description | Tags |
|
|
225
|
+
|---------|-------|-------------|------|
|
|
226
|
+
| OWNER-PERM-001 | Access | Dashboard with full navigation | `@smoke` |
|
|
227
|
+
| OWNER-PERM-002 | Access | Full CRUD access to customers | `@smoke` |
|
|
228
|
+
| OWNER-PERM-003 | Access | Team settings access | |
|
|
229
|
+
| OWNER-PERM-004 | Access | Billing access | |
|
|
230
|
+
| OWNER-PERM-005 | Blocked | Cannot access Sector7 | |
|
|
231
|
+
| OWNER-PERM-006 | Blocked | Cannot access Dev Zone | |
|