@nextsparkjs/theme-default 0.1.0-beta.17 → 0.1.0-beta.171
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,234 @@
|
|
|
1
|
+
-- Migration: 098_patterns_sample_data.sql
|
|
2
|
+
-- Description: Sample patterns for testing pattern references and usage tracking
|
|
3
|
+
-- Date: 2025-01-17
|
|
4
|
+
|
|
5
|
+
-- =====================================================
|
|
6
|
+
-- PATTERNS SAMPLE DATA
|
|
7
|
+
-- =====================================================
|
|
8
|
+
|
|
9
|
+
-- Pattern 1: Newsletter CTA (Published)
|
|
10
|
+
INSERT INTO public.patterns (
|
|
11
|
+
id,
|
|
12
|
+
"userId",
|
|
13
|
+
"teamId",
|
|
14
|
+
title,
|
|
15
|
+
slug,
|
|
16
|
+
blocks,
|
|
17
|
+
status,
|
|
18
|
+
description,
|
|
19
|
+
"createdAt",
|
|
20
|
+
"updatedAt"
|
|
21
|
+
) VALUES (
|
|
22
|
+
'00000000-0000-4000-b000-000000000001',
|
|
23
|
+
'test-developer-001',
|
|
24
|
+
'team-nextspark-001',
|
|
25
|
+
'Newsletter CTA',
|
|
26
|
+
'newsletter-cta',
|
|
27
|
+
'[
|
|
28
|
+
{
|
|
29
|
+
"id": "newsletter-cta-block",
|
|
30
|
+
"blockSlug": "cta-section",
|
|
31
|
+
"props": {
|
|
32
|
+
"title": "Stay Updated",
|
|
33
|
+
"content": "Subscribe to our newsletter for the latest updates, tips, and exclusive content delivered straight to your inbox.",
|
|
34
|
+
"backgroundColor": "primary",
|
|
35
|
+
"textColor": "white",
|
|
36
|
+
"primaryCta": {
|
|
37
|
+
"label": "Subscribe Now",
|
|
38
|
+
"url": "/newsletter",
|
|
39
|
+
"variant": "secondary"
|
|
40
|
+
},
|
|
41
|
+
"secondaryCta": {
|
|
42
|
+
"label": "Learn More",
|
|
43
|
+
"url": "/about",
|
|
44
|
+
"variant": "outline"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
]',
|
|
49
|
+
'published',
|
|
50
|
+
'Reusable newsletter call-to-action section for pages',
|
|
51
|
+
NOW() - INTERVAL '7 days',
|
|
52
|
+
NOW() - INTERVAL '2 days'
|
|
53
|
+
) ON CONFLICT (id) DO UPDATE SET
|
|
54
|
+
title = EXCLUDED.title,
|
|
55
|
+
slug = EXCLUDED.slug,
|
|
56
|
+
blocks = EXCLUDED.blocks,
|
|
57
|
+
status = EXCLUDED.status,
|
|
58
|
+
description = EXCLUDED.description,
|
|
59
|
+
"updatedAt" = EXCLUDED."updatedAt";
|
|
60
|
+
|
|
61
|
+
-- Pattern 2: Footer Links (Published)
|
|
62
|
+
INSERT INTO public.patterns (
|
|
63
|
+
id,
|
|
64
|
+
"userId",
|
|
65
|
+
"teamId",
|
|
66
|
+
title,
|
|
67
|
+
slug,
|
|
68
|
+
blocks,
|
|
69
|
+
status,
|
|
70
|
+
description,
|
|
71
|
+
"createdAt",
|
|
72
|
+
"updatedAt"
|
|
73
|
+
) VALUES (
|
|
74
|
+
'00000000-0000-4000-b000-000000000002',
|
|
75
|
+
'test-developer-001',
|
|
76
|
+
'team-nextspark-001',
|
|
77
|
+
'Footer Links',
|
|
78
|
+
'footer-links',
|
|
79
|
+
'[
|
|
80
|
+
{
|
|
81
|
+
"id": "footer-links-block",
|
|
82
|
+
"blockSlug": "text-content",
|
|
83
|
+
"props": {
|
|
84
|
+
"content": "## Quick Links\n\n- [Home](/)\n- [Features](/features)\n- [Pricing](/pricing)\n- [About](/about)\n- [Contact](/contact)\n\n## Resources\n\n- [Documentation](/getting-started)\n- [API Reference](/api)\n- [Support](/support)\n- [Blog](/blog)",
|
|
85
|
+
"textAlign": "left",
|
|
86
|
+
"maxWidth": "4xl",
|
|
87
|
+
"padding": "lg"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
]',
|
|
91
|
+
'published',
|
|
92
|
+
'Common footer links section for all pages',
|
|
93
|
+
NOW() - INTERVAL '14 days',
|
|
94
|
+
NOW() - INTERVAL '5 days'
|
|
95
|
+
) ON CONFLICT (id) DO UPDATE SET
|
|
96
|
+
title = EXCLUDED.title,
|
|
97
|
+
slug = EXCLUDED.slug,
|
|
98
|
+
blocks = EXCLUDED.blocks,
|
|
99
|
+
status = EXCLUDED.status,
|
|
100
|
+
description = EXCLUDED.description,
|
|
101
|
+
"updatedAt" = EXCLUDED."updatedAt";
|
|
102
|
+
|
|
103
|
+
-- Pattern 3: Hero Header (Draft)
|
|
104
|
+
INSERT INTO public.patterns (
|
|
105
|
+
id,
|
|
106
|
+
"userId",
|
|
107
|
+
"teamId",
|
|
108
|
+
title,
|
|
109
|
+
slug,
|
|
110
|
+
blocks,
|
|
111
|
+
status,
|
|
112
|
+
description,
|
|
113
|
+
"createdAt",
|
|
114
|
+
"updatedAt"
|
|
115
|
+
) VALUES (
|
|
116
|
+
'00000000-0000-4000-b000-000000000003',
|
|
117
|
+
'test-developer-001',
|
|
118
|
+
'team-nextspark-001',
|
|
119
|
+
'Hero Header',
|
|
120
|
+
'hero-header',
|
|
121
|
+
'[
|
|
122
|
+
{
|
|
123
|
+
"id": "hero-header-block",
|
|
124
|
+
"blockSlug": "hero",
|
|
125
|
+
"props": {
|
|
126
|
+
"title": "Welcome to NextSpark",
|
|
127
|
+
"content": "The complete SaaS boilerplate for modern web applications. Build faster, scale smarter.",
|
|
128
|
+
"textAlign": "center",
|
|
129
|
+
"size": "lg",
|
|
130
|
+
"cta": {
|
|
131
|
+
"text": "Get Started",
|
|
132
|
+
"link": "/signup",
|
|
133
|
+
"variant": "default"
|
|
134
|
+
},
|
|
135
|
+
"secondaryCta": {
|
|
136
|
+
"text": "View Demo",
|
|
137
|
+
"link": "/demo",
|
|
138
|
+
"variant": "outline"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
]',
|
|
143
|
+
'draft',
|
|
144
|
+
'Standard hero header for landing pages (work in progress)',
|
|
145
|
+
NOW() - INTERVAL '3 days',
|
|
146
|
+
NOW() - INTERVAL '1 day'
|
|
147
|
+
) ON CONFLICT (id) DO UPDATE SET
|
|
148
|
+
title = EXCLUDED.title,
|
|
149
|
+
slug = EXCLUDED.slug,
|
|
150
|
+
blocks = EXCLUDED.blocks,
|
|
151
|
+
status = EXCLUDED.status,
|
|
152
|
+
description = EXCLUDED.description,
|
|
153
|
+
"updatedAt" = EXCLUDED."updatedAt";
|
|
154
|
+
|
|
155
|
+
-- =====================================================
|
|
156
|
+
-- PATTERN USAGES SAMPLE DATA
|
|
157
|
+
-- =====================================================
|
|
158
|
+
|
|
159
|
+
-- Usage 1: Newsletter CTA used in Home page
|
|
160
|
+
INSERT INTO public.pattern_usages (
|
|
161
|
+
id,
|
|
162
|
+
"patternId",
|
|
163
|
+
"entityType",
|
|
164
|
+
"entityId",
|
|
165
|
+
"teamId",
|
|
166
|
+
"createdAt"
|
|
167
|
+
) VALUES (
|
|
168
|
+
'00000000-0000-4000-c000-000000000001',
|
|
169
|
+
'00000000-0000-4000-b000-000000000001',
|
|
170
|
+
'pages',
|
|
171
|
+
'00000000-0000-4000-a000-000000000001',
|
|
172
|
+
'team-nextspark-001',
|
|
173
|
+
NOW() - INTERVAL '5 days'
|
|
174
|
+
) ON CONFLICT ("patternId", "entityType", "entityId") DO NOTHING;
|
|
175
|
+
|
|
176
|
+
-- Usage 2: Newsletter CTA used in Features page
|
|
177
|
+
INSERT INTO public.pattern_usages (
|
|
178
|
+
id,
|
|
179
|
+
"patternId",
|
|
180
|
+
"entityType",
|
|
181
|
+
"entityId",
|
|
182
|
+
"teamId",
|
|
183
|
+
"createdAt"
|
|
184
|
+
) VALUES (
|
|
185
|
+
'00000000-0000-4000-c000-000000000002',
|
|
186
|
+
'00000000-0000-4000-b000-000000000001',
|
|
187
|
+
'pages',
|
|
188
|
+
'00000000-0000-4000-a000-000000000002',
|
|
189
|
+
'team-nextspark-001',
|
|
190
|
+
NOW() - INTERVAL '4 days'
|
|
191
|
+
) ON CONFLICT ("patternId", "entityType", "entityId") DO NOTHING;
|
|
192
|
+
|
|
193
|
+
-- Usage 3: Footer Links used in Home page
|
|
194
|
+
INSERT INTO public.pattern_usages (
|
|
195
|
+
id,
|
|
196
|
+
"patternId",
|
|
197
|
+
"entityType",
|
|
198
|
+
"entityId",
|
|
199
|
+
"teamId",
|
|
200
|
+
"createdAt"
|
|
201
|
+
) VALUES (
|
|
202
|
+
'00000000-0000-4000-c000-000000000003',
|
|
203
|
+
'00000000-0000-4000-b000-000000000002',
|
|
204
|
+
'pages',
|
|
205
|
+
'00000000-0000-4000-a000-000000000001',
|
|
206
|
+
'team-nextspark-001',
|
|
207
|
+
NOW() - INTERVAL '10 days'
|
|
208
|
+
) ON CONFLICT ("patternId", "entityType", "entityId") DO NOTHING;
|
|
209
|
+
|
|
210
|
+
-- Usage 4: Footer Links used in About page
|
|
211
|
+
INSERT INTO public.pattern_usages (
|
|
212
|
+
id,
|
|
213
|
+
"patternId",
|
|
214
|
+
"entityType",
|
|
215
|
+
"entityId",
|
|
216
|
+
"teamId",
|
|
217
|
+
"createdAt"
|
|
218
|
+
) VALUES (
|
|
219
|
+
'00000000-0000-4000-c000-000000000004',
|
|
220
|
+
'00000000-0000-4000-b000-000000000002',
|
|
221
|
+
'pages',
|
|
222
|
+
'00000000-0000-4000-a000-000000000004',
|
|
223
|
+
'team-nextspark-001',
|
|
224
|
+
NOW() - INTERVAL '8 days'
|
|
225
|
+
) ON CONFLICT ("patternId", "entityType", "entityId") DO NOTHING;
|
|
226
|
+
|
|
227
|
+
-- =====================================================
|
|
228
|
+
-- VERIFICATION QUERIES (for manual testing)
|
|
229
|
+
-- =====================================================
|
|
230
|
+
-- SELECT id, title, status FROM patterns WHERE id::text LIKE '00000000-0000-4000-b000-%';
|
|
231
|
+
-- Expected: 3 rows (newsletter, footer-links, hero-header)
|
|
232
|
+
|
|
233
|
+
-- SELECT id, "patternId", "entityType", "entityId" FROM pattern_usages WHERE id::text LIKE '00000000-0000-4000-c000-%';
|
|
234
|
+
-- Expected: 4 rows
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextsparkjs/theme-default",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.171",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./config/theme.config.ts",
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
],
|
|
10
10
|
"dependencies": {},
|
|
11
11
|
"peerDependencies": {
|
|
12
|
+
"@nextsparkjs/core": "*",
|
|
13
|
+
"@nextsparkjs/testing": "*",
|
|
12
14
|
"@tanstack/react-query": "^5.0.0",
|
|
13
15
|
"lucide-react": "^0.539.0",
|
|
14
16
|
"next": "^15.0.0",
|
|
@@ -16,8 +18,7 @@
|
|
|
16
18
|
"react": "^19.0.0",
|
|
17
19
|
"react-dom": "^19.0.0",
|
|
18
20
|
"react-markdown": "^10.1.0",
|
|
19
|
-
"zod": "^4.0.0"
|
|
20
|
-
"@nextsparkjs/core": "0.1.0-beta.17"
|
|
21
|
+
"zod": "^4.0.0"
|
|
21
22
|
},
|
|
22
23
|
"nextspark": {
|
|
23
24
|
"type": "theme",
|
package/styles/globals.css
CHANGED
|
@@ -3,8 +3,38 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Pure neutral grays using OKLCH color space.
|
|
5
5
|
* Based on shadcn/ui default configuration.
|
|
6
|
+
*
|
|
7
|
+
* ÚNICA FUENTE DE VERDAD para estilos del theme.
|
|
8
|
+
* Editar este archivo para customizar el design system.
|
|
6
9
|
*/
|
|
7
10
|
|
|
11
|
+
/* =============================================
|
|
12
|
+
IMPORTS
|
|
13
|
+
============================================= */
|
|
14
|
+
@import "tailwindcss";
|
|
15
|
+
|
|
16
|
+
/* =============================================
|
|
17
|
+
TAILWIND v4 DARK MODE CONFIGURATION
|
|
18
|
+
|
|
19
|
+
Por defecto Tailwind v4 usa @media (prefers-color-scheme: dark)
|
|
20
|
+
para las variantes dark:. Esto causa problemas porque:
|
|
21
|
+
- next-themes usa la clase .dark en el HTML
|
|
22
|
+
- El sistema operativo puede tener dark mode aunque la app use light
|
|
23
|
+
|
|
24
|
+
Esta configuración hace que Tailwind use el selector de clase .dark
|
|
25
|
+
en lugar de la media query, sincronizándose con next-themes.
|
|
26
|
+
============================================= */
|
|
27
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
28
|
+
|
|
29
|
+
@plugin "@tailwindcss/container-queries";
|
|
30
|
+
@import "@nextsparkjs/core/styles/ui.css";
|
|
31
|
+
@import "@nextsparkjs/core/styles/utilities.css";
|
|
32
|
+
@import "@nextsparkjs/core/styles/docs.css";
|
|
33
|
+
@source "../../../**/*.{js,ts,jsx,tsx}";
|
|
34
|
+
/* Core package: monorepo (short path) + npm projects (long path) */
|
|
35
|
+
@source "../node_modules/@nextsparkjs/core/dist/**/*.js";
|
|
36
|
+
@source "../../../../node_modules/@nextsparkjs/core/dist/**/*.js";
|
|
37
|
+
|
|
8
38
|
/* =============================================
|
|
9
39
|
DEFAULT THEME - LIGHT MODE
|
|
10
40
|
============================================= */
|
|
@@ -177,3 +207,15 @@
|
|
|
177
207
|
--shadow-xl: var(--shadow-xl);
|
|
178
208
|
--shadow-2xl: var(--shadow-2xl);
|
|
179
209
|
}
|
|
210
|
+
|
|
211
|
+
/* =============================================
|
|
212
|
+
BASE STYLES
|
|
213
|
+
============================================= */
|
|
214
|
+
* {
|
|
215
|
+
border-color: var(--border);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
body {
|
|
219
|
+
background-color: var(--background);
|
|
220
|
+
color: var(--foreground);
|
|
221
|
+
}
|
|
@@ -69,7 +69,7 @@ function Home() {
|
|
|
69
69
|
<span className="text-sm font-medium">{t('auth.authenticated')}</span>
|
|
70
70
|
</div>
|
|
71
71
|
<p className="text-lg">
|
|
72
|
-
{t('auth.welcomeBack', { email: user.email })}
|
|
72
|
+
{t('auth.welcomeBack', { email: user.email || '' })}
|
|
73
73
|
</p>
|
|
74
74
|
<Link href="/dashboard">
|
|
75
75
|
<Button size="lg" className="gap-2">
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: DevTools Access Control
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [dev-area, access-control, security, roles]
|
|
5
|
+
grepTags: [uat, feat-dev-area, smoke, regression]
|
|
6
|
+
coverage: 7
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# DevTools Access Control
|
|
10
|
+
|
|
11
|
+
> Role-based access control tests for the /devtools area. Validates that Developer users can access all /devtools routes and /admin, while Superadmin and Member users are blocked.
|
|
12
|
+
|
|
13
|
+
## @test ACCESS-001: Developer can access /devtools
|
|
14
|
+
|
|
15
|
+
### Metadata
|
|
16
|
+
- **Priority:** Critical
|
|
17
|
+
- **Type:** Smoke
|
|
18
|
+
- **Tags:** developer, access, home
|
|
19
|
+
- **Grep:** `@smoke`
|
|
20
|
+
|
|
21
|
+
```gherkin:en
|
|
22
|
+
Scenario: Developer can access /devtools home page
|
|
23
|
+
|
|
24
|
+
Given I am logged in as Developer (developer@nextspark.dev)
|
|
25
|
+
When I visit /devtools
|
|
26
|
+
Then I should be on /devtools home page
|
|
27
|
+
And the home page container should be visible
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```gherkin:es
|
|
31
|
+
Scenario: Developer puede acceder a /devtools home page
|
|
32
|
+
|
|
33
|
+
Given estoy logueado como Developer (developer@nextspark.dev)
|
|
34
|
+
When visito /devtools
|
|
35
|
+
Then deberia estar en /devtools home page
|
|
36
|
+
And el contenedor de home page deberia estar visible
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Expected Results
|
|
40
|
+
- Developer successfully accesses /devtools
|
|
41
|
+
- Home page renders correctly
|
|
42
|
+
- No access denied errors
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## @test ACCESS-002: Developer can access /devtools/style
|
|
47
|
+
|
|
48
|
+
### Metadata
|
|
49
|
+
- **Priority:** Critical
|
|
50
|
+
- **Type:** Smoke
|
|
51
|
+
- **Tags:** developer, access, style-gallery
|
|
52
|
+
- **Grep:** `@smoke`
|
|
53
|
+
|
|
54
|
+
```gherkin:en
|
|
55
|
+
Scenario: Developer can access Style Gallery
|
|
56
|
+
|
|
57
|
+
Given I am logged in as Developer (developer@nextspark.dev)
|
|
58
|
+
When I visit /devtools/style
|
|
59
|
+
Then the URL should include /devtools/style
|
|
60
|
+
And the style page should be visible
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```gherkin:es
|
|
64
|
+
Scenario: Developer puede acceder a Style Gallery
|
|
65
|
+
|
|
66
|
+
Given estoy logueado como Developer (developer@nextspark.dev)
|
|
67
|
+
When visito /devtools/style
|
|
68
|
+
Then la URL deberia incluir /devtools/style
|
|
69
|
+
And la pagina de estilos deberia estar visible
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Expected Results
|
|
73
|
+
- Style Gallery page loads successfully
|
|
74
|
+
- All component sections available
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## @test ACCESS-003: Developer can access /devtools/tests
|
|
79
|
+
|
|
80
|
+
### Metadata
|
|
81
|
+
- **Priority:** Critical
|
|
82
|
+
- **Type:** Smoke
|
|
83
|
+
- **Tags:** developer, access, test-cases
|
|
84
|
+
- **Grep:** `@smoke`
|
|
85
|
+
|
|
86
|
+
```gherkin:en
|
|
87
|
+
Scenario: Developer can access Test Cases viewer
|
|
88
|
+
|
|
89
|
+
Given I am logged in as Developer (developer@nextspark.dev)
|
|
90
|
+
When I visit /devtools/tests
|
|
91
|
+
Then the URL should include /devtools/tests
|
|
92
|
+
And the tests page should be visible
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```gherkin:es
|
|
96
|
+
Scenario: Developer puede acceder al visor de Test Cases
|
|
97
|
+
|
|
98
|
+
Given estoy logueado como Developer (developer@nextspark.dev)
|
|
99
|
+
When visito /devtools/tests
|
|
100
|
+
Then la URL deberia incluir /devtools/tests
|
|
101
|
+
And la pagina de tests deberia estar visible
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Expected Results
|
|
105
|
+
- Test Cases viewer loads successfully
|
|
106
|
+
- File tree or empty state visible
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## @test ACCESS-004: Developer can access /devtools/config
|
|
111
|
+
|
|
112
|
+
### Metadata
|
|
113
|
+
- **Priority:** Critical
|
|
114
|
+
- **Type:** Smoke
|
|
115
|
+
- **Tags:** developer, access, config
|
|
116
|
+
- **Grep:** `@smoke`
|
|
117
|
+
|
|
118
|
+
```gherkin:en
|
|
119
|
+
Scenario: Developer can access Config Viewer
|
|
120
|
+
|
|
121
|
+
Given I am logged in as Developer (developer@nextspark.dev)
|
|
122
|
+
When I visit /devtools/config
|
|
123
|
+
Then the URL should include /devtools/config
|
|
124
|
+
And the config page should be visible
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
```gherkin:es
|
|
128
|
+
Scenario: Developer puede acceder al Config Viewer
|
|
129
|
+
|
|
130
|
+
Given estoy logueado como Developer (developer@nextspark.dev)
|
|
131
|
+
When visito /devtools/config
|
|
132
|
+
Then la URL deberia incluir /devtools/config
|
|
133
|
+
And la pagina de config deberia estar visible
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Expected Results
|
|
137
|
+
- Config Viewer loads successfully
|
|
138
|
+
- Theme and Entities tabs available
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## @test ACCESS-005: Developer can access /admin (inherited)
|
|
143
|
+
|
|
144
|
+
### Metadata
|
|
145
|
+
- **Priority:** High
|
|
146
|
+
- **Type:** Regression
|
|
147
|
+
- **Tags:** developer, admin, inherited
|
|
148
|
+
|
|
149
|
+
```gherkin:en
|
|
150
|
+
Scenario: Developer can access Admin area
|
|
151
|
+
|
|
152
|
+
Given I am logged in as Developer (developer@nextspark.dev)
|
|
153
|
+
When I visit /admin
|
|
154
|
+
Then the URL should include /admin
|
|
155
|
+
And the Admin container should be visible
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```gherkin:es
|
|
159
|
+
Scenario: Developer puede acceder al area Admin
|
|
160
|
+
|
|
161
|
+
Given estoy logueado como Developer (developer@nextspark.dev)
|
|
162
|
+
When visito /admin
|
|
163
|
+
Then la URL deberia incluir /admin
|
|
164
|
+
And el contenedor de Admin deberia estar visible
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Expected Results
|
|
168
|
+
- Developer inherits superadmin privileges for Admin
|
|
169
|
+
- Admin control panel accessible
|
|
170
|
+
- No access denied redirect
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## @test ACCESS-006: Superadmin is BLOCKED from /devtools
|
|
175
|
+
|
|
176
|
+
### Metadata
|
|
177
|
+
- **Priority:** Critical
|
|
178
|
+
- **Type:** Smoke
|
|
179
|
+
- **Tags:** superadmin, blocked, security
|
|
180
|
+
- **Grep:** `@smoke`
|
|
181
|
+
|
|
182
|
+
```gherkin:en
|
|
183
|
+
Scenario: Superadmin is redirected when attempting to access /devtools
|
|
184
|
+
|
|
185
|
+
Given I am logged in as Superadmin (superadmin@nextspark.dev)
|
|
186
|
+
When I attempt to visit /devtools
|
|
187
|
+
Then I should be redirected to /dashboard
|
|
188
|
+
And the URL should include error=access_denied
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
```gherkin:es
|
|
192
|
+
Scenario: Superadmin es redirigido al intentar acceder a /devtools
|
|
193
|
+
|
|
194
|
+
Given estoy logueado como Superadmin (superadmin@nextspark.dev)
|
|
195
|
+
When intento visitar /devtools
|
|
196
|
+
Then deberia ser redirigido a /dashboard
|
|
197
|
+
And la URL deberia incluir error=access_denied
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Expected Results
|
|
201
|
+
- Superadmin cannot access /devtools area
|
|
202
|
+
- Redirect to dashboard with error parameter
|
|
203
|
+
- Access control working correctly
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## @test ACCESS-007: Member is BLOCKED from /devtools
|
|
208
|
+
|
|
209
|
+
### Metadata
|
|
210
|
+
- **Priority:** Critical
|
|
211
|
+
- **Type:** Smoke
|
|
212
|
+
- **Tags:** member, blocked, security
|
|
213
|
+
- **Grep:** `@smoke`
|
|
214
|
+
|
|
215
|
+
```gherkin:en
|
|
216
|
+
Scenario: Member is redirected when attempting to access /devtools
|
|
217
|
+
|
|
218
|
+
Given I am logged in as Member (emily.johnson@nextspark.dev)
|
|
219
|
+
When I attempt to visit /devtools
|
|
220
|
+
Then I should be redirected to /dashboard
|
|
221
|
+
And the URL should include error=access_denied
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```gherkin:es
|
|
225
|
+
Scenario: Member es redirigido al intentar acceder a /devtools
|
|
226
|
+
|
|
227
|
+
Given estoy logueado como Member (emily.johnson@nextspark.dev)
|
|
228
|
+
When intento visitar /devtools
|
|
229
|
+
Then deberia ser redirigido a /dashboard
|
|
230
|
+
And la URL deberia incluir error=access_denied
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Expected Results
|
|
234
|
+
- Member cannot access /devtools area
|
|
235
|
+
- Redirect to dashboard with error parameter
|
|
236
|
+
- Access control working correctly
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## UI Elements
|
|
241
|
+
|
|
242
|
+
| Element | Selector | Description |
|
|
243
|
+
|---------|----------|-------------|
|
|
244
|
+
| Home Page | `[data-cy="dev-home-page"]` | Dev area home page container |
|
|
245
|
+
| Style Page | `[data-cy="dev-style-page"]` | Style Gallery page container |
|
|
246
|
+
| Tests Page | `[data-cy="dev-tests-page"]` | Test Cases viewer container |
|
|
247
|
+
| Config Page | `[data-cy="dev-config-page"]` | Config Viewer page container |
|
|
248
|
+
| Admin Container | `[data-cy="admin-container"]` | Admin main container |
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Summary
|
|
253
|
+
|
|
254
|
+
| Test ID | Block | Description | Tags |
|
|
255
|
+
|---------|-------|-------------|------|
|
|
256
|
+
| ACCESS-001 | Developer Access | Developer can access /devtools home | `@smoke` |
|
|
257
|
+
| ACCESS-002 | Developer Access | Developer can access /devtools/style | `@smoke` |
|
|
258
|
+
| ACCESS-003 | Developer Access | Developer can access /devtools/tests | `@smoke` |
|
|
259
|
+
| ACCESS-004 | Developer Access | Developer can access /devtools/config | `@smoke` |
|
|
260
|
+
| ACCESS-005 | Inherited Access | Developer can access /admin | |
|
|
261
|
+
| ACCESS-006 | Blocked Access | Superadmin BLOCKED from /devtools | `@smoke` |
|
|
262
|
+
| ACCESS-007 | Blocked Access | Member BLOCKED from /devtools | `@smoke` |
|