@nextsparkjs/theme-default 0.1.0-beta.1 → 0.1.0-beta.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/api/ai/chat/stream/route.ts +4 -1
- package/api/ai/orchestrator/route.ts +10 -3
- package/api/ai/single-agent/route.ts +10 -3
- package/api/ai/usage/route.ts +4 -1
- package/blocks/benefits/component.tsx +4 -4
- package/blocks/cta-section/component.tsx +4 -4
- package/blocks/faq-accordion/component.tsx +2 -2
- package/blocks/features-grid/component.tsx +5 -5
- package/blocks/hero/component.tsx +2 -2
- package/blocks/hero/fields.ts +1 -1
- package/blocks/hero-with-form/component.tsx +7 -7
- package/blocks/hero-with-form/fields.ts +1 -1
- package/blocks/jumbotron/component.tsx +7 -7
- package/blocks/jumbotron/fields.ts +1 -1
- package/blocks/logo-cloud/component.tsx +6 -6
- package/blocks/logo-cloud/fields.ts +1 -1
- package/blocks/post-content/component.tsx +2 -2
- package/blocks/pricing-table/component.tsx +5 -5
- package/blocks/split-content/component.tsx +5 -5
- package/blocks/split-content/fields.ts +1 -1
- package/blocks/stats-counter/component.tsx +9 -9
- package/blocks/testimonials/component.tsx +4 -4
- package/blocks/testimonials/fields.ts +1 -1
- package/blocks/text-content/component.tsx +12 -10
- package/blocks/timeline/component.tsx +12 -12
- package/blocks/video-hero/component.tsx +7 -7
- package/blocks/video-hero/fields.ts +1 -1
- package/components/ai-chat/ChatPanel.tsx +7 -7
- package/components/ai-chat/Message.tsx +2 -2
- package/components/ai-chat/MessageInput.tsx +3 -3
- package/components/ai-chat/MessageList.tsx +3 -3
- package/components/ai-chat/TypingIndicator.tsx +2 -2
- package/config/app.config.ts +54 -62
- package/config/dashboard.config.ts +14 -0
- package/config/features.config.ts +10 -0
- package/config/permissions.config.ts +26 -1
- package/docs/{01-overview → public/01-overview}/01-introduction.md +5 -0
- package/docs/{01-overview → public/01-overview}/02-customization.md +5 -0
- package/docs/{02-features → public/02-features}/03-tasks-entity.md +5 -0
- package/docs/{03-ai → public/03-ai}/01-overview.md +5 -0
- package/docs/{03-ai → public/03-ai}/02-customization.md +5 -0
- package/docs/superadmin/01-setup/01-configuration.md +79 -0
- package/docs/superadmin/01-setup/02-deployment.md +82 -0
- package/docs/superadmin/02-management/01-users.md +83 -0
- package/docs/superadmin/03-integrations/01-langchain.md +139 -0
- package/entities/customers/api/docs.md +107 -0
- package/entities/customers/api/presets.ts +80 -0
- package/entities/pages/api/docs.md +114 -0
- package/entities/pages/api/presets.ts +72 -0
- package/entities/posts/api/docs.md +120 -0
- package/entities/posts/api/presets.ts +74 -0
- package/entities/tasks/api/docs.md +126 -0
- package/entities/tasks/api/presets.ts +84 -0
- package/lib/selectors.ts +7 -4
- package/messages/de/admin.json +45 -0
- package/messages/en/admin.json +56 -0
- package/messages/en/navigation.json +2 -1
- package/messages/es/admin.json +56 -0
- package/messages/es/navigation.json +2 -1
- package/messages/fr/admin.json +45 -0
- package/messages/it/admin.json +45 -0
- package/messages/pt/admin.json +45 -0
- package/migrations/093_pages_sample_data.sql +7 -7
- package/migrations/098_patterns_sample_data.sql +234 -0
- package/package.json +8 -3
- package/styles/globals.css +42 -0
- package/templates/(public)/blog/[slug]/page.tsx +1 -1
- package/templates/(public)/page.tsx +1 -1
- package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_utils/docs/README.md +215 -0
- package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
- package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
- package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
- package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
- package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
- package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
- package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
- package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
- package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
- package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
- package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
- package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +87 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +33 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +246 -0
- package/tests/cypress/src/entities/index.ts +16 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +271 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +707 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +518 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress/support/e2e.ts +90 -0
- package/tests/cypress.config.ts +178 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
- package/tests/jest/__mocks__/jose.js +22 -0
- package/tests/jest/__mocks__/next/image.js +15 -0
- package/tests/jest/__mocks__/next-server.js +56 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/jest.config.cjs +154 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +370 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/services/tasks.service.test.ts +707 -0
- package/tests/jest/setup.ts +170 -0
- package/tests/jest/tsconfig.jest.json +6 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +21 -0
- /package/docs/{02-features → public/02-features}/01-components.md +0 -0
- /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
|
@@ -0,0 +1,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 | |
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Owner Team Role Login Tests
|
|
5
|
+
*
|
|
6
|
+
* Tests the Owner team role login and specific permissions:
|
|
7
|
+
* - Full CRUD access to all entities
|
|
8
|
+
* - Team settings access
|
|
9
|
+
* - Billing access
|
|
10
|
+
* - Member management
|
|
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 Owner-specific permissions and access.
|
|
15
|
+
*
|
|
16
|
+
* Tags: @uat, @feat-auth, @team-role, @owner
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import * as allure from 'allure-cypress'
|
|
20
|
+
|
|
21
|
+
import { loginAsDefaultOwner, DEFAULT_THEME_USERS } from '../../../../src/session-helpers'
|
|
22
|
+
import { DashboardPOM } from '../../../../src/features/DashboardPOM'
|
|
23
|
+
import { SettingsPOM } from '../../../../src/features/SettingsPOM'
|
|
24
|
+
import { BillingPOM } from '../../../../src/features/BillingPOM'
|
|
25
|
+
import { SuperadminPOM } from '../../../../src/features/SuperadminPOM'
|
|
26
|
+
import { DevAreaPOM } from '../../../../src/features/DevAreaPOM'
|
|
27
|
+
|
|
28
|
+
describe('Authentication - Owner Team Role Permissions', {
|
|
29
|
+
tags: ['@uat', '@feat-auth', '@team-role', '@owner']
|
|
30
|
+
}, () => {
|
|
31
|
+
const dashboard = DashboardPOM.create()
|
|
32
|
+
const settings = SettingsPOM.create()
|
|
33
|
+
const billing = BillingPOM.create()
|
|
34
|
+
const sector7 = SuperadminPOM.create()
|
|
35
|
+
const devArea = DevAreaPOM.create()
|
|
36
|
+
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
allure.epic('Authentication')
|
|
39
|
+
allure.feature('Team Roles')
|
|
40
|
+
allure.story('Owner Permissions')
|
|
41
|
+
loginAsDefaultOwner()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
describe('OWNER-PERM-001: Owner Dashboard Access', { tags: '@smoke' }, () => {
|
|
45
|
+
it('should access dashboard with full navigation', { tags: '@smoke' }, () => {
|
|
46
|
+
allure.severity('critical')
|
|
47
|
+
|
|
48
|
+
// 1. Visit dashboard and wait for it to load
|
|
49
|
+
dashboard.visitDashboard()
|
|
50
|
+
dashboard.waitForDashboard()
|
|
51
|
+
|
|
52
|
+
// 2. Validate sidebar navigation items (Owner should see entity links)
|
|
53
|
+
dashboard.assertEntityNavVisible('customers')
|
|
54
|
+
dashboard.assertEntityNavVisible('tasks')
|
|
55
|
+
|
|
56
|
+
cy.log(`✅ Owner dashboard access verified (${DEFAULT_THEME_USERS.OWNER})`)
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
describe('OWNER-PERM-002: Owner Full Entity Access', { tags: '@smoke' }, () => {
|
|
61
|
+
it('should have full CRUD access to customers', { tags: '@smoke' }, () => {
|
|
62
|
+
allure.severity('critical')
|
|
63
|
+
|
|
64
|
+
// 1. Navigate to customers (correct route is /dashboard/customers)
|
|
65
|
+
dashboard.visitEntity('customers')
|
|
66
|
+
dashboard.waitForEntityPage('customers')
|
|
67
|
+
|
|
68
|
+
// 2. Validate create button is visible (Owner can create)
|
|
69
|
+
dashboard.assertEntityAddButtonVisible('customers')
|
|
70
|
+
|
|
71
|
+
// 3. Validate table is visible
|
|
72
|
+
dashboard.assertEntityPageVisible('customers')
|
|
73
|
+
|
|
74
|
+
cy.log('✅ Owner has full CRUD access to customers')
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
describe('OWNER-PERM-003: Owner Team Settings Access', { tags: '@in-develop' }, () => {
|
|
79
|
+
it('should access team settings page', { tags: '@in-develop' }, () => {
|
|
80
|
+
allure.severity('high')
|
|
81
|
+
|
|
82
|
+
// 1. Navigate to settings
|
|
83
|
+
settings.visitSettings()
|
|
84
|
+
settings.waitForSettings()
|
|
85
|
+
|
|
86
|
+
// 2. Validate settings page is accessible
|
|
87
|
+
settings.assertSettingsVisible()
|
|
88
|
+
|
|
89
|
+
// 3. Validate team settings nav is visible (key is 'teams' not 'team')
|
|
90
|
+
settings.assertNavItemVisible('teams')
|
|
91
|
+
|
|
92
|
+
cy.log('✅ Owner can access team settings')
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
describe('OWNER-PERM-004: Owner Billing Access', () => {
|
|
97
|
+
it('should access billing page', () => {
|
|
98
|
+
allure.severity('high')
|
|
99
|
+
|
|
100
|
+
// 1. Navigate to billing using BillingPOM
|
|
101
|
+
billing.visitBilling()
|
|
102
|
+
|
|
103
|
+
// 2. Validate billing page is accessible
|
|
104
|
+
billing.assertBillingPageVisible()
|
|
105
|
+
|
|
106
|
+
cy.log('✅ Owner can access billing')
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
describe('OWNER-PERM-005: Owner Cannot Access Superadmin', () => {
|
|
111
|
+
it('should be redirected when trying to access /superadmin', () => {
|
|
112
|
+
allure.severity('high')
|
|
113
|
+
|
|
114
|
+
// 1. Attempt to visit Superadmin
|
|
115
|
+
cy.visit('/superadmin', { timeout: 60000, failOnStatusCode: false })
|
|
116
|
+
|
|
117
|
+
// 2. Should be redirected (Owner is not superadmin)
|
|
118
|
+
sector7.assertAccessDenied()
|
|
119
|
+
|
|
120
|
+
cy.log('✅ Owner correctly blocked from Superadmin')
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
describe('OWNER-PERM-006: Owner Cannot Access Dev Zone', () => {
|
|
125
|
+
it('should be redirected when trying to access /dev', () => {
|
|
126
|
+
allure.severity('high')
|
|
127
|
+
|
|
128
|
+
// 1. Attempt to visit Dev Zone
|
|
129
|
+
devArea.attemptToVisitDev()
|
|
130
|
+
|
|
131
|
+
// 2. Should be redirected (Owner is not developer)
|
|
132
|
+
devArea.assertRedirectedToDashboard()
|
|
133
|
+
|
|
134
|
+
cy.log('✅ Owner correctly blocked from Dev Zone')
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
after(() => {
|
|
139
|
+
cy.log('✅ Owner team role tests completed')
|
|
140
|
+
})
|
|
141
|
+
})
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Billing Extended Features
|
|
3
|
+
priority: medium
|
|
4
|
+
tags: [billing, payment, features, invoices, navigation]
|
|
5
|
+
grepTags: [uat, billing, extended]
|
|
6
|
+
coverage: 8
|
|
7
|
+
status: pending-permission-fix
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Billing Page - Extended Tests
|
|
11
|
+
|
|
12
|
+
> Extended coverage tests for the billing settings page including payment method section, plan features list, view pricing navigation, and invoice details. **Note:** Currently skipped due to permission check issues - billing page redirects to /dashboard/settings.
|
|
13
|
+
|
|
14
|
+
## Background
|
|
15
|
+
|
|
16
|
+
```gherkin:en
|
|
17
|
+
Given I am logged in as Owner (owner@nextspark.dev)
|
|
18
|
+
And I have navigated to the Billing settings page
|
|
19
|
+
And the billing page has loaded successfully
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```gherkin:es
|
|
23
|
+
Given estoy logueado como Owner (owner@nextspark.dev)
|
|
24
|
+
And he navegado a la pagina de configuracion de Billing
|
|
25
|
+
And la pagina de billing ha cargado exitosamente
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## @test BILL-UAT-040: Owner sees payment method section
|
|
31
|
+
|
|
32
|
+
### Metadata
|
|
33
|
+
- **Priority:** Normal
|
|
34
|
+
- **Type:** Regression
|
|
35
|
+
- **Tags:** payment, section, owner
|
|
36
|
+
- **Status:** SKIPPED (permission issue)
|
|
37
|
+
|
|
38
|
+
```gherkin:en
|
|
39
|
+
Scenario: Owner sees payment method section
|
|
40
|
+
|
|
41
|
+
Given I am logged in as an owner
|
|
42
|
+
When I visit the billing page
|
|
43
|
+
Then I should see payment method section
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```gherkin:es
|
|
47
|
+
Scenario: Owner ve la seccion de metodo de pago
|
|
48
|
+
|
|
49
|
+
Given estoy logueado como owner
|
|
50
|
+
When visito la pagina de billing
|
|
51
|
+
Then deberia ver la seccion de metodo de pago
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Expected Results
|
|
55
|
+
- Billing page is accessible to owner
|
|
56
|
+
- Payment method section is visible
|
|
57
|
+
- Section displays current payment info or add option
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## @test BILL-UAT-041: Add payment button is visible
|
|
62
|
+
|
|
63
|
+
### Metadata
|
|
64
|
+
- **Priority:** Normal
|
|
65
|
+
- **Type:** Regression
|
|
66
|
+
- **Tags:** payment, button, add
|
|
67
|
+
- **Status:** SKIPPED (permission issue)
|
|
68
|
+
|
|
69
|
+
```gherkin:en
|
|
70
|
+
Scenario: User can see add payment button
|
|
71
|
+
|
|
72
|
+
Given I am on the billing page
|
|
73
|
+
Then I should see the add payment button
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```gherkin:es
|
|
77
|
+
Scenario: Usuario puede ver boton agregar pago
|
|
78
|
+
|
|
79
|
+
Given estoy en la pagina de billing
|
|
80
|
+
Then deberia ver el boton de agregar pago
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Expected Results
|
|
84
|
+
- Add payment button exists
|
|
85
|
+
- Button is visible and clickable
|
|
86
|
+
- Button leads to payment method addition flow
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## @test BILL-UAT-042: Plan features list is visible
|
|
91
|
+
|
|
92
|
+
### Metadata
|
|
93
|
+
- **Priority:** Normal
|
|
94
|
+
- **Type:** Regression
|
|
95
|
+
- **Tags:** plan, features, list
|
|
96
|
+
|
|
97
|
+
- **Status:** SKIPPED (permission issue)
|
|
98
|
+
|
|
99
|
+
```gherkin:en
|
|
100
|
+
Scenario: User can see plan features
|
|
101
|
+
|
|
102
|
+
Given I am on the billing page
|
|
103
|
+
Then I should see the features included in my plan
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```gherkin:es
|
|
107
|
+
Scenario: Usuario puede ver caracteristicas del plan
|
|
108
|
+
|
|
109
|
+
Given estoy en la pagina de billing
|
|
110
|
+
Then deberia ver las caracteristicas incluidas en mi plan
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Expected Results
|
|
114
|
+
- Plan features section is visible
|
|
115
|
+
- Features list displays current plan inclusions
|
|
116
|
+
- Features match the subscribed plan tier
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## @test BILL-UAT-043: View pricing button is visible
|
|
121
|
+
|
|
122
|
+
### Metadata
|
|
123
|
+
- **Priority:** Normal
|
|
124
|
+
- **Type:** Regression
|
|
125
|
+
- **Tags:** navigation, pricing, upgrade
|
|
126
|
+
- **Status:** SKIPPED (permission issue)
|
|
127
|
+
|
|
128
|
+
```gherkin:en
|
|
129
|
+
Scenario: User can see view pricing option
|
|
130
|
+
|
|
131
|
+
Given I am on the billing page
|
|
132
|
+
Then I should see a way to view pricing
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
```gherkin:es
|
|
136
|
+
Scenario: Usuario puede ver opcion de ver precios
|
|
137
|
+
|
|
138
|
+
Given estoy en la pagina de billing
|
|
139
|
+
Then deberia ver una forma de ver precios
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Expected Results
|
|
143
|
+
- Upgrade/pricing button exists
|
|
144
|
+
- Button is visible
|
|
145
|
+
- Navigation to pricing is available
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## @test BILL-UAT-044: Contact sales option available
|
|
150
|
+
|
|
151
|
+
### Metadata
|
|
152
|
+
- **Priority:** Low
|
|
153
|
+
- **Type:** Regression
|
|
154
|
+
- **Tags:** enterprise, sales, contact
|
|
155
|
+
- **Status:** SKIPPED (permission issue)
|
|
156
|
+
|
|
157
|
+
```gherkin:en
|
|
158
|
+
Scenario: Enterprise contact option exists
|
|
159
|
+
|
|
160
|
+
Given I am on the billing page
|
|
161
|
+
Then I should see a way to contact sales (or upgrade to Enterprise)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
```gherkin:es
|
|
165
|
+
Scenario: Opcion de contacto Enterprise existe
|
|
166
|
+
|
|
167
|
+
Given estoy en la pagina de billing
|
|
168
|
+
Then deberia ver una forma de contactar ventas (o actualizar a Enterprise)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Expected Results
|
|
172
|
+
- Enterprise/sales contact option exists
|
|
173
|
+
- Main billing section is visible
|
|
174
|
+
- Path to enterprise upgrade is available
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## @test BILL-UAT-045: Owner billing section visible
|
|
179
|
+
|
|
180
|
+
### Metadata
|
|
181
|
+
- **Priority:** Normal
|
|
182
|
+
- **Type:** Regression
|
|
183
|
+
- **Tags:** owner, section, visibility
|
|
184
|
+
- **Status:** SKIPPED (permission issue)
|
|
185
|
+
|
|
186
|
+
```gherkin:en
|
|
187
|
+
Scenario: Owner can see billing section
|
|
188
|
+
|
|
189
|
+
Given I am logged in as an owner
|
|
190
|
+
When I visit the billing page
|
|
191
|
+
Then I should see the billing section
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```gherkin:es
|
|
195
|
+
Scenario: Owner puede ver seccion de billing
|
|
196
|
+
|
|
197
|
+
Given estoy logueado como owner
|
|
198
|
+
When visito la pagina de billing
|
|
199
|
+
Then deberia ver la seccion de billing
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Expected Results
|
|
203
|
+
- Billing page loads for owner role
|
|
204
|
+
- Billing section is visible
|
|
205
|
+
- All billing components render
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## @test BILL-UAT-046: Invoices section accessible
|
|
210
|
+
|
|
211
|
+
### Metadata
|
|
212
|
+
- **Priority:** Low
|
|
213
|
+
- **Type:** Regression
|
|
214
|
+
- **Tags:** invoices, section, table
|
|
215
|
+
- **Status:** SKIPPED (permission issue)
|
|
216
|
+
|
|
217
|
+
```gherkin:en
|
|
218
|
+
Scenario: User can see invoices section
|
|
219
|
+
|
|
220
|
+
Given I am on the billing page
|
|
221
|
+
Then I should see the invoices section
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```gherkin:es
|
|
225
|
+
Scenario: Usuario puede ver seccion de facturas
|
|
226
|
+
|
|
227
|
+
Given estoy en la pagina de billing
|
|
228
|
+
Then deberia ver la seccion de facturas
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Expected Results
|
|
232
|
+
- Invoices table exists
|
|
233
|
+
- Section is accessible
|
|
234
|
+
- Invoice history is displayed
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## @test BILL-UAT-047: Invoice status badge is visible
|
|
239
|
+
|
|
240
|
+
### Metadata
|
|
241
|
+
- **Priority:** Normal
|
|
242
|
+
- **Type:** Regression
|
|
243
|
+
- **Tags:** invoices, status, badge
|
|
244
|
+
- **Status:** SKIPPED (permission issue)
|
|
245
|
+
|
|
246
|
+
```gherkin:en
|
|
247
|
+
Scenario: Invoice shows status badge
|
|
248
|
+
|
|
249
|
+
Given I am on the billing page with invoices
|
|
250
|
+
Then each invoice should have a status badge
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
```gherkin:es
|
|
254
|
+
Scenario: Factura muestra badge de estado
|
|
255
|
+
|
|
256
|
+
Given estoy en la pagina de billing con facturas
|
|
257
|
+
Then cada factura deberia tener un badge de estado
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Expected Results
|
|
261
|
+
- Invoices table exists
|
|
262
|
+
- Each invoice row has status indicator
|
|
263
|
+
- Status badges are visible (paid, pending, etc.)
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Known Issues
|
|
268
|
+
|
|
269
|
+
**Permission Check Issue (2025-12-28):**
|
|
270
|
+
- Billing page redirects to /dashboard/settings for all users
|
|
271
|
+
- `usePermission('settings.billing')` hook may not resolve correctly
|
|
272
|
+
- TeamContext may not be properly hydrated during Cypress session restore
|
|
273
|
+
- Investigation needed in: usePermission, TeamContext, permissionRegistry
|