@nextsparkjs/theme-default 0.1.0-beta.1 → 0.1.0-beta.101
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 +75 -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/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/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/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,276 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Billing UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, billing, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, billing, SEL_BILL_001, SEL_BILL_002, SEL_BILL_003, SEL_BILL_004, SEL_BILL_005, SEL_BILL_006, SEL_BILL_DOC]
|
|
6
|
+
coverage: 7
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Billing UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that billing component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Most tests are skipped due to permission requirements (OWNER role only) or specific state requirements (paid subscription, downgrade flow).
|
|
12
|
+
|
|
13
|
+
**IMPORTANT:** Billing page requires `settings.billing` permission which only OWNER role has. See also: `settings-billing.cy.ts` for additional billing page selectors.
|
|
14
|
+
|
|
15
|
+
## @test SEL_BILL_001: Billing Page Structure
|
|
16
|
+
|
|
17
|
+
### Metadata
|
|
18
|
+
- **Priority:** High
|
|
19
|
+
- **Type:** Selector Validation
|
|
20
|
+
- **Tags:** billing, page, structure
|
|
21
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_001`
|
|
22
|
+
- **Status:** Skipped - requires OWNER permission
|
|
23
|
+
|
|
24
|
+
```gherkin:en
|
|
25
|
+
Scenario: Billing page has complete structure
|
|
26
|
+
|
|
27
|
+
Given I am logged in as OWNER
|
|
28
|
+
And I navigate to the billing settings page
|
|
29
|
+
Then I should find the billing main container
|
|
30
|
+
And I should find the billing header
|
|
31
|
+
And I should find the upgrade plan button
|
|
32
|
+
And I should find the add payment button
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```gherkin:es
|
|
36
|
+
Scenario: Pagina de billing tiene estructura completa
|
|
37
|
+
|
|
38
|
+
Given estoy logueado como OWNER
|
|
39
|
+
And navego a la pagina de configuracion de billing
|
|
40
|
+
Then deberia encontrar el contenedor principal de billing
|
|
41
|
+
And deberia encontrar el header de billing
|
|
42
|
+
And deberia encontrar el boton de upgrade plan
|
|
43
|
+
And deberia encontrar el boton de agregar pago
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Expected Results
|
|
47
|
+
- `billing-main` selector exists
|
|
48
|
+
- `billing-header` selector exists
|
|
49
|
+
- `billing-upgrade-plan` selector exists
|
|
50
|
+
- `billing-add-payment` selector exists
|
|
51
|
+
|
|
52
|
+
### Notes
|
|
53
|
+
All tests skipped because billing page requires `settings.billing` permission which only OWNER role has.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## @test SEL_BILL_002: Invoices Section
|
|
58
|
+
|
|
59
|
+
### Metadata
|
|
60
|
+
- **Priority:** High
|
|
61
|
+
- **Type:** Selector Validation
|
|
62
|
+
- **Tags:** billing, invoices, table
|
|
63
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_002`
|
|
64
|
+
- **Status:** Skipped - requires OWNER permission
|
|
65
|
+
|
|
66
|
+
```gherkin:en
|
|
67
|
+
Scenario: Billing page has invoices section
|
|
68
|
+
|
|
69
|
+
Given I am logged in as OWNER
|
|
70
|
+
And I navigate to the billing settings page
|
|
71
|
+
Then I should find the invoices table
|
|
72
|
+
And I should find invoice rows (when invoices exist)
|
|
73
|
+
And I should find load more button (when many invoices)
|
|
74
|
+
And I should find invoice status badges
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```gherkin:es
|
|
78
|
+
Scenario: Pagina de billing tiene seccion de facturas
|
|
79
|
+
|
|
80
|
+
Given estoy logueado como OWNER
|
|
81
|
+
And navego a la pagina de configuracion de billing
|
|
82
|
+
Then deberia encontrar la tabla de facturas
|
|
83
|
+
And deberia encontrar filas de facturas (cuando existen)
|
|
84
|
+
And deberia encontrar boton cargar mas (cuando hay muchas)
|
|
85
|
+
And deberia encontrar badges de estado de factura
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Expected Results
|
|
89
|
+
- `invoices-table` selector exists
|
|
90
|
+
- `invoices-row` selector exists (when invoices present)
|
|
91
|
+
- `invoices-load-more` selector exists (when more invoices available)
|
|
92
|
+
- `invoice-status-badge` selector exists (when invoices present)
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## @test SEL_BILL_003: Usage Display
|
|
97
|
+
|
|
98
|
+
### Metadata
|
|
99
|
+
- **Priority:** Medium
|
|
100
|
+
- **Type:** Selector Validation
|
|
101
|
+
- **Tags:** billing, usage, limits
|
|
102
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_003`
|
|
103
|
+
- **Status:** Skipped - requires OWNER permission
|
|
104
|
+
|
|
105
|
+
```gherkin:en
|
|
106
|
+
Scenario: Billing page displays usage information
|
|
107
|
+
|
|
108
|
+
Given I am logged in as OWNER
|
|
109
|
+
And I navigate to the billing settings page
|
|
110
|
+
Then I should see usage numbers in format "X / Y"
|
|
111
|
+
And I should find the usage dashboard component
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```gherkin:es
|
|
115
|
+
Scenario: Pagina de billing muestra informacion de uso
|
|
116
|
+
|
|
117
|
+
Given estoy logueado como OWNER
|
|
118
|
+
And navego a la pagina de configuracion de billing
|
|
119
|
+
Then deberia ver numeros de uso en formato "X / Y"
|
|
120
|
+
And deberia encontrar el componente usage dashboard
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Expected Results
|
|
124
|
+
- Usage numbers displayed in format `N / M`
|
|
125
|
+
- `usage-dashboard` selector exists
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## @test SEL_BILL_004: ManageBillingButton
|
|
130
|
+
|
|
131
|
+
### Metadata
|
|
132
|
+
- **Priority:** Low
|
|
133
|
+
- **Type:** Selector Validation
|
|
134
|
+
- **Tags:** billing, manage, stripe
|
|
135
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_004`
|
|
136
|
+
- **Status:** Skipped - requires paid Stripe subscription
|
|
137
|
+
|
|
138
|
+
```gherkin:en
|
|
139
|
+
Scenario: Billing page has manage billing button for paid users
|
|
140
|
+
|
|
141
|
+
Given I am logged in as a user with paid subscription
|
|
142
|
+
And the subscription has an external Stripe customer ID
|
|
143
|
+
And I navigate to the billing settings page
|
|
144
|
+
Then I should find the manage billing button
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```gherkin:es
|
|
148
|
+
Scenario: Pagina de billing tiene boton de gestionar billing para usuarios de pago
|
|
149
|
+
|
|
150
|
+
Given estoy logueado como usuario con suscripcion de pago
|
|
151
|
+
And la suscripcion tiene un ID de cliente externo de Stripe
|
|
152
|
+
And navego a la pagina de configuracion de billing
|
|
153
|
+
Then deberia encontrar el boton de gestionar billing
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Expected Results
|
|
157
|
+
- `manage-billing-button` selector exists
|
|
158
|
+
|
|
159
|
+
### Notes
|
|
160
|
+
ManageBillingButton only renders when `subscription.externalCustomerId` exists (Stripe customer).
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## @test SEL_BILL_005: SubscriptionStatus
|
|
165
|
+
|
|
166
|
+
### Metadata
|
|
167
|
+
- **Priority:** Low
|
|
168
|
+
- **Type:** Selector Validation
|
|
169
|
+
- **Tags:** billing, subscription, status
|
|
170
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_005`
|
|
171
|
+
- **Status:** Skipped - requires active subscription
|
|
172
|
+
|
|
173
|
+
```gherkin:en
|
|
174
|
+
Scenario: Billing page shows subscription status for subscribers
|
|
175
|
+
|
|
176
|
+
Given I am logged in as a user with active subscription
|
|
177
|
+
And I navigate to the billing settings page
|
|
178
|
+
Then I should find the subscription status container
|
|
179
|
+
And I should find the subscription plan name
|
|
180
|
+
And I should find the subscription status badge
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
```gherkin:es
|
|
184
|
+
Scenario: Pagina de billing muestra estado de suscripcion para suscriptores
|
|
185
|
+
|
|
186
|
+
Given estoy logueado como usuario con suscripcion activa
|
|
187
|
+
And navego a la pagina de configuracion de billing
|
|
188
|
+
Then deberia encontrar el contenedor de estado de suscripcion
|
|
189
|
+
And deberia encontrar el nombre del plan de suscripcion
|
|
190
|
+
And deberia encontrar el badge de estado de suscripcion
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Expected Results
|
|
194
|
+
- `subscription-status` selector exists
|
|
195
|
+
- `subscription-status-plan` selector exists
|
|
196
|
+
- `subscription-status-badge` selector exists
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## @test SEL_BILL_006: DowngradeWarning
|
|
201
|
+
|
|
202
|
+
### Metadata
|
|
203
|
+
- **Priority:** Low
|
|
204
|
+
- **Type:** Selector Validation
|
|
205
|
+
- **Tags:** billing, downgrade, warning
|
|
206
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_006`
|
|
207
|
+
- **Status:** Skipped - requires downgrade flow with over-limit resources
|
|
208
|
+
|
|
209
|
+
```gherkin:en
|
|
210
|
+
Scenario: Downgrade warning appears when user has over-limit resources
|
|
211
|
+
|
|
212
|
+
Given I am attempting to downgrade my subscription
|
|
213
|
+
And I have resources that exceed the new plan limits
|
|
214
|
+
Then I should see the downgrade warning alert
|
|
215
|
+
And I should see the warning title
|
|
216
|
+
And I should see the warning description
|
|
217
|
+
And I should see the list of over-limit resources
|
|
218
|
+
And I should see the confirm downgrade button
|
|
219
|
+
And I should see the cancel button
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```gherkin:es
|
|
223
|
+
Scenario: Advertencia de downgrade aparece cuando usuario tiene recursos sobre el limite
|
|
224
|
+
|
|
225
|
+
Given estoy intentando bajar mi suscripcion
|
|
226
|
+
And tengo recursos que exceden los limites del nuevo plan
|
|
227
|
+
Then deberia ver la alerta de advertencia de downgrade
|
|
228
|
+
And deberia ver el titulo de advertencia
|
|
229
|
+
And deberia ver la descripcion de advertencia
|
|
230
|
+
And deberia ver la lista de recursos sobre el limite
|
|
231
|
+
And deberia ver el boton de confirmar downgrade
|
|
232
|
+
And deberia ver el boton de cancelar
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Expected Results
|
|
236
|
+
- `downgrade-warning` selector exists
|
|
237
|
+
- `downgrade-warning-title` selector exists
|
|
238
|
+
- `downgrade-warning-description` selector exists
|
|
239
|
+
- `downgrade-warning-list` selector exists
|
|
240
|
+
- `downgrade-limit-{slug}` selectors exist
|
|
241
|
+
- `downgrade-warning-confirm` selector exists
|
|
242
|
+
- `downgrade-warning-cancel` selector exists
|
|
243
|
+
|
|
244
|
+
### Notes
|
|
245
|
+
DowngradeWarning only renders when `overLimitResources.length > 0`.
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## @test SEL_BILL_DOC: Selector Documentation
|
|
250
|
+
|
|
251
|
+
### Metadata
|
|
252
|
+
- **Priority:** Low
|
|
253
|
+
- **Type:** Documentation
|
|
254
|
+
- **Tags:** billing, documentation
|
|
255
|
+
- **Grep:** `@ui-selectors` `@SEL_BILL_DOC`
|
|
256
|
+
- **Status:** Active
|
|
257
|
+
|
|
258
|
+
```gherkin:en
|
|
259
|
+
Scenario: Document all billing component selectors
|
|
260
|
+
|
|
261
|
+
Given the billing selector tests are running
|
|
262
|
+
Then the test should log all available billing selectors
|
|
263
|
+
And document which permissions/states are required for each
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```gherkin:es
|
|
267
|
+
Scenario: Documentar todos los selectores de componentes de billing
|
|
268
|
+
|
|
269
|
+
Given los tests de selectores de billing estan corriendo
|
|
270
|
+
Then el test deberia loguear todos los selectores de billing disponibles
|
|
271
|
+
And documentar que permisos/estados se requieren para cada uno
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Expected Results
|
|
275
|
+
- Test logs all billing selectors for reference
|
|
276
|
+
- Documents permission and state requirements
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: Billing Components
|
|
3
|
+
*
|
|
4
|
+
* This test validates that billing component selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate billing component selectors (ManageBillingButton, SubscriptionStatus, etc.)
|
|
9
|
+
* - Document selectors from CORE_SELECTORS.settings.billing
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Billing page requires 'settings.billing' permission (OWNER role only)
|
|
14
|
+
* - Most tests are skipped due to permission/state requirements
|
|
15
|
+
* - Fast execution (< 30 seconds per describe block)
|
|
16
|
+
*
|
|
17
|
+
* Test IDs:
|
|
18
|
+
* - SEL_BILL_001: Billing Page Structure (skipped - requires OWNER permission)
|
|
19
|
+
* - SEL_BILL_002: Invoices Section (skipped - requires OWNER permission)
|
|
20
|
+
* - SEL_BILL_003: Usage Display (skipped - requires OWNER permission)
|
|
21
|
+
* - SEL_BILL_004: ManageBillingButton (skipped - requires paid subscription)
|
|
22
|
+
* - SEL_BILL_005: SubscriptionStatus (skipped - requires active subscription)
|
|
23
|
+
* - SEL_BILL_006: DowngradeWarning (skipped - requires downgrade flow)
|
|
24
|
+
*
|
|
25
|
+
* IMPORTANT: Billing page requires 'settings.billing' permission which only OWNER role has.
|
|
26
|
+
* Users without this permission are redirected to /dashboard/settings.
|
|
27
|
+
* See also: settings-billing.cy.ts for additional billing selectors.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
describe('Billing Selectors Validation', { tags: ['@ui-selectors', '@billing'] }, () => {
|
|
31
|
+
// ============================================
|
|
32
|
+
// SEL_BILL_001: BILLING PAGE STRUCTURE
|
|
33
|
+
// ============================================
|
|
34
|
+
describe('SEL_BILL_001: Billing Page Structure', { tags: '@SEL_BILL_001' }, () => {
|
|
35
|
+
// NOTE: Billing page requires 'settings.billing' permission (OWNER role only)
|
|
36
|
+
// Default test users may not have this permission
|
|
37
|
+
|
|
38
|
+
it.skip('should find billing main container (requires OWNER permission)', () => {
|
|
39
|
+
cy.get('[data-cy="billing-main"]').should('exist')
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it.skip('should find billing header (requires OWNER permission)', () => {
|
|
43
|
+
cy.get('[data-cy="billing-header"]').should('exist')
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it.skip('should find upgrade plan button (requires OWNER permission)', () => {
|
|
47
|
+
cy.get('[data-cy="billing-upgrade-plan"]').should('exist')
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it.skip('should find add payment button (requires OWNER permission)', () => {
|
|
51
|
+
cy.get('[data-cy="billing-add-payment"]').should('exist')
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
// ============================================
|
|
56
|
+
// SEL_BILL_002: INVOICES SECTION
|
|
57
|
+
// ============================================
|
|
58
|
+
describe('SEL_BILL_002: Invoices Section', { tags: '@SEL_BILL_002' }, () => {
|
|
59
|
+
it.skip('should find invoices table (requires OWNER permission)', () => {
|
|
60
|
+
cy.get('[data-cy="invoices-table"]').should('exist')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it.skip('should find invoices row (requires invoices)', () => {
|
|
64
|
+
cy.get('[data-cy="invoices-row"]').should('exist')
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it.skip('should find load more button (requires many invoices)', () => {
|
|
68
|
+
cy.get('[data-cy="invoices-load-more"]').should('exist')
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it.skip('should find invoice status badge (requires invoices)', () => {
|
|
72
|
+
cy.get('[data-cy="invoice-status-badge"]').should('exist')
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
// ============================================
|
|
77
|
+
// SEL_BILL_003: USAGE DISPLAY
|
|
78
|
+
// ============================================
|
|
79
|
+
describe('SEL_BILL_003: Usage Display', { tags: '@SEL_BILL_003' }, () => {
|
|
80
|
+
it.skip('should display usage numbers (requires OWNER permission)', () => {
|
|
81
|
+
cy.contains(/\d+\s*\/\s*\d+/).should('be.visible')
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it.skip('should find usage dashboard (requires UsageDashboard component)', () => {
|
|
85
|
+
cy.get('[data-cy="usage-dashboard"]').should('exist')
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
// ============================================
|
|
90
|
+
// SEL_BILL_004: MANAGE BILLING BUTTON
|
|
91
|
+
// ============================================
|
|
92
|
+
describe('SEL_BILL_004: ManageBillingButton', { tags: '@SEL_BILL_004' }, () => {
|
|
93
|
+
// ManageBillingButton only renders when subscription has externalCustomerId
|
|
94
|
+
|
|
95
|
+
it.skip('should find manage billing button (requires paid subscription)', () => {
|
|
96
|
+
cy.get('[data-cy="manage-billing-button"]').should('exist')
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
// ============================================
|
|
101
|
+
// SEL_BILL_005: SUBSCRIPTION STATUS
|
|
102
|
+
// ============================================
|
|
103
|
+
describe('SEL_BILL_005: SubscriptionStatus', { tags: '@SEL_BILL_005' }, () => {
|
|
104
|
+
// SubscriptionStatus requires an active subscription
|
|
105
|
+
|
|
106
|
+
it.skip('should find subscription status container (requires subscription)', () => {
|
|
107
|
+
cy.get('[data-cy="subscription-status"]').should('exist')
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
it.skip('should find subscription plan name (requires subscription)', () => {
|
|
111
|
+
cy.get('[data-cy="subscription-status-plan"]').should('exist')
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it.skip('should find subscription status badge (requires subscription)', () => {
|
|
115
|
+
cy.get('[data-cy="subscription-status-badge"]').should('exist')
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
// ============================================
|
|
120
|
+
// SEL_BILL_006: DOWNGRADE WARNING
|
|
121
|
+
// ============================================
|
|
122
|
+
describe('SEL_BILL_006: DowngradeWarning', { tags: '@SEL_BILL_006' }, () => {
|
|
123
|
+
// DowngradeWarning only renders when overLimitResources.length > 0
|
|
124
|
+
|
|
125
|
+
it.skip('should find downgrade warning (requires downgrade flow)', () => {
|
|
126
|
+
cy.get('[data-cy="downgrade-warning"]').should('exist')
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
it.skip('should find downgrade warning title (requires downgrade flow)', () => {
|
|
130
|
+
cy.get('[data-cy="downgrade-warning-title"]').should('exist')
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
it.skip('should find downgrade warning description (requires downgrade flow)', () => {
|
|
134
|
+
cy.get('[data-cy="downgrade-warning-description"]').should('exist')
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it.skip('should find downgrade warning list (requires downgrade flow)', () => {
|
|
138
|
+
cy.get('[data-cy="downgrade-warning-list"]').should('exist')
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
it.skip('should find downgrade confirm button (requires downgrade flow)', () => {
|
|
142
|
+
cy.get('[data-cy="downgrade-warning-confirm"]').should('exist')
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
it.skip('should find downgrade cancel button (requires downgrade flow)', () => {
|
|
146
|
+
cy.get('[data-cy="downgrade-warning-cancel"]').should('exist')
|
|
147
|
+
})
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
// ============================================
|
|
151
|
+
// DOCUMENTATION TEST
|
|
152
|
+
// ============================================
|
|
153
|
+
describe('SEL_BILL_DOC: Selector Documentation', { tags: '@SEL_BILL_DOC' }, () => {
|
|
154
|
+
it('should document billing component selectors', () => {
|
|
155
|
+
cy.log('=== BILLING COMPONENT SELECTORS ===')
|
|
156
|
+
cy.log('')
|
|
157
|
+
cy.log('Billing Page (requires OWNER permission):')
|
|
158
|
+
cy.log('- billing-main, billing-header')
|
|
159
|
+
cy.log('- billing-upgrade-plan, billing-add-payment')
|
|
160
|
+
cy.log('- invoices-table, invoices-row, invoices-load-more')
|
|
161
|
+
cy.log('')
|
|
162
|
+
cy.log('ManageBillingButton (requires paid subscription):')
|
|
163
|
+
cy.log('- manage-billing-button')
|
|
164
|
+
cy.log('')
|
|
165
|
+
cy.log('SubscriptionStatus (requires active subscription):')
|
|
166
|
+
cy.log('- subscription-status, subscription-status-plan')
|
|
167
|
+
cy.log('- subscription-status-badge, subscription-status-period')
|
|
168
|
+
cy.log('- subscription-status-upgrade, subscription-manage-billing')
|
|
169
|
+
cy.log('')
|
|
170
|
+
cy.log('DowngradeWarning (requires downgrade flow):')
|
|
171
|
+
cy.log('- downgrade-warning, downgrade-warning-title')
|
|
172
|
+
cy.log('- downgrade-warning-description, downgrade-warning-list')
|
|
173
|
+
cy.log('- downgrade-limit-{slug}, downgrade-warning-policy')
|
|
174
|
+
cy.log('- downgrade-warning-confirm, downgrade-warning-cancel')
|
|
175
|
+
cy.log('')
|
|
176
|
+
cy.log('UsageDashboard:')
|
|
177
|
+
cy.log('- usage-dashboard, usage-dashboard-limits')
|
|
178
|
+
cy.log('- usage-dashboard-limit-{slug}, usage-bar-{slug}')
|
|
179
|
+
cy.wrap(true).should('be.true')
|
|
180
|
+
})
|
|
181
|
+
})
|
|
182
|
+
})
|