@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,593 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Tasks Entity UI Selectors Validation
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [selectors, tasks, entities, ui-validation]
|
|
5
|
+
grepTags: [ui-selectors, entities, tasks, entities-list, SEL_TASK_PAGE_001, SEL_TASK_LIST_001, SEL_TASK_LIST_002, SEL_TASK_LIST_003, SEL_TASK_LIST_004, SEL_TASK_LIST_005, SEL_TASK_LIST_006, SEL_TASK_LIST_007, SEL_TASK_HEADER_001, SEL_TASK_DETAIL_001, SEL_TASK_FORM_001]
|
|
6
|
+
coverage: 11
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Tasks Entity UI Selectors Validation
|
|
10
|
+
|
|
11
|
+
> Validates that all entity selectors exist in the DOM. Organized by the 6 first-level keys in ENTITIES_SELECTORS: PAGE, LIST, HEADER, DETAIL, FORM, CHILD.
|
|
12
|
+
|
|
13
|
+
**IMPORTANT:** Uses `TasksPOM` which extends `DashboardEntityPOM`. All dynamic selectors use entity slug `tasks`. Follows ENTITIES_SELECTORS structure from `entities.selectors.ts`.
|
|
14
|
+
|
|
15
|
+
**Login:** Uses Carlos Mendoza (owner) via `loginAsDefaultOwner()` - requires team context for entity API calls.
|
|
16
|
+
|
|
17
|
+
**Structure (matches entities.selectors.ts):**
|
|
18
|
+
1. PAGE - Page-level container
|
|
19
|
+
2. LIST - List view (search, filters, table, pagination, bulk, confirm)
|
|
20
|
+
3. HEADER - Entity detail header (view/edit/create modes)
|
|
21
|
+
4. DETAIL - Detail view container
|
|
22
|
+
5. FORM - Form container, fields, and actions
|
|
23
|
+
6. CHILD - Child entity management (not applicable for tasks)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## @test SEL_TASK_PAGE_001: Page Container
|
|
28
|
+
|
|
29
|
+
### Metadata
|
|
30
|
+
- **Priority:** Medium
|
|
31
|
+
- **Type:** Selector Validation
|
|
32
|
+
- **Tags:** tasks, page, container
|
|
33
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_PAGE_001`
|
|
34
|
+
- **Status:** Skipped (not implemented in EntityList)
|
|
35
|
+
|
|
36
|
+
```gherkin:en
|
|
37
|
+
Scenario: Tasks page has page container selector
|
|
38
|
+
|
|
39
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
40
|
+
And I navigate to /dashboard/tasks
|
|
41
|
+
When the list page loads
|
|
42
|
+
Then I should find the page container element
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```gherkin:es
|
|
46
|
+
Scenario: La pagina de tasks tiene selector de contenedor de pagina
|
|
47
|
+
|
|
48
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
49
|
+
And navego a /dashboard/tasks
|
|
50
|
+
When la pagina de lista carga
|
|
51
|
+
Then deberia encontrar el elemento contenedor de pagina
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Expected Results
|
|
55
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
56
|
+
|---------------|--------------|---------------|--------|
|
|
57
|
+
| entities.page.container | tasks.selectors.page | tasks-page | **NOT IMPLEMENTED** |
|
|
58
|
+
|
|
59
|
+
### Notes
|
|
60
|
+
Page container selector not currently implemented in EntityList component. The page container would wrap the entire entity list view.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## @test SEL_TASK_LIST_001: Search Selectors
|
|
65
|
+
|
|
66
|
+
### Metadata
|
|
67
|
+
- **Priority:** High
|
|
68
|
+
- **Type:** Selector Validation
|
|
69
|
+
- **Tags:** tasks, list, search
|
|
70
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_001`
|
|
71
|
+
- **Status:** Active (1 passing, 2 skipped)
|
|
72
|
+
|
|
73
|
+
```gherkin:en
|
|
74
|
+
Scenario: Tasks list has search selectors
|
|
75
|
+
|
|
76
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
77
|
+
And I navigate to /dashboard/tasks
|
|
78
|
+
When the list page loads
|
|
79
|
+
Then I should find the search input
|
|
80
|
+
And I should find the search container (not implemented)
|
|
81
|
+
And I should find the search clear button (not implemented)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```gherkin:es
|
|
85
|
+
Scenario: La lista de tasks tiene selectores de busqueda
|
|
86
|
+
|
|
87
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
88
|
+
And navego a /dashboard/tasks
|
|
89
|
+
When la pagina de lista carga
|
|
90
|
+
Then deberia encontrar el input de busqueda
|
|
91
|
+
And deberia encontrar el contenedor de busqueda (no implementado)
|
|
92
|
+
And deberia encontrar el boton de limpiar busqueda (no implementado)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Expected Results
|
|
96
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
97
|
+
|---------------|--------------|---------------|--------|
|
|
98
|
+
| entities.list.search.input | tasks.selectors.search | tasks-search-input | Implemented |
|
|
99
|
+
| entities.list.search.container | tasks.selectors.searchContainer | tasks-search | **NOT IMPLEMENTED** |
|
|
100
|
+
| entities.list.search.clear | tasks.selectors.searchClear | tasks-search-clear | **NOT IMPLEMENTED** |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## @test SEL_TASK_LIST_002: Table Structure Selectors
|
|
105
|
+
|
|
106
|
+
### Metadata
|
|
107
|
+
- **Priority:** High
|
|
108
|
+
- **Type:** Selector Validation
|
|
109
|
+
- **Tags:** tasks, list, table
|
|
110
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_002`
|
|
111
|
+
- **Status:** Active (4 passing, 1 skipped)
|
|
112
|
+
|
|
113
|
+
```gherkin:en
|
|
114
|
+
Scenario: Tasks list has table structure selectors
|
|
115
|
+
|
|
116
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
117
|
+
And I navigate to /dashboard/tasks
|
|
118
|
+
When the list page loads
|
|
119
|
+
Then I should find the table container
|
|
120
|
+
And I should find the table element
|
|
121
|
+
And I should find the add button
|
|
122
|
+
And I should find the select all checkbox
|
|
123
|
+
And I should find the selection count (only when items selected)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```gherkin:es
|
|
127
|
+
Scenario: La lista de tasks tiene selectores de estructura de tabla
|
|
128
|
+
|
|
129
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
130
|
+
And navego a /dashboard/tasks
|
|
131
|
+
When la pagina de lista carga
|
|
132
|
+
Then deberia encontrar el contenedor de tabla
|
|
133
|
+
And deberia encontrar el elemento de tabla
|
|
134
|
+
And deberia encontrar el boton de agregar
|
|
135
|
+
And deberia encontrar el checkbox de seleccionar todo
|
|
136
|
+
And deberia encontrar el conteo de seleccion (solo cuando hay items seleccionados)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Expected Results
|
|
140
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
141
|
+
|---------------|--------------|---------------|--------|
|
|
142
|
+
| entities.list.table.container | tasks.selectors.tableContainer | tasks-table-container | Implemented |
|
|
143
|
+
| entities.list.table.element | tasks.selectors.table | tasks-table | Implemented |
|
|
144
|
+
| entities.list.addButton | tasks.selectors.addButton | tasks-add | Implemented |
|
|
145
|
+
| entities.list.table.selectAll | tasks.selectors.selectAll | tasks-select-all | Implemented |
|
|
146
|
+
| entities.list.selectionCount | tasks.selectors.selectionCount | tasks-selection-count | **Only visible when items selected** |
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## @test SEL_TASK_LIST_003: Row Dynamic Selectors
|
|
151
|
+
|
|
152
|
+
### Metadata
|
|
153
|
+
- **Priority:** High
|
|
154
|
+
- **Type:** Selector Validation
|
|
155
|
+
- **Tags:** tasks, list, rows, dynamic
|
|
156
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_003`
|
|
157
|
+
- **Status:** Active (3 passing, 0 skipped)
|
|
158
|
+
|
|
159
|
+
```gherkin:en
|
|
160
|
+
Scenario: Tasks rows have dynamic selectors with ID
|
|
161
|
+
|
|
162
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
163
|
+
And I navigate to /dashboard/tasks
|
|
164
|
+
When the list page loads with at least one task
|
|
165
|
+
Then I should find row elements with rowGeneric pattern
|
|
166
|
+
And I should extract the row ID from data-cy attribute
|
|
167
|
+
And I should find the row element with dynamic selector
|
|
168
|
+
And I should find the row select checkbox with dynamic ID
|
|
169
|
+
And I should find the row menu with dynamic ID
|
|
170
|
+
When I open the row menu
|
|
171
|
+
Then I should find row action selectors (view, edit, delete)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```gherkin:es
|
|
175
|
+
Scenario: Las filas de tasks tienen selectores dinamicos con ID
|
|
176
|
+
|
|
177
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
178
|
+
And navego a /dashboard/tasks
|
|
179
|
+
When la pagina de lista carga con al menos una tarea
|
|
180
|
+
Then deberia encontrar elementos de fila con patron rowGeneric
|
|
181
|
+
And deberia extraer el ID de fila del atributo data-cy
|
|
182
|
+
And deberia encontrar el elemento de fila con selector dinamico
|
|
183
|
+
And deberia encontrar el checkbox de seleccion de fila con ID dinamico
|
|
184
|
+
And deberia encontrar el menu de fila con ID dinamico
|
|
185
|
+
When abro el menu de fila
|
|
186
|
+
Then deberia encontrar selectores de accion de fila (ver, editar, eliminar)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Expected Results
|
|
190
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
191
|
+
|---------------|--------------|---------------|--------|
|
|
192
|
+
| entities.list.table.row (generic) | tasks.selectors.rowGeneric | tasks-row-* | Implemented |
|
|
193
|
+
| entities.list.table.row.element | tasks.selectors.row(id) | tasks-row-{id} | Implemented |
|
|
194
|
+
| entities.list.table.row.checkbox | tasks.selectors.rowSelect(id) | tasks-row-select-{id} | Implemented |
|
|
195
|
+
| entities.list.table.row.menu | tasks.selectors.rowMenu(id) | tasks-row-menu-{id} | Implemented |
|
|
196
|
+
| entities.list.table.row.action | tasks.selectors.rowAction(action, id) | tasks-action-{action}-{id} | Implemented |
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## @test SEL_TASK_LIST_004: Pagination Selectors
|
|
201
|
+
|
|
202
|
+
### Metadata
|
|
203
|
+
- **Priority:** Medium
|
|
204
|
+
- **Type:** Selector Validation
|
|
205
|
+
- **Tags:** tasks, list, pagination
|
|
206
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_004`
|
|
207
|
+
- **Status:** Active (4 passing, 0 skipped)
|
|
208
|
+
|
|
209
|
+
```gherkin:en
|
|
210
|
+
Scenario: Tasks list has pagination selectors
|
|
211
|
+
|
|
212
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
213
|
+
And I navigate to /dashboard/tasks
|
|
214
|
+
When the list page loads
|
|
215
|
+
Then I should find the pagination container
|
|
216
|
+
And I should find the page info
|
|
217
|
+
And I should find the page size selector
|
|
218
|
+
And I should find pagination navigation controls (first, prev, next, last)
|
|
219
|
+
When I open the page size dropdown
|
|
220
|
+
Then I should find page size options (10, 20)
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
```gherkin:es
|
|
224
|
+
Scenario: La lista de tasks tiene selectores de paginacion
|
|
225
|
+
|
|
226
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
227
|
+
And navego a /dashboard/tasks
|
|
228
|
+
When la pagina de lista carga
|
|
229
|
+
Then deberia encontrar el contenedor de paginacion
|
|
230
|
+
And deberia encontrar la info de pagina
|
|
231
|
+
And deberia encontrar el selector de tamano de pagina
|
|
232
|
+
And deberia encontrar controles de navegacion de paginacion (primero, anterior, siguiente, ultimo)
|
|
233
|
+
When abro el dropdown de tamano de pagina
|
|
234
|
+
Then deberia encontrar opciones de tamano de pagina (10, 20)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Expected Results
|
|
238
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
239
|
+
|---------------|--------------|---------------|--------|
|
|
240
|
+
| entities.list.pagination.container | tasks.selectors.pagination | tasks-pagination | Implemented |
|
|
241
|
+
| entities.list.pagination.info | tasks.selectors.pageInfo | tasks-page-info | Implemented |
|
|
242
|
+
| entities.list.pagination.pageSize | tasks.selectors.pageSize | tasks-page-size | Implemented |
|
|
243
|
+
| entities.list.pagination.first | tasks.selectors.pageFirst | tasks-page-first | Implemented |
|
|
244
|
+
| entities.list.pagination.prev | tasks.selectors.pagePrev | tasks-page-prev | Implemented |
|
|
245
|
+
| entities.list.pagination.next | tasks.selectors.pageNext | tasks-page-next | Implemented |
|
|
246
|
+
| entities.list.pagination.last | tasks.selectors.pageLast | tasks-page-last | Implemented |
|
|
247
|
+
| entities.list.pagination.pageSizeOption | tasks.selectors.pageSizeOption(size) | tasks-page-size-{size} | Implemented |
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## @test SEL_TASK_LIST_005: Filter Selectors
|
|
252
|
+
|
|
253
|
+
### Metadata
|
|
254
|
+
- **Priority:** Medium
|
|
255
|
+
- **Type:** Selector Validation
|
|
256
|
+
- **Tags:** tasks, list, filters
|
|
257
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_005`
|
|
258
|
+
- **Status:** Active (4 passing, 1 skipped)
|
|
259
|
+
|
|
260
|
+
```gherkin:en
|
|
261
|
+
Scenario: Tasks list has filter selectors
|
|
262
|
+
|
|
263
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
264
|
+
And I navigate to /dashboard/tasks
|
|
265
|
+
When the list page loads
|
|
266
|
+
Then I should find the status filter trigger
|
|
267
|
+
And I should find the priority filter trigger
|
|
268
|
+
When I open the status filter
|
|
269
|
+
Then I should find the filter content
|
|
270
|
+
And I should find filter options
|
|
271
|
+
And I should find clear all filters button (not implemented)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
```gherkin:es
|
|
275
|
+
Scenario: La lista de tasks tiene selectores de filtro
|
|
276
|
+
|
|
277
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
278
|
+
And navego a /dashboard/tasks
|
|
279
|
+
When la pagina de lista carga
|
|
280
|
+
Then deberia encontrar el trigger del filtro de status
|
|
281
|
+
And deberia encontrar el trigger del filtro de prioridad
|
|
282
|
+
When abro el filtro de status
|
|
283
|
+
Then deberia encontrar el contenido del filtro
|
|
284
|
+
And deberia encontrar opciones de filtro
|
|
285
|
+
And deberia encontrar boton de limpiar todos los filtros (no implementado)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Expected Results
|
|
289
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
290
|
+
|---------------|--------------|---------------|--------|
|
|
291
|
+
| entities.list.filters.trigger | tasks.selectors.filterTrigger(field) | tasks-filter-{field} | Implemented |
|
|
292
|
+
| entities.list.filters.content | tasks.selectors.filterContent(field) | tasks-filter-{field}-content | Implemented |
|
|
293
|
+
| entities.list.filters.option | tasks.selectors.filterOption(field, value) | tasks-filter-{field}-{value} | Implemented |
|
|
294
|
+
| entities.list.filters.clearAll | tasks.selectors.filterClearAll | tasks-filter-clear-all | **NOT IMPLEMENTED** |
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## @test SEL_TASK_LIST_006: Bulk Action Selectors
|
|
299
|
+
|
|
300
|
+
### Metadata
|
|
301
|
+
- **Priority:** Medium
|
|
302
|
+
- **Type:** Selector Validation
|
|
303
|
+
- **Tags:** tasks, list, bulk, actions
|
|
304
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_006`
|
|
305
|
+
- **Status:** Active (2 passing, 1 skipped)
|
|
306
|
+
|
|
307
|
+
```gherkin:en
|
|
308
|
+
Scenario: Bulk action bar appears after selecting rows
|
|
309
|
+
|
|
310
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
311
|
+
And I navigate to /dashboard/tasks
|
|
312
|
+
When I select a row using the row checkbox
|
|
313
|
+
Then the bulk action bar should be visible
|
|
314
|
+
And I should find the bulk count indicator
|
|
315
|
+
And I should find the bulk delete button
|
|
316
|
+
And I should find the bulk clear button
|
|
317
|
+
And I should find the bulk status button (not enabled)
|
|
318
|
+
When I click bulk delete
|
|
319
|
+
Then I should find the bulk delete dialog
|
|
320
|
+
And I should find bulk delete cancel button
|
|
321
|
+
And I should find bulk delete confirm button
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
```gherkin:es
|
|
325
|
+
Scenario: La barra de acciones masivas aparece despues de seleccionar filas
|
|
326
|
+
|
|
327
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
328
|
+
And navego a /dashboard/tasks
|
|
329
|
+
When selecciono una fila usando el checkbox de fila
|
|
330
|
+
Then la barra de acciones masivas deberia ser visible
|
|
331
|
+
And deberia encontrar el indicador de conteo masivo
|
|
332
|
+
And deberia encontrar el boton de eliminar masivo
|
|
333
|
+
And deberia encontrar el boton de limpiar seleccion
|
|
334
|
+
And deberia encontrar el boton de status masivo (no habilitado)
|
|
335
|
+
When hago click en eliminar masivo
|
|
336
|
+
Then deberia encontrar el dialogo de eliminar masivo
|
|
337
|
+
And deberia encontrar el boton de cancelar eliminar masivo
|
|
338
|
+
And deberia encontrar el boton de confirmar eliminar masivo
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Expected Results
|
|
342
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
343
|
+
|---------------|--------------|---------------|--------|
|
|
344
|
+
| entities.list.bulk.bar | tasks.selectors.bulkBar | tasks-bulk-bar | Implemented |
|
|
345
|
+
| entities.list.bulk.count | tasks.selectors.bulkCount | tasks-bulk-count | Implemented |
|
|
346
|
+
| entities.list.bulk.deleteButton | tasks.selectors.bulkDelete | tasks-bulk-delete | Implemented |
|
|
347
|
+
| entities.list.bulk.clearButton | tasks.selectors.bulkClear | tasks-bulk-clear | Implemented |
|
|
348
|
+
| entities.list.bulk.statusButton | tasks.selectors.bulkStatus | tasks-bulk-status | **enableChangeStatus not enabled** |
|
|
349
|
+
| entities.list.bulk.deleteDialog | tasks.selectors.bulkDeleteDialog | tasks-bulk-delete-dialog | Implemented |
|
|
350
|
+
| entities.list.bulk.deleteCancel | tasks.selectors.bulkDeleteCancel | tasks-bulk-delete-cancel | Implemented |
|
|
351
|
+
| entities.list.bulk.deleteConfirm | tasks.selectors.bulkDeleteConfirm | tasks-bulk-delete-confirm | Implemented |
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## @test SEL_TASK_LIST_007: Confirm Dialog Selectors
|
|
356
|
+
|
|
357
|
+
### Metadata
|
|
358
|
+
- **Priority:** Medium
|
|
359
|
+
- **Type:** Selector Validation
|
|
360
|
+
- **Tags:** tasks, list, confirm, dialog
|
|
361
|
+
- **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_007`
|
|
362
|
+
- **Status:** Active (1 passing, 0 skipped)
|
|
363
|
+
|
|
364
|
+
```gherkin:en
|
|
365
|
+
Scenario: Confirm dialog appears for row delete action
|
|
366
|
+
|
|
367
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
368
|
+
And I navigate to /dashboard/tasks
|
|
369
|
+
When I open the row menu for a task
|
|
370
|
+
And I click the delete action
|
|
371
|
+
Then the confirm dialog should be visible
|
|
372
|
+
And I should find the cancel button
|
|
373
|
+
And I should find the confirm action button
|
|
374
|
+
When I click cancel
|
|
375
|
+
Then the dialog should close
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
```gherkin:es
|
|
379
|
+
Scenario: El dialogo de confirmacion aparece para la accion de eliminar fila
|
|
380
|
+
|
|
381
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
382
|
+
And navego a /dashboard/tasks
|
|
383
|
+
When abro el menu de fila para una tarea
|
|
384
|
+
And hago click en la accion de eliminar
|
|
385
|
+
Then el dialogo de confirmacion deberia ser visible
|
|
386
|
+
And deberia encontrar el boton de cancelar
|
|
387
|
+
And deberia encontrar el boton de confirmar accion
|
|
388
|
+
When hago click en cancelar
|
|
389
|
+
Then el dialogo deberia cerrarse
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Expected Results
|
|
393
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
394
|
+
|---------------|--------------|---------------|--------|
|
|
395
|
+
| entities.list.confirm.dialog | tasks.selectors.confirmDialog | tasks-confirm-dialog | Implemented |
|
|
396
|
+
| entities.list.confirm.cancel | tasks.selectors.confirmCancel | tasks-confirm-cancel | Implemented |
|
|
397
|
+
| entities.list.confirm.action | tasks.selectors.confirmAction | tasks-confirm-action | Implemented |
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## @test SEL_TASK_HEADER_001: Header Selectors (all modes)
|
|
402
|
+
|
|
403
|
+
### Metadata
|
|
404
|
+
- **Priority:** High
|
|
405
|
+
- **Type:** Selector Validation
|
|
406
|
+
- **Tags:** tasks, header, modes
|
|
407
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_HEADER_001`
|
|
408
|
+
- **Status:** Active (5 passing, 1 skipped)
|
|
409
|
+
|
|
410
|
+
```gherkin:en
|
|
411
|
+
Scenario: Create mode header has selectors
|
|
412
|
+
|
|
413
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
414
|
+
And I navigate to /dashboard/tasks/new
|
|
415
|
+
When the create form loads
|
|
416
|
+
Then I should find the create header
|
|
417
|
+
And I should find the back button
|
|
418
|
+
And I should find header title (not implemented in create mode)
|
|
419
|
+
|
|
420
|
+
Scenario: View mode header has selectors
|
|
421
|
+
|
|
422
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
423
|
+
And I navigate to a task detail page
|
|
424
|
+
When the detail page loads
|
|
425
|
+
Then I should find the view header
|
|
426
|
+
And I should find the back button
|
|
427
|
+
And I should find the edit button
|
|
428
|
+
And I should find the delete button
|
|
429
|
+
When I click delete
|
|
430
|
+
Then I should find the delete dialog
|
|
431
|
+
And I should find delete confirm button
|
|
432
|
+
And I should find delete cancel button
|
|
433
|
+
|
|
434
|
+
Scenario: Edit mode header has selectors
|
|
435
|
+
|
|
436
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
437
|
+
And I navigate to edit a task
|
|
438
|
+
When the edit form loads
|
|
439
|
+
Then I should find the edit header
|
|
440
|
+
And I should find the back button
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
```gherkin:es
|
|
444
|
+
Scenario: El header de modo crear tiene selectores
|
|
445
|
+
|
|
446
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
447
|
+
And navego a /dashboard/tasks/new
|
|
448
|
+
When el formulario de creacion carga
|
|
449
|
+
Then deberia encontrar el header de crear
|
|
450
|
+
And deberia encontrar el boton de volver
|
|
451
|
+
And deberia encontrar el titulo del header (no implementado en modo crear)
|
|
452
|
+
|
|
453
|
+
Scenario: El header de modo ver tiene selectores
|
|
454
|
+
|
|
455
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
456
|
+
And navego a una pagina de detalle de tarea
|
|
457
|
+
When la pagina de detalle carga
|
|
458
|
+
Then deberia encontrar el header de ver
|
|
459
|
+
And deberia encontrar el boton de volver
|
|
460
|
+
And deberia encontrar el boton de editar
|
|
461
|
+
And deberia encontrar el boton de eliminar
|
|
462
|
+
When hago click en eliminar
|
|
463
|
+
Then deberia encontrar el dialogo de eliminar
|
|
464
|
+
And deberia encontrar el boton de confirmar eliminar
|
|
465
|
+
And deberia encontrar el boton de cancelar eliminar
|
|
466
|
+
|
|
467
|
+
Scenario: El header de modo editar tiene selectores
|
|
468
|
+
|
|
469
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
470
|
+
And navego a editar una tarea
|
|
471
|
+
When el formulario de edicion carga
|
|
472
|
+
Then deberia encontrar el header de editar
|
|
473
|
+
And deberia encontrar el boton de volver
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
### Expected Results
|
|
477
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
478
|
+
|---------------|--------------|---------------|--------|
|
|
479
|
+
| entities.header.container (create) | tasks.selectors.createHeader | tasks-create-header | Implemented |
|
|
480
|
+
| entities.header.container (view) | tasks.selectors.viewHeader | tasks-view-header | Implemented |
|
|
481
|
+
| entities.header.container (edit) | tasks.selectors.editHeader | tasks-edit-header | Implemented |
|
|
482
|
+
| entities.header.backButton | tasks.selectors.backButton | tasks-back | Implemented |
|
|
483
|
+
| entities.header.title | tasks.selectors.title | tasks-header-title | **NOT IMPLEMENTED** |
|
|
484
|
+
| entities.header.editButton | tasks.selectors.editButton | tasks-edit-btn | Implemented |
|
|
485
|
+
| entities.header.deleteButton | tasks.selectors.deleteButton | tasks-delete-btn | Implemented |
|
|
486
|
+
| entities.header.deleteDialog | tasks.selectors.deleteDialog | tasks-delete-dialog | Implemented |
|
|
487
|
+
| entities.header.deleteConfirm | tasks.selectors.deleteConfirm | tasks-delete-confirm | Implemented |
|
|
488
|
+
| entities.header.deleteCancel | tasks.selectors.deleteCancel | tasks-delete-cancel | Implemented |
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## @test SEL_TASK_DETAIL_001: Detail Container
|
|
493
|
+
|
|
494
|
+
### Metadata
|
|
495
|
+
- **Priority:** High
|
|
496
|
+
- **Type:** Selector Validation
|
|
497
|
+
- **Tags:** tasks, detail, container
|
|
498
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_DETAIL_001`
|
|
499
|
+
- **Status:** Active (1 passing, 0 skipped)
|
|
500
|
+
|
|
501
|
+
```gherkin:en
|
|
502
|
+
Scenario: Task detail page has container selector
|
|
503
|
+
|
|
504
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
505
|
+
And I navigate to /dashboard/tasks
|
|
506
|
+
When I get a task ID from the list
|
|
507
|
+
And I navigate to the task detail page
|
|
508
|
+
Then I should find the detail container
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
```gherkin:es
|
|
512
|
+
Scenario: La pagina de detalle de tarea tiene selector de contenedor
|
|
513
|
+
|
|
514
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
515
|
+
And navego a /dashboard/tasks
|
|
516
|
+
When obtengo un ID de tarea de la lista
|
|
517
|
+
And navego a la pagina de detalle de la tarea
|
|
518
|
+
Then deberia encontrar el contenedor de detalle
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
### Expected Results
|
|
522
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
523
|
+
|---------------|--------------|---------------|--------|
|
|
524
|
+
| entities.detail.container | tasks.selectors.detail | tasks-detail | Implemented |
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## @test SEL_TASK_FORM_001: Form Selectors
|
|
529
|
+
|
|
530
|
+
### Metadata
|
|
531
|
+
- **Priority:** High
|
|
532
|
+
- **Type:** Selector Validation
|
|
533
|
+
- **Tags:** tasks, form, fields
|
|
534
|
+
- **Grep:** `@ui-selectors` `@SEL_TASK_FORM_001`
|
|
535
|
+
- **Status:** Active (6 passing, 0 skipped)
|
|
536
|
+
|
|
537
|
+
```gherkin:en
|
|
538
|
+
Scenario: Task form has all required selectors
|
|
539
|
+
|
|
540
|
+
Given I am logged in as owner (Carlos Mendoza)
|
|
541
|
+
And I navigate to /dashboard/tasks/new
|
|
542
|
+
When the create form loads
|
|
543
|
+
Then I should find the form container
|
|
544
|
+
And I should find the submit button
|
|
545
|
+
And I should find the title field
|
|
546
|
+
And I should find the description field
|
|
547
|
+
And I should find the status field
|
|
548
|
+
And I should find the priority field
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
```gherkin:es
|
|
552
|
+
Scenario: El formulario de tarea tiene todos los selectores requeridos
|
|
553
|
+
|
|
554
|
+
Given estoy logueado como owner (Carlos Mendoza)
|
|
555
|
+
And navego a /dashboard/tasks/new
|
|
556
|
+
When el formulario de creacion carga
|
|
557
|
+
Then deberia encontrar el contenedor del formulario
|
|
558
|
+
And deberia encontrar el boton de submit
|
|
559
|
+
And deberia encontrar el campo de titulo
|
|
560
|
+
And deberia encontrar el campo de descripcion
|
|
561
|
+
And deberia encontrar el campo de status
|
|
562
|
+
And deberia encontrar el campo de prioridad
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
### Expected Results
|
|
566
|
+
| Selector Path | POM Accessor | data-cy Value | Status |
|
|
567
|
+
|---------------|--------------|---------------|--------|
|
|
568
|
+
| entities.form.container | tasks.selectors.form | tasks-form | Implemented |
|
|
569
|
+
| entities.form.submitButton | tasks.selectors.submitButton | tasks-form-submit | Implemented |
|
|
570
|
+
| entities.form.field (title) | tasks.selectors.field('title') | tasks-field-title | Implemented |
|
|
571
|
+
| entities.form.field (description) | tasks.selectors.field('description') | tasks-field-description | Implemented |
|
|
572
|
+
| entities.form.field (status) | tasks.selectors.field('status') | tasks-field-status | Implemented |
|
|
573
|
+
| entities.form.field (priority) | tasks.selectors.field('priority') | tasks-field-priority | Implemented |
|
|
574
|
+
|
|
575
|
+
---
|
|
576
|
+
|
|
577
|
+
## Related Components
|
|
578
|
+
|
|
579
|
+
| Component | File | Selectors |
|
|
580
|
+
|-----------|------|-----------|
|
|
581
|
+
| EntityTable | `packages/core/src/components/entities/EntityTable.tsx` | table-container, search, add, pagination, rows |
|
|
582
|
+
| EntityForm | `packages/core/src/components/entities/EntityForm.tsx` | form, submit, fields |
|
|
583
|
+
| EntityDetail | `packages/core/src/components/entities/EntityDetail.tsx` | detail, header, actions |
|
|
584
|
+
| BulkActionsBar | `packages/core/src/components/entities/BulkActionsBar.tsx` | bulk-bar, count, delete, clear |
|
|
585
|
+
| ConfirmDialog | `packages/core/src/components/entities/ConfirmDialog.tsx` | dialog, confirm, cancel |
|
|
586
|
+
| EntityHeader | `packages/core/src/components/entities/EntityHeader.tsx` | header (create/view/edit), back, actions |
|
|
587
|
+
|
|
588
|
+
## Related POMs
|
|
589
|
+
|
|
590
|
+
| POM | File | Usage |
|
|
591
|
+
|-----|------|-------|
|
|
592
|
+
| TasksPOM | `themes/default/tests/cypress/src/entities/TasksPOM.ts` | Entity-specific selectors and methods |
|
|
593
|
+
| DashboardEntityPOM | `themes/default/tests/cypress/src/core/DashboardEntityPOM.ts` | Base entity POM with dynamic selectors |
|