@nextsparkjs/theme-default 0.1.0-beta.17 → 0.1.0-beta.170
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/ai/chat/stream/route.ts +4 -1
- package/api/ai/orchestrator/route.ts +10 -3
- package/api/ai/single-agent/route.ts +10 -3
- package/api/ai/usage/route.ts +4 -1
- package/blocks/benefits/component.tsx +4 -4
- package/blocks/cta-section/component.tsx +4 -4
- package/blocks/faq-accordion/component.tsx +2 -2
- package/blocks/features-grid/component.tsx +5 -5
- package/blocks/hero/component.tsx +2 -2
- package/blocks/hero/fields.ts +1 -1
- package/blocks/hero-with-form/component.tsx +7 -7
- package/blocks/hero-with-form/fields.ts +1 -1
- package/blocks/jumbotron/component.tsx +7 -7
- package/blocks/jumbotron/fields.ts +1 -1
- package/blocks/logo-cloud/component.tsx +6 -6
- package/blocks/logo-cloud/fields.ts +1 -1
- package/blocks/post-content/component.tsx +2 -2
- package/blocks/pricing-table/component.tsx +5 -5
- package/blocks/split-content/component.tsx +5 -5
- package/blocks/split-content/fields.ts +1 -1
- package/blocks/stats-counter/component.tsx +9 -9
- package/blocks/testimonials/component.tsx +4 -4
- package/blocks/testimonials/fields.ts +1 -1
- package/blocks/text-content/component.tsx +12 -10
- package/blocks/timeline/component.tsx +12 -12
- package/blocks/video-hero/component.tsx +7 -7
- package/blocks/video-hero/fields.ts +1 -1
- package/components/ai-chat/ChatPanel.tsx +7 -7
- package/components/ai-chat/Message.tsx +2 -2
- package/components/ai-chat/MessageInput.tsx +3 -3
- package/components/ai-chat/MessageList.tsx +3 -3
- package/components/ai-chat/TypingIndicator.tsx +2 -2
- package/config/app.config.ts +90 -62
- package/config/billing.config.ts +5 -10
- package/config/dashboard.config.ts +14 -0
- package/config/features.config.ts +10 -0
- package/config/permissions.config.ts +22 -23
- package/docs/{01-overview → public/01-overview}/01-introduction.md +5 -0
- package/docs/{01-overview → public/01-overview}/02-customization.md +5 -0
- package/docs/{02-features → public/02-features}/03-tasks-entity.md +5 -0
- package/docs/{03-ai → public/03-ai}/01-overview.md +5 -0
- package/docs/{03-ai → public/03-ai}/02-customization.md +5 -0
- package/docs/superadmin/01-setup/01-configuration.md +79 -0
- package/docs/superadmin/01-setup/02-deployment.md +82 -0
- package/docs/superadmin/02-management/01-users.md +83 -0
- package/docs/superadmin/03-integrations/01-langchain.md +139 -0
- package/emails/verify-email.ts +33 -0
- package/entities/customers/api/docs.md +107 -0
- package/entities/customers/api/presets.ts +80 -0
- package/entities/pages/api/docs.md +114 -0
- package/entities/pages/api/presets.ts +72 -0
- package/entities/posts/api/docs.md +120 -0
- package/entities/posts/api/presets.ts +74 -0
- package/entities/tasks/api/docs.md +126 -0
- package/entities/tasks/api/presets.ts +84 -0
- package/lib/selectors.ts +7 -4
- package/messages/de/admin.json +45 -0
- package/messages/en/admin.json +56 -0
- package/messages/en/navigation.json +2 -1
- package/messages/es/admin.json +56 -0
- package/messages/es/navigation.json +2 -1
- package/messages/fr/admin.json +45 -0
- package/messages/it/admin.json +45 -0
- package/messages/pt/admin.json +45 -0
- package/migrations/089_add_editor_team_role.sql +15 -23
- package/migrations/090_demo_users_teams.sql +11 -11
- package/migrations/091_greek_teams_billing.sql +15 -15
- package/migrations/093_pages_sample_data.sql +7 -7
- package/migrations/098_patterns_sample_data.sql +234 -0
- package/nextsparkjs-theme-default-0.1.0-beta.137.tgz +0 -0
- package/package.json +4 -3
- package/styles/globals.css +42 -0
- package/templates/(public)/page.tsx +1 -1
- package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_utils/docs/README.md +215 -0
- package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
- package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
- package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
- package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
- package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
- package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
- package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
- package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
- package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
- package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
- package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
- package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +87 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +33 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +246 -0
- package/tests/cypress/src/entities/index.ts +16 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +271 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +707 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +518 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress/support/e2e.ts +90 -0
- package/tests/cypress.config.ts +178 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
- package/tests/jest/__mocks__/jose.js +22 -0
- package/tests/jest/__mocks__/next/image.js +15 -0
- package/tests/jest/__mocks__/next-server.js +56 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/jest.config.cjs +154 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +370 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/services/tasks.service.test.ts +707 -0
- package/tests/jest/setup.ts +170 -0
- package/tests/jest/tsconfig.jest.json +6 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +21 -0
- /package/docs/{02-features → public/02-features}/01-components.md +0 -0
- /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Selectors Validation: Global Search
|
|
3
|
+
*
|
|
4
|
+
* This test validates that global search selectors exist in the DOM.
|
|
5
|
+
* This is a lightweight test that ONLY checks selector presence, not functionality.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* - Validate globalSearch.* selectors work correctly
|
|
9
|
+
* - Ensure search modal and components are implemented
|
|
10
|
+
* - Run as Phase 12 sub-gate before functional tests
|
|
11
|
+
*
|
|
12
|
+
* Scope:
|
|
13
|
+
* - Navigate to dashboard (requires login)
|
|
14
|
+
* - Open search modal
|
|
15
|
+
* - Assert elements exist in DOM (no actual search)
|
|
16
|
+
*
|
|
17
|
+
* Test IDs:
|
|
18
|
+
* - SEL_GSRCH_001: Search Trigger
|
|
19
|
+
* - SEL_GSRCH_002: Search Modal (when open)
|
|
20
|
+
* - SEL_GSRCH_003: Search Modal (opened via click)
|
|
21
|
+
*
|
|
22
|
+
* NOTE: Search modal must be opened via keyboard shortcut or trigger button.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { cySelector } from '../../../src/selectors'
|
|
26
|
+
import { loginAsDefaultDeveloper } from '../../../src/session-helpers'
|
|
27
|
+
|
|
28
|
+
describe('Global Search Selectors Validation', { tags: ['@ui-selectors', '@search'] }, () => {
|
|
29
|
+
// Define selectors locally since globalSearch might not be in selectors.ts
|
|
30
|
+
const selectors = {
|
|
31
|
+
modal: cySelector('globalSearch.modal'),
|
|
32
|
+
trigger: cySelector('globalSearch.trigger'),
|
|
33
|
+
input: cySelector('globalSearch.input'),
|
|
34
|
+
results: cySelector('globalSearch.results'),
|
|
35
|
+
result: cySelector('globalSearch.result'),
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
loginAsDefaultDeveloper()
|
|
40
|
+
cy.visit('/dashboard', { timeout: 60000, failOnStatusCode: false })
|
|
41
|
+
cy.url().should('include', '/dashboard')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
// ============================================
|
|
45
|
+
// SEL_GSRCH_001: SEARCH TRIGGER (1 selector)
|
|
46
|
+
// ============================================
|
|
47
|
+
describe('SEL_GSRCH_001: Search Trigger', { tags: '@SEL_GSRCH_001' }, () => {
|
|
48
|
+
it.skip('should find search trigger button (selector not implemented)', () => {
|
|
49
|
+
cy.get(selectors.trigger).should('exist')
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
// ============================================
|
|
54
|
+
// SEL_GSRCH_002: SEARCH MODAL (4 selectors)
|
|
55
|
+
// These require the modal to be open
|
|
56
|
+
// ============================================
|
|
57
|
+
describe('SEL_GSRCH_002: Search Modal (when open)', { tags: '@SEL_GSRCH_002' }, () => {
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
// Try to open search modal via keyboard shortcut (Cmd+K or Ctrl+K)
|
|
60
|
+
cy.get('body').type('{meta}k')
|
|
61
|
+
// Wait a bit for modal to open
|
|
62
|
+
cy.wait(500)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it.skip('should find search modal container (selector not implemented)', () => {
|
|
66
|
+
cy.get(selectors.modal).should('exist')
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
it('should find search input', () => {
|
|
70
|
+
cy.get(selectors.input).should('exist')
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
it.skip('should find search results container (requires search query)', () => {
|
|
74
|
+
cy.get(selectors.results).should('exist')
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it.skip('should find search result item (requires search query with results)', () => {
|
|
78
|
+
cy.get(selectors.result).should('exist')
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
// ============================================
|
|
83
|
+
// SEL_GSRCH_003: SEARCH MODAL VIA CLICK
|
|
84
|
+
// ============================================
|
|
85
|
+
describe('SEL_GSRCH_003: Search Modal (opened via click)', { tags: '@SEL_GSRCH_003' }, () => {
|
|
86
|
+
it.skip('should open search modal when clicking trigger (trigger selector not implemented)', () => {
|
|
87
|
+
cy.get(selectors.trigger).click()
|
|
88
|
+
cy.wait(500)
|
|
89
|
+
cy.get(selectors.modal).should('exist')
|
|
90
|
+
cy.get(selectors.input).should('exist')
|
|
91
|
+
})
|
|
92
|
+
})
|
|
93
|
+
})
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Patterns UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, patterns, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, patterns, feat-patterns, SEL_PAT_001, SEL_PAT_002, SEL_PAT_003, SEL_PAT_004, SEL_PAT_005, SEL_PAT_006, SEL_PAT_007, SEL_PAT_008]
|
|
6
|
+
coverage: 8
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Patterns UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that patterns-specific selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Validates KEY DIFFERENCES from standard entity editor: no slug input and no patterns tab in block picker.
|
|
12
|
+
|
|
13
|
+
**Login:** Uses Developer via `loginAsDefaultDeveloper()`.
|
|
14
|
+
|
|
15
|
+
**Dependencies:**
|
|
16
|
+
- Sample patterns must exist (from seed data)
|
|
17
|
+
- At least one pattern must have usages (for reports tests)
|
|
18
|
+
|
|
19
|
+
## @test SEL_PAT_001: Patterns List Page Selectors
|
|
20
|
+
|
|
21
|
+
### Metadata
|
|
22
|
+
- **Priority:** High
|
|
23
|
+
- **Type:** Selector Validation
|
|
24
|
+
- **Tags:** patterns, list, page
|
|
25
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_001`
|
|
26
|
+
- **Status:** Active (5 passing, 0 skipped)
|
|
27
|
+
|
|
28
|
+
```gherkin:en
|
|
29
|
+
Scenario: Patterns list page has complete selector coverage
|
|
30
|
+
|
|
31
|
+
Given I am logged in as a developer user
|
|
32
|
+
And I navigate to the patterns list page
|
|
33
|
+
Then I should find the page container
|
|
34
|
+
And I should find the page title
|
|
35
|
+
And I should find the add button
|
|
36
|
+
And I should find the search container
|
|
37
|
+
And I should find the table container
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```gherkin:es
|
|
41
|
+
Scenario: Pagina de lista de patrones tiene cobertura completa de selectores
|
|
42
|
+
|
|
43
|
+
Given estoy logueado como usuario developer
|
|
44
|
+
And navego a la pagina de lista de patrones
|
|
45
|
+
Then deberia encontrar el contenedor de pagina
|
|
46
|
+
And deberia encontrar el titulo de pagina
|
|
47
|
+
And deberia encontrar el boton de agregar
|
|
48
|
+
And deberia encontrar el contenedor de busqueda
|
|
49
|
+
And deberia encontrar el contenedor de tabla
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Expected Results
|
|
53
|
+
| Test ID | Selector Path | Status |
|
|
54
|
+
|---------|---------------|--------|
|
|
55
|
+
| SEL_PAT_001_01 | patterns.selectors.page | Implemented |
|
|
56
|
+
| SEL_PAT_001_02 | patterns.selectors.title | Implemented |
|
|
57
|
+
| SEL_PAT_001_03 | patterns.selectors.addBtn | Implemented |
|
|
58
|
+
| SEL_PAT_001_04 | patterns.selectors.searchContainer | Implemented |
|
|
59
|
+
| SEL_PAT_001_05 | patterns.selectors.table | Implemented |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## @test SEL_PAT_002: Patterns List Table Actions
|
|
64
|
+
|
|
65
|
+
### Metadata
|
|
66
|
+
- **Priority:** High
|
|
67
|
+
- **Type:** Selector Validation
|
|
68
|
+
- **Tags:** patterns, list, actions, table
|
|
69
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_002`
|
|
70
|
+
- **Status:** Active (4 passing, 0 skipped)
|
|
71
|
+
|
|
72
|
+
```gherkin:en
|
|
73
|
+
Scenario: Patterns list table has all row action selectors
|
|
74
|
+
|
|
75
|
+
Given I am logged in as a developer user
|
|
76
|
+
And I navigate to the patterns list page
|
|
77
|
+
And at least one pattern exists in the database
|
|
78
|
+
Then I should find the row menu for the first pattern
|
|
79
|
+
When I click the row menu
|
|
80
|
+
Then I should find the edit action
|
|
81
|
+
And I should find the delete action
|
|
82
|
+
And I should find the usages quick action
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```gherkin:es
|
|
86
|
+
Scenario: Tabla de lista de patrones tiene todos los selectores de acciones de fila
|
|
87
|
+
|
|
88
|
+
Given estoy logueado como usuario developer
|
|
89
|
+
And navego a la pagina de lista de patrones
|
|
90
|
+
And al menos un patron existe en la base de datos
|
|
91
|
+
Then deberia encontrar el menu de fila del primer patron
|
|
92
|
+
When hago click en el menu de fila
|
|
93
|
+
Then deberia encontrar la accion de editar
|
|
94
|
+
And deberia encontrar la accion de eliminar
|
|
95
|
+
And deberia encontrar la accion rapida de usos
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Expected Results
|
|
99
|
+
| Test ID | Selector Path | Status |
|
|
100
|
+
|---------|---------------|--------|
|
|
101
|
+
| SEL_PAT_002_01 | patterns.selectors.rowMenu(id) | Implemented |
|
|
102
|
+
| SEL_PAT_002_02 | patterns.selectors.rowAction('edit', id) | Implemented |
|
|
103
|
+
| SEL_PAT_002_03 | patterns.selectors.rowAction('delete', id) | Implemented |
|
|
104
|
+
| SEL_PAT_002_04 | patterns.selectors.rowAction('usages', id) | Implemented |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## @test SEL_PAT_003: Patterns Editor Header - KEY DIFFERENCES
|
|
109
|
+
|
|
110
|
+
### Metadata
|
|
111
|
+
- **Priority:** High
|
|
112
|
+
- **Type:** Selector Validation
|
|
113
|
+
- **Tags:** patterns, editor, header, differences
|
|
114
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_003`
|
|
115
|
+
- **Status:** Active (5 passing, 0 skipped)
|
|
116
|
+
|
|
117
|
+
```gherkin:en
|
|
118
|
+
Scenario: Patterns editor header validates key differences from standard editor
|
|
119
|
+
|
|
120
|
+
Given I am logged in as a developer user
|
|
121
|
+
And I navigate to create a new pattern
|
|
122
|
+
And the editor is loaded
|
|
123
|
+
Then I should find the header container
|
|
124
|
+
And I should find the title input
|
|
125
|
+
And I should NOT find the slug input (patterns-specific)
|
|
126
|
+
And I should find the save button
|
|
127
|
+
And I should find the view mode toggle
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```gherkin:es
|
|
131
|
+
Scenario: Header del editor de patrones valida diferencias clave del editor estandar
|
|
132
|
+
|
|
133
|
+
Given estoy logueado como usuario developer
|
|
134
|
+
And navego a crear un nuevo patron
|
|
135
|
+
And el editor esta cargado
|
|
136
|
+
Then deberia encontrar el contenedor del header
|
|
137
|
+
And deberia encontrar el input de titulo
|
|
138
|
+
And NO deberia encontrar el input de slug (especifico de patrones)
|
|
139
|
+
And deberia encontrar el boton de guardar
|
|
140
|
+
And deberia encontrar el toggle de modo de vista
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Expected Results
|
|
144
|
+
| Test ID | Selector Path | Assertion | Status |
|
|
145
|
+
|---------|---------------|-----------|--------|
|
|
146
|
+
| SEL_PAT_003_01 | blockEditor.header.container | should exist | Implemented |
|
|
147
|
+
| SEL_PAT_003_02 | blockEditor.header.titleInput | should exist | Implemented |
|
|
148
|
+
| SEL_PAT_003_03 | blockEditor.header.slugInput | should NOT exist | **KEY DIFFERENCE** |
|
|
149
|
+
| SEL_PAT_003_04 | blockEditor.header.saveButton | should exist | Implemented |
|
|
150
|
+
| SEL_PAT_003_05 | blockEditor.header.viewToggle | should exist | Implemented |
|
|
151
|
+
|
|
152
|
+
### Notes
|
|
153
|
+
- **KEY DIFFERENCE:** Patterns do not have slugs, so the slug input should NOT exist.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## @test SEL_PAT_004: Patterns Editor Block Picker - KEY DIFFERENCES
|
|
158
|
+
|
|
159
|
+
### Metadata
|
|
160
|
+
- **Priority:** High
|
|
161
|
+
- **Type:** Selector Validation
|
|
162
|
+
- **Tags:** patterns, editor, block-picker, differences
|
|
163
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_004`
|
|
164
|
+
- **Status:** Active (5 passing, 0 skipped)
|
|
165
|
+
|
|
166
|
+
```gherkin:en
|
|
167
|
+
Scenario: Patterns block picker validates key differences from standard editor
|
|
168
|
+
|
|
169
|
+
Given I am logged in as a developer user
|
|
170
|
+
And I navigate to create a new pattern
|
|
171
|
+
And the editor is loaded
|
|
172
|
+
Then I should find the block picker container
|
|
173
|
+
And I should find the blocks tab
|
|
174
|
+
And I should NOT find the patterns tab (patterns-specific)
|
|
175
|
+
And I should find the config tab
|
|
176
|
+
And I should find the search input
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```gherkin:es
|
|
180
|
+
Scenario: Block picker de patrones valida diferencias clave del editor estandar
|
|
181
|
+
|
|
182
|
+
Given estoy logueado como usuario developer
|
|
183
|
+
And navego a crear un nuevo patron
|
|
184
|
+
And el editor esta cargado
|
|
185
|
+
Then deberia encontrar el contenedor del block picker
|
|
186
|
+
And deberia encontrar la pestana de bloques
|
|
187
|
+
And NO deberia encontrar la pestana de patrones (especifico de patrones)
|
|
188
|
+
And deberia encontrar la pestana de configuracion
|
|
189
|
+
And deberia encontrar el input de busqueda
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Expected Results
|
|
193
|
+
| Test ID | Selector Path | Assertion | Status |
|
|
194
|
+
|---------|---------------|-----------|--------|
|
|
195
|
+
| SEL_PAT_004_01 | blockEditor.blockPicker.container | should exist | Implemented |
|
|
196
|
+
| SEL_PAT_004_02 | blockEditor.blockPicker.tabBlocks | should exist | Implemented |
|
|
197
|
+
| SEL_PAT_004_03 | blockEditor.blockPicker.tabPatterns | should NOT exist | **KEY DIFFERENCE** |
|
|
198
|
+
| SEL_PAT_004_04 | blockEditor.blockPicker.tabConfig | should exist | **Skipped** (patterns have no sidebarFields/taxonomies) |
|
|
199
|
+
| SEL_PAT_004_05 | blockEditor.blockPicker.searchInput | should exist | Implemented |
|
|
200
|
+
|
|
201
|
+
### Notes
|
|
202
|
+
- **KEY DIFFERENCE:** Patterns cannot contain other patterns (to prevent recursion), so the patterns tab should NOT exist.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## @test SEL_PAT_005: Patterns Reports Page
|
|
207
|
+
|
|
208
|
+
### Metadata
|
|
209
|
+
- **Priority:** Medium
|
|
210
|
+
- **Type:** Selector Validation
|
|
211
|
+
- **Tags:** patterns, reports, usages
|
|
212
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_005`
|
|
213
|
+
- **Status:** Active (4 passing, 0 skipped)
|
|
214
|
+
|
|
215
|
+
```gherkin:en
|
|
216
|
+
Scenario: Pattern usages report page has complete structure
|
|
217
|
+
|
|
218
|
+
Given I am logged in as a developer user
|
|
219
|
+
And I navigate to the patterns list page
|
|
220
|
+
And I click the usages action on the first pattern
|
|
221
|
+
Then I should find the report container
|
|
222
|
+
And I should find the back button
|
|
223
|
+
And I should find the page title
|
|
224
|
+
And I should find the edit button
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
```gherkin:es
|
|
228
|
+
Scenario: Pagina de reporte de usos de patrones tiene estructura completa
|
|
229
|
+
|
|
230
|
+
Given estoy logueado como usuario developer
|
|
231
|
+
And navego a la pagina de lista de patrones
|
|
232
|
+
And hago click en la accion de usos del primer patron
|
|
233
|
+
Then deberia encontrar el contenedor del reporte
|
|
234
|
+
And deberia encontrar el boton de volver
|
|
235
|
+
And deberia encontrar el titulo de pagina
|
|
236
|
+
And deberia encontrar el boton de editar
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Expected Results
|
|
240
|
+
| Test ID | Selector Path | Status |
|
|
241
|
+
|---------|---------------|--------|
|
|
242
|
+
| SEL_PAT_005_01 | patterns.patternSelectors.usageReport.container | Implemented |
|
|
243
|
+
| SEL_PAT_005_02 | patterns.selectors.backButton | Implemented |
|
|
244
|
+
| SEL_PAT_005_03 | patterns.selectors.headerTitle | Implemented |
|
|
245
|
+
| SEL_PAT_005_04 | patterns.selectors.editButton | Implemented |
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## @test SEL_PAT_006: Pattern Usage Stats
|
|
250
|
+
|
|
251
|
+
### Metadata
|
|
252
|
+
- **Priority:** Medium
|
|
253
|
+
- **Type:** Selector Validation
|
|
254
|
+
- **Tags:** patterns, reports, stats
|
|
255
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_006`
|
|
256
|
+
- **Status:** Active (3 passing, 0 skipped)
|
|
257
|
+
|
|
258
|
+
```gherkin:en
|
|
259
|
+
Scenario: Pattern usage stats have all required selectors
|
|
260
|
+
|
|
261
|
+
Given I am logged in as a developer user
|
|
262
|
+
And I navigate to a pattern's usages page
|
|
263
|
+
Then I should find the stats container
|
|
264
|
+
And I should find the total usage card
|
|
265
|
+
And I should find usage by type cards (if usages exist)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
```gherkin:es
|
|
269
|
+
Scenario: Estadisticas de uso de patron tienen todos los selectores requeridos
|
|
270
|
+
|
|
271
|
+
Given estoy logueado como usuario developer
|
|
272
|
+
And navego a la pagina de usos de un patron
|
|
273
|
+
Then deberia encontrar el contenedor de estadisticas
|
|
274
|
+
And deberia encontrar la tarjeta de uso total
|
|
275
|
+
And deberia encontrar las tarjetas de uso por tipo (si existen usos)
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Expected Results
|
|
279
|
+
| Test ID | Selector Path | Status |
|
|
280
|
+
|---------|---------------|--------|
|
|
281
|
+
| SEL_PAT_006_01 | patterns.patternSelectors.usageStats.container | Implemented |
|
|
282
|
+
| SEL_PAT_006_02 | patterns.patternSelectors.usageStats.total | Implemented |
|
|
283
|
+
| SEL_PAT_006_03 | patterns.patternSelectors.usageStats.byType(type) | Conditional |
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## @test SEL_PAT_007: Pattern Usage Report Controls
|
|
288
|
+
|
|
289
|
+
### Metadata
|
|
290
|
+
- **Priority:** Medium
|
|
291
|
+
- **Type:** Selector Validation
|
|
292
|
+
- **Tags:** patterns, reports, controls, pagination
|
|
293
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_007`
|
|
294
|
+
- **Status:** Active (6 passing, 0 skipped)
|
|
295
|
+
|
|
296
|
+
```gherkin:en
|
|
297
|
+
Scenario: Pattern usage report controls have all required selectors
|
|
298
|
+
|
|
299
|
+
Given I am logged in as a developer user
|
|
300
|
+
And I navigate to a pattern's usages page
|
|
301
|
+
Then I should find the report container
|
|
302
|
+
And I should find the filter select
|
|
303
|
+
And I should find the pagination container
|
|
304
|
+
And I should find the prev page button
|
|
305
|
+
And I should find the next page button
|
|
306
|
+
And I should find the results info
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
```gherkin:es
|
|
310
|
+
Scenario: Controles de reporte de uso de patron tienen todos los selectores requeridos
|
|
311
|
+
|
|
312
|
+
Given estoy logueado como usuario developer
|
|
313
|
+
And navego a la pagina de usos de un patron
|
|
314
|
+
Then deberia encontrar el contenedor del reporte
|
|
315
|
+
And deberia encontrar el select de filtro
|
|
316
|
+
And deberia encontrar el contenedor de paginacion
|
|
317
|
+
And deberia encontrar el boton de pagina anterior
|
|
318
|
+
And deberia encontrar el boton de pagina siguiente
|
|
319
|
+
And deberia encontrar la info de resultados
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Expected Results
|
|
323
|
+
| Test ID | Selector Path | Status |
|
|
324
|
+
|---------|---------------|--------|
|
|
325
|
+
| SEL_PAT_007_01 | patterns.patternSelectors.usageReport.container | Implemented |
|
|
326
|
+
| SEL_PAT_007_02 | patterns.patternSelectors.usageReport.filterSelect | Implemented |
|
|
327
|
+
| SEL_PAT_007_03 | patterns.patternSelectors.usageReport.pagination | Implemented |
|
|
328
|
+
| SEL_PAT_007_04 | patterns.patternSelectors.usageReport.prevPage | Implemented |
|
|
329
|
+
| SEL_PAT_007_05 | patterns.patternSelectors.usageReport.nextPage | Implemented |
|
|
330
|
+
| SEL_PAT_007_06 | patterns.patternSelectors.usageReport.resultsInfo | Implemented |
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## @test SEL_PAT_008: Pattern Usage Table
|
|
335
|
+
|
|
336
|
+
### Metadata
|
|
337
|
+
- **Priority:** Medium
|
|
338
|
+
- **Type:** Selector Validation
|
|
339
|
+
- **Tags:** patterns, reports, table
|
|
340
|
+
- **Grep:** `@ui-selectors` `@patterns` `@feat-patterns` `@SEL_PAT_008`
|
|
341
|
+
- **Status:** Partial (1 passing, 2 skipped)
|
|
342
|
+
|
|
343
|
+
```gherkin:en
|
|
344
|
+
Scenario: Pattern usage table has all required selectors
|
|
345
|
+
|
|
346
|
+
Given I am logged in as a developer user
|
|
347
|
+
And I navigate to a pattern's usages page
|
|
348
|
+
Then I should find the usage table container (or empty state)
|
|
349
|
+
And I should find usage rows (if pattern has usages)
|
|
350
|
+
And I should find view links in usage rows (if pattern has usages)
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
```gherkin:es
|
|
354
|
+
Scenario: Tabla de usos de patron tiene todos los selectores requeridos
|
|
355
|
+
|
|
356
|
+
Given estoy logueado como usuario developer
|
|
357
|
+
And navego a la pagina de usos de un patron
|
|
358
|
+
Then deberia encontrar el contenedor de tabla de usos (o estado vacio)
|
|
359
|
+
And deberia encontrar filas de uso (si el patron tiene usos)
|
|
360
|
+
And deberia encontrar links de ver en filas de uso (si el patron tiene usos)
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Expected Results
|
|
364
|
+
| Test ID | Selector Path | Status |
|
|
365
|
+
|---------|---------------|--------|
|
|
366
|
+
| SEL_PAT_008_01 | patterns.patternSelectors.usageTable.container/empty | Implemented |
|
|
367
|
+
| SEL_PAT_008_02 | [data-cy^="pattern-usage-row-"] | **Skipped** |
|
|
368
|
+
| SEL_PAT_008_03 | [data-cy^="pattern-usage-view-"] | **Skipped** |
|
|
369
|
+
|
|
370
|
+
### Notes
|
|
371
|
+
- Tests SEL_PAT_008_02 and SEL_PAT_008_03 are skipped because they require the pattern to have actual usages.
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## Related Components
|
|
376
|
+
|
|
377
|
+
| Component | File | Key Selectors |
|
|
378
|
+
|-----------|------|---------------|
|
|
379
|
+
| PatternsListPage | `packages/core/src/app/[locale]/(auth)/dashboard/patterns/page.tsx` | page, title, addBtn, table |
|
|
380
|
+
| PatternEditor | `packages/core/src/components/page-builder/PageBuilder.tsx` | header.*, blockPicker.* |
|
|
381
|
+
| PatternUsagesPage | `packages/core/src/app/[locale]/(auth)/dashboard/patterns/[id]/usages/page.tsx` | usageReport.*, usageStats.* |
|
|
382
|
+
|
|
383
|
+
## Related POMs
|
|
384
|
+
|
|
385
|
+
| POM | File | Usage |
|
|
386
|
+
|-----|------|-------|
|
|
387
|
+
| PatternsPOM | `themes/default/tests/cypress/src/entities/PatternsPOM.ts` | List operations, entity selectors |
|
|
388
|
+
| PageBuilderPOM | `themes/default/tests/cypress/src/features/PageBuilderPOM.ts` | Editor selectors |
|