@nextsparkjs/theme-default 0.1.0-beta.1 → 0.1.0-beta.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/api/ai/chat/stream/route.ts +4 -1
- package/api/ai/orchestrator/route.ts +10 -3
- package/api/ai/single-agent/route.ts +10 -3
- package/api/ai/usage/route.ts +4 -1
- package/blocks/benefits/component.tsx +4 -4
- package/blocks/cta-section/component.tsx +4 -4
- package/blocks/faq-accordion/component.tsx +2 -2
- package/blocks/features-grid/component.tsx +5 -5
- package/blocks/hero/component.tsx +2 -2
- package/blocks/hero/fields.ts +1 -1
- package/blocks/hero-with-form/component.tsx +7 -7
- package/blocks/hero-with-form/fields.ts +1 -1
- package/blocks/jumbotron/component.tsx +7 -7
- package/blocks/jumbotron/fields.ts +1 -1
- package/blocks/logo-cloud/component.tsx +6 -6
- package/blocks/logo-cloud/fields.ts +1 -1
- package/blocks/post-content/component.tsx +2 -2
- package/blocks/pricing-table/component.tsx +5 -5
- package/blocks/split-content/component.tsx +5 -5
- package/blocks/split-content/fields.ts +1 -1
- package/blocks/stats-counter/component.tsx +9 -9
- package/blocks/testimonials/component.tsx +4 -4
- package/blocks/testimonials/fields.ts +1 -1
- package/blocks/text-content/component.tsx +12 -10
- package/blocks/timeline/component.tsx +12 -12
- package/blocks/video-hero/component.tsx +7 -7
- package/blocks/video-hero/fields.ts +1 -1
- package/components/ai-chat/ChatPanel.tsx +7 -7
- package/components/ai-chat/Message.tsx +2 -2
- package/components/ai-chat/MessageInput.tsx +3 -3
- package/components/ai-chat/MessageList.tsx +3 -3
- package/components/ai-chat/TypingIndicator.tsx +2 -2
- package/config/app.config.ts +75 -62
- package/config/dashboard.config.ts +14 -0
- package/config/features.config.ts +10 -0
- package/config/permissions.config.ts +26 -1
- package/docs/{01-overview → public/01-overview}/01-introduction.md +5 -0
- package/docs/{01-overview → public/01-overview}/02-customization.md +5 -0
- package/docs/{02-features → public/02-features}/03-tasks-entity.md +5 -0
- package/docs/{03-ai → public/03-ai}/01-overview.md +5 -0
- package/docs/{03-ai → public/03-ai}/02-customization.md +5 -0
- package/docs/superadmin/01-setup/01-configuration.md +79 -0
- package/docs/superadmin/01-setup/02-deployment.md +82 -0
- package/docs/superadmin/02-management/01-users.md +83 -0
- package/docs/superadmin/03-integrations/01-langchain.md +139 -0
- package/entities/customers/api/docs.md +107 -0
- package/entities/customers/api/presets.ts +80 -0
- package/entities/pages/api/docs.md +114 -0
- package/entities/pages/api/presets.ts +72 -0
- package/entities/posts/api/docs.md +120 -0
- package/entities/posts/api/presets.ts +74 -0
- package/entities/tasks/api/docs.md +126 -0
- package/entities/tasks/api/presets.ts +84 -0
- package/lib/selectors.ts +7 -4
- package/messages/de/admin.json +45 -0
- package/messages/en/admin.json +56 -0
- package/messages/en/navigation.json +2 -1
- package/messages/es/admin.json +56 -0
- package/messages/es/navigation.json +2 -1
- package/messages/fr/admin.json +45 -0
- package/messages/it/admin.json +45 -0
- package/messages/pt/admin.json +45 -0
- package/migrations/090_demo_users_teams.sql +11 -11
- package/migrations/091_greek_teams_billing.sql +15 -15
- package/migrations/093_pages_sample_data.sql +7 -7
- package/migrations/098_patterns_sample_data.sql +234 -0
- package/package.json +8 -3
- package/styles/globals.css +42 -0
- package/templates/(public)/blog/[slug]/page.tsx +1 -1
- package/templates/(public)/page.tsx +1 -1
- package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_utils/docs/README.md +215 -0
- package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
- package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
- package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
- package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
- package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
- package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
- package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
- package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
- package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
- package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
- package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
- package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +87 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +33 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +246 -0
- package/tests/cypress/src/entities/index.ts +16 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +271 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +707 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +518 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress/support/e2e.ts +90 -0
- package/tests/cypress.config.ts +178 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
- package/tests/jest/__mocks__/jose.js +22 -0
- package/tests/jest/__mocks__/next/image.js +15 -0
- package/tests/jest/__mocks__/next-server.js +56 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/jest.config.cjs +154 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +370 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/services/tasks.service.test.ts +707 -0
- package/tests/jest/setup.ts +170 -0
- package/tests/jest/tsconfig.jest.json +6 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +21 -0
- /package/docs/{02-features → public/02-features}/01-components.md +0 -0
- /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Customers Management - Member Role
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [customers, member, permissions, read-only, security]
|
|
5
|
+
grepTags: [uat, feat-customers, role-member, security]
|
|
6
|
+
coverage: 7
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Customers Management - Member Role (View Only - Restricted)
|
|
10
|
+
|
|
11
|
+
> Test suite for Member role customer permissions. Members can only READ customers - they CANNOT create, update, or delete. These tests verify proper UI restrictions for the Member role.
|
|
12
|
+
|
|
13
|
+
## Background
|
|
14
|
+
|
|
15
|
+
```gherkin:en
|
|
16
|
+
Given I am logged in as Member (member@nextspark.dev)
|
|
17
|
+
And I have navigated to the Customers dashboard
|
|
18
|
+
And the customers list has loaded successfully
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```gherkin:es
|
|
22
|
+
Given estoy logueado como Member (member@nextspark.dev)
|
|
23
|
+
And he navegado al dashboard de Clientes
|
|
24
|
+
And la lista de clientes ha cargado exitosamente
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## @test CUST-MEMBER-001: View customer list
|
|
30
|
+
|
|
31
|
+
### Metadata
|
|
32
|
+
- **Priority:** Critical
|
|
33
|
+
- **Type:** Smoke
|
|
34
|
+
- **Tags:** read, list, permissions
|
|
35
|
+
- **Grep:** `@smoke` `@critical`
|
|
36
|
+
|
|
37
|
+
```gherkin:en
|
|
38
|
+
Scenario: Member can view the customers table
|
|
39
|
+
|
|
40
|
+
Given I am logged in as a Member
|
|
41
|
+
When I navigate to the Customers dashboard
|
|
42
|
+
Then the customers page should be visible
|
|
43
|
+
And the customers table should be displayed
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```gherkin:es
|
|
47
|
+
Scenario: Member puede ver la tabla de clientes
|
|
48
|
+
|
|
49
|
+
Given estoy logueado como Member
|
|
50
|
+
When navego al dashboard de Clientes
|
|
51
|
+
Then la pagina de clientes deberia estar visible
|
|
52
|
+
And la tabla de clientes deberia mostrarse
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Expected Results
|
|
56
|
+
- Customers dashboard is accessible to Member role
|
|
57
|
+
- Customers table displays with data
|
|
58
|
+
- Read access is properly granted
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## @test CUST-MEMBER-002: View customer details
|
|
63
|
+
|
|
64
|
+
### Metadata
|
|
65
|
+
- **Priority:** High
|
|
66
|
+
- **Type:** Regression
|
|
67
|
+
- **Tags:** read, details, navigation
|
|
68
|
+
|
|
69
|
+
```gherkin:en
|
|
70
|
+
Scenario: Member can view individual customer details
|
|
71
|
+
|
|
72
|
+
Given I am logged in as a Member
|
|
73
|
+
And there is at least one customer in the list
|
|
74
|
+
When I click on a customer row
|
|
75
|
+
Then I should be navigated to the customer detail page
|
|
76
|
+
And the URL should match /dashboard/customers/{id}
|
|
77
|
+
And the detail header should be visible
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```gherkin:es
|
|
81
|
+
Scenario: Member puede ver detalles de un cliente
|
|
82
|
+
|
|
83
|
+
Given estoy logueado como Member
|
|
84
|
+
And existe al menos un cliente en la lista
|
|
85
|
+
When hago clic en una fila de cliente
|
|
86
|
+
Then deberia ser navegado a la pagina de detalle
|
|
87
|
+
And la URL deberia coincidir con /dashboard/customers/{id}
|
|
88
|
+
And el encabezado de detalle deberia estar visible
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Expected Results
|
|
92
|
+
- Customer rows are clickable for Members
|
|
93
|
+
- Detail page navigation works
|
|
94
|
+
- Customer information is visible
|
|
95
|
+
- Detail header displays correctly
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## @test CUST-MEMBER-003: Edit button is hidden
|
|
100
|
+
|
|
101
|
+
### Metadata
|
|
102
|
+
- **Priority:** High
|
|
103
|
+
- **Type:** Regression
|
|
104
|
+
- **Tags:** update, security, hidden-button
|
|
105
|
+
- **Grep:** `@security`
|
|
106
|
+
|
|
107
|
+
```gherkin:en
|
|
108
|
+
Scenario: Edit button is hidden for Member role
|
|
109
|
+
|
|
110
|
+
Given I am logged in as a Member
|
|
111
|
+
And there is at least one customer in the list
|
|
112
|
+
When I click on a customer row to view details
|
|
113
|
+
Then I should see the customer information
|
|
114
|
+
But I should NOT see an "Edit" button
|
|
115
|
+
And the edit button should not exist in the DOM
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
```gherkin:es
|
|
119
|
+
Scenario: Boton editar oculto para rol Member
|
|
120
|
+
|
|
121
|
+
Given estoy logueado como Member
|
|
122
|
+
And existe al menos un cliente en la lista
|
|
123
|
+
When hago clic en una fila para ver detalles
|
|
124
|
+
Then deberia ver la informacion del cliente
|
|
125
|
+
But NO deberia ver un boton "Editar"
|
|
126
|
+
And el boton editar no deberia existir en el DOM
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Expected Results
|
|
130
|
+
- Customer information is visible
|
|
131
|
+
- Edit button is completely hidden (not just disabled)
|
|
132
|
+
- Edit button does not exist in DOM
|
|
133
|
+
- Security: No way to access edit functionality
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## @test CUST-MEMBER-004: Create button is hidden
|
|
138
|
+
|
|
139
|
+
### Metadata
|
|
140
|
+
- **Priority:** Critical
|
|
141
|
+
- **Type:** Smoke
|
|
142
|
+
- **Tags:** create, security, hidden-button
|
|
143
|
+
- **Grep:** `@smoke` `@critical` `@security`
|
|
144
|
+
|
|
145
|
+
```gherkin:en
|
|
146
|
+
Scenario: Create button is hidden for Member role
|
|
147
|
+
|
|
148
|
+
Given I am logged in as a Member
|
|
149
|
+
When I navigate to the Customers list page
|
|
150
|
+
Then the customers page should be visible
|
|
151
|
+
But I should NOT see an "Add" button
|
|
152
|
+
And the create button should not exist in the DOM
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
```gherkin:es
|
|
156
|
+
Scenario: Boton crear oculto para rol Member
|
|
157
|
+
|
|
158
|
+
Given estoy logueado como Member
|
|
159
|
+
When navego a la pagina de lista de Clientes
|
|
160
|
+
Then la pagina de clientes deberia estar visible
|
|
161
|
+
But NO deberia ver un boton "Agregar"
|
|
162
|
+
And el boton crear no deberia existir en el DOM
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Expected Results
|
|
166
|
+
- Customers list page loads correctly
|
|
167
|
+
- Add/Create button is completely hidden
|
|
168
|
+
- Create button does not exist in DOM
|
|
169
|
+
- Security: No way to access create functionality
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## @test CUST-MEMBER-005: No UI access to create form
|
|
174
|
+
|
|
175
|
+
### Metadata
|
|
176
|
+
- **Priority:** Medium
|
|
177
|
+
- **Type:** Regression
|
|
178
|
+
- **Tags:** create, security, form-access
|
|
179
|
+
|
|
180
|
+
```gherkin:en
|
|
181
|
+
Scenario: Member has no UI access to create form
|
|
182
|
+
|
|
183
|
+
Given I am logged in as a Member
|
|
184
|
+
When I am on the Customers list page
|
|
185
|
+
Then there should be no way to access the create form
|
|
186
|
+
And the "Add" button should not exist
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
```gherkin:es
|
|
190
|
+
Scenario: Member no tiene acceso UI al formulario de creacion
|
|
191
|
+
|
|
192
|
+
Given estoy logueado como Member
|
|
193
|
+
When estoy en la pagina de lista de Clientes
|
|
194
|
+
Then no deberia haber forma de acceder al formulario de creacion
|
|
195
|
+
And el boton "Agregar" no deberia existir
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Expected Results
|
|
199
|
+
- No UI element leads to create form
|
|
200
|
+
- Add button does not exist
|
|
201
|
+
- Create form is inaccessible through UI
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## @test CUST-MEMBER-006: Delete buttons are hidden
|
|
206
|
+
|
|
207
|
+
### Metadata
|
|
208
|
+
- **Priority:** Critical
|
|
209
|
+
- **Type:** Smoke
|
|
210
|
+
- **Tags:** delete, security, hidden-button
|
|
211
|
+
- **Grep:** `@smoke` `@critical` `@security`
|
|
212
|
+
|
|
213
|
+
```gherkin:en
|
|
214
|
+
Scenario: Delete buttons are hidden in list view
|
|
215
|
+
|
|
216
|
+
Given I am logged in as a Member
|
|
217
|
+
When I am on the Customers list page
|
|
218
|
+
Then I should NOT see any delete action buttons
|
|
219
|
+
And no delete buttons should exist in table rows
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```gherkin:es
|
|
223
|
+
Scenario: Botones eliminar ocultos en vista de lista
|
|
224
|
+
|
|
225
|
+
Given estoy logueado como Member
|
|
226
|
+
When estoy en la pagina de lista de Clientes
|
|
227
|
+
Then NO deberia ver ningun boton de accion eliminar
|
|
228
|
+
And no deberian existir botones eliminar en las filas
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Expected Results
|
|
232
|
+
- No delete buttons visible in list view
|
|
233
|
+
- Delete actions do not exist in table rows
|
|
234
|
+
- Security: No way to trigger delete from list
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## @test CUST-MEMBER-007: No delete action in detail view
|
|
239
|
+
|
|
240
|
+
### Metadata
|
|
241
|
+
- **Priority:** High
|
|
242
|
+
- **Type:** Regression
|
|
243
|
+
- **Tags:** delete, security, detail-view
|
|
244
|
+
- **Grep:** `@security`
|
|
245
|
+
|
|
246
|
+
```gherkin:en
|
|
247
|
+
Scenario: Delete button is hidden in detail view
|
|
248
|
+
|
|
249
|
+
Given I am logged in as a Member
|
|
250
|
+
And there is at least one customer in the list
|
|
251
|
+
When I click on a customer row to view details
|
|
252
|
+
Then the detail page should load
|
|
253
|
+
And the detail header should be visible
|
|
254
|
+
But I should NOT see a "Delete" button
|
|
255
|
+
And the delete button should not exist in the DOM
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
```gherkin:es
|
|
259
|
+
Scenario: Boton eliminar oculto en vista de detalle
|
|
260
|
+
|
|
261
|
+
Given estoy logueado como Member
|
|
262
|
+
And existe al menos un cliente en la lista
|
|
263
|
+
When hago clic en una fila para ver detalles
|
|
264
|
+
Then la pagina de detalle deberia cargar
|
|
265
|
+
And el encabezado de detalle deberia estar visible
|
|
266
|
+
But NO deberia ver un boton "Eliminar"
|
|
267
|
+
And el boton eliminar no deberia existir en el DOM
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Expected Results
|
|
271
|
+
- Detail page loads correctly
|
|
272
|
+
- Detail header is visible
|
|
273
|
+
- Delete button is completely hidden
|
|
274
|
+
- Delete button does not exist in DOM
|
|
275
|
+
- Security: No way to trigger delete from detail view
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
import * as allure from 'allure-cypress'
|
|
4
|
+
|
|
5
|
+
import { CustomersPOM } from '../../../../src/entities/CustomersPOM'
|
|
6
|
+
import { loginAsDefaultMember } from '../../../../src/session-helpers'
|
|
7
|
+
|
|
8
|
+
describe('Customers CRUD - Member Role (Restricted: View Only)', {
|
|
9
|
+
tags: ['@uat', '@feat-customers', '@crud', '@role-member', '@regression']
|
|
10
|
+
}, () => {
|
|
11
|
+
const customers = CustomersPOM.create()
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
allure.epic('UAT')
|
|
15
|
+
allure.feature('Customers')
|
|
16
|
+
allure.story('Member Permissions')
|
|
17
|
+
|
|
18
|
+
// Setup API intercepts BEFORE login and navigation
|
|
19
|
+
customers.setupApiIntercepts()
|
|
20
|
+
loginAsDefaultMember()
|
|
21
|
+
customers.visitList()
|
|
22
|
+
customers.api.waitForList()
|
|
23
|
+
customers.waitForList()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
describe('READ - Member CAN view customers', { tags: '@smoke' }, () => {
|
|
27
|
+
it('CUST-MEMBER-001: should view customer list', { tags: '@smoke' }, () => {
|
|
28
|
+
allure.severity('critical')
|
|
29
|
+
|
|
30
|
+
cy.get(customers.selectors.page).should('be.visible')
|
|
31
|
+
customers.assertTableVisible()
|
|
32
|
+
|
|
33
|
+
cy.log('✅ Member can view customer list')
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
it('CUST-MEMBER-002: should view customer details', () => {
|
|
37
|
+
allure.severity('normal')
|
|
38
|
+
|
|
39
|
+
cy.get('body').then($body => {
|
|
40
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
41
|
+
cy.get(customers.selectors.rowGeneric).first().click()
|
|
42
|
+
|
|
43
|
+
// Wait for detail page URL (not using waitForDetail because edit button may not be visible for Member)
|
|
44
|
+
cy.url().should('match', new RegExp(`/dashboard/${customers.entitySlug}/[a-z0-9-]+`))
|
|
45
|
+
cy.get(customers.selectors.viewHeader, { timeout: 15000 }).should('be.visible')
|
|
46
|
+
|
|
47
|
+
cy.log('✅ Member can view customer details')
|
|
48
|
+
} else {
|
|
49
|
+
cy.log('⚠️ No customers available to view')
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
describe('UPDATE - Member CANNOT edit customers', () => {
|
|
56
|
+
it('CUST-MEMBER-003: edit button should be hidden', () => {
|
|
57
|
+
allure.severity('normal')
|
|
58
|
+
|
|
59
|
+
cy.get('body').then($body => {
|
|
60
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
61
|
+
// Navigate to detail page
|
|
62
|
+
cy.get(customers.selectors.rowGeneric).first().click()
|
|
63
|
+
cy.url().should('match', new RegExp(`/dashboard/${customers.entitySlug}/[a-z0-9-]+`))
|
|
64
|
+
cy.get(customers.selectors.viewHeader, { timeout: 15000 }).should('be.visible')
|
|
65
|
+
|
|
66
|
+
// Verify edit button does NOT exist for Member (Members cannot edit customers)
|
|
67
|
+
cy.get(customers.selectors.editButton).should('not.exist')
|
|
68
|
+
|
|
69
|
+
cy.log('✅ Edit button correctly hidden for Member')
|
|
70
|
+
} else {
|
|
71
|
+
cy.log('⚠️ No customers available to check edit button')
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
describe('CREATE - Member CANNOT create customers', () => {
|
|
78
|
+
it('CUST-MEMBER-004: create button should be hidden', { tags: '@smoke' }, () => {
|
|
79
|
+
allure.severity('critical')
|
|
80
|
+
|
|
81
|
+
cy.get(customers.selectors.addButton).should('not.exist')
|
|
82
|
+
cy.log('✅ Create button correctly hidden for Member')
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it('CUST-MEMBER-005: should not access create form via UI', () => {
|
|
86
|
+
allure.severity('normal')
|
|
87
|
+
|
|
88
|
+
cy.get(customers.selectors.addButton).should('not.exist')
|
|
89
|
+
cy.log('✅ No UI access to create form for Member')
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
describe('DELETE - Member CANNOT delete customers', () => {
|
|
94
|
+
it('CUST-MEMBER-006: delete buttons should be hidden', { tags: '@smoke' }, () => {
|
|
95
|
+
allure.severity('critical')
|
|
96
|
+
|
|
97
|
+
// Delete action buttons should not exist for Member
|
|
98
|
+
cy.get(customers.selectors.rowActionDeleteGeneric).should('not.exist')
|
|
99
|
+
cy.log('✅ Delete buttons correctly hidden for Member')
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('CUST-MEMBER-007: should not see delete action in detail view', () => {
|
|
103
|
+
allure.severity('normal')
|
|
104
|
+
|
|
105
|
+
cy.get('body').then($body => {
|
|
106
|
+
if ($body.find(customers.selectors.rowGeneric).length > 0) {
|
|
107
|
+
cy.get(customers.selectors.rowGeneric).first().click()
|
|
108
|
+
|
|
109
|
+
// Wait for detail page (without checking for edit button)
|
|
110
|
+
cy.url().should('match', new RegExp(`/dashboard/${customers.entitySlug}/[a-z0-9-]+`))
|
|
111
|
+
cy.get(customers.selectors.viewHeader, { timeout: 15000 }).should('be.visible')
|
|
112
|
+
|
|
113
|
+
// Delete button should not exist on detail page for Member
|
|
114
|
+
cy.get(customers.selectors.deleteButton).should('not.exist')
|
|
115
|
+
cy.log('✅ No delete action visible in detail view for Member')
|
|
116
|
+
} else {
|
|
117
|
+
cy.log('⚠️ No customers available to check delete action')
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
})
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Customers Management - Owner Role
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [customers, owner, crud, dashboard]
|
|
5
|
+
grepTags: [uat, feat-customers, role-owner]
|
|
6
|
+
coverage: 5
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Customers Management - Owner Role (Full CRUD Access)
|
|
10
|
+
|
|
11
|
+
> Test suite for Owner role managing customers through the dashboard UI. Covers full CRUD operations: create, view, update, and delete customer records.
|
|
12
|
+
|
|
13
|
+
## Background
|
|
14
|
+
|
|
15
|
+
```gherkin:en
|
|
16
|
+
Given I am logged in as Owner (owner@nextspark.dev)
|
|
17
|
+
And I have navigated to the Customers dashboard
|
|
18
|
+
And the customers list has loaded successfully
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```gherkin:es
|
|
22
|
+
Given estoy logueado como Owner (owner@nextspark.dev)
|
|
23
|
+
And he navegado al dashboard de Clientes
|
|
24
|
+
And la lista de clientes ha cargado exitosamente
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## @test CUST-001: Create new customer with all required fields
|
|
30
|
+
|
|
31
|
+
### Metadata
|
|
32
|
+
- **Priority:** Critical
|
|
33
|
+
- **Type:** Smoke
|
|
34
|
+
- **Tags:** create, customer, form
|
|
35
|
+
- **Grep:** `@smoke` `@critical`
|
|
36
|
+
|
|
37
|
+
```gherkin:en
|
|
38
|
+
Scenario: Owner creates a new customer
|
|
39
|
+
|
|
40
|
+
Given I am logged in as an Owner
|
|
41
|
+
And I am on the Customers list page
|
|
42
|
+
When I click the "Add" button
|
|
43
|
+
Then the customer creation form should appear
|
|
44
|
+
|
|
45
|
+
When I fill in the following fields:
|
|
46
|
+
| Field | Value |
|
|
47
|
+
| Name | "Test Customer [timestamp]" |
|
|
48
|
+
| Account | "123456" |
|
|
49
|
+
| Office | "Main Office" |
|
|
50
|
+
And I click the "Save" button
|
|
51
|
+
Then the form should submit successfully
|
|
52
|
+
And I should be redirected to the customers list
|
|
53
|
+
And I should see "Test Customer" in the list
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```gherkin:es
|
|
57
|
+
Scenario: Owner crea un nuevo cliente
|
|
58
|
+
|
|
59
|
+
Given estoy logueado como Owner
|
|
60
|
+
And estoy en la pagina de lista de Clientes
|
|
61
|
+
When hago clic en el boton "Agregar"
|
|
62
|
+
Then deberia aparecer el formulario de creacion
|
|
63
|
+
|
|
64
|
+
When completo los siguientes campos:
|
|
65
|
+
| Campo | Valor |
|
|
66
|
+
| Nombre | "Cliente de Prueba [timestamp]" |
|
|
67
|
+
| Cuenta | "123456" |
|
|
68
|
+
| Oficina | "Oficina Principal" |
|
|
69
|
+
And hago clic en el boton "Guardar"
|
|
70
|
+
Then el formulario deberia enviarse exitosamente
|
|
71
|
+
And deberia ser redirigido a la lista de clientes
|
|
72
|
+
And deberia ver "Cliente de Prueba" en la lista
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Expected Results
|
|
76
|
+
- Add button is visible and clickable
|
|
77
|
+
- Customer creation form displays all required fields
|
|
78
|
+
- Form validation works correctly
|
|
79
|
+
- Customer is created and appears in the list
|
|
80
|
+
- Redirect to customers list after successful creation
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## @test CUST-002: View customer list
|
|
85
|
+
|
|
86
|
+
### Metadata
|
|
87
|
+
- **Priority:** Critical
|
|
88
|
+
- **Type:** Smoke
|
|
89
|
+
- **Tags:** read, list, table
|
|
90
|
+
- **Grep:** `@smoke` `@critical`
|
|
91
|
+
|
|
92
|
+
```gherkin:en
|
|
93
|
+
Scenario: Owner can view the customers table
|
|
94
|
+
|
|
95
|
+
Given I am logged in as an Owner
|
|
96
|
+
When I navigate to the Customers dashboard
|
|
97
|
+
Then the customers page should be visible
|
|
98
|
+
And the customers table should be displayed
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```gherkin:es
|
|
102
|
+
Scenario: Owner puede ver la tabla de clientes
|
|
103
|
+
|
|
104
|
+
Given estoy logueado como Owner
|
|
105
|
+
When navego al dashboard de Clientes
|
|
106
|
+
Then la pagina de clientes deberia estar visible
|
|
107
|
+
And la tabla de clientes deberia mostrarse
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Expected Results
|
|
111
|
+
- Customers dashboard is accessible
|
|
112
|
+
- Customers table displays with data
|
|
113
|
+
- Table shows customer information columns
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## @test CUST-003: View customer details
|
|
118
|
+
|
|
119
|
+
### Metadata
|
|
120
|
+
- **Priority:** High
|
|
121
|
+
- **Type:** Regression
|
|
122
|
+
- **Tags:** read, details, navigation
|
|
123
|
+
|
|
124
|
+
```gherkin:en
|
|
125
|
+
Scenario: Owner can view individual customer details
|
|
126
|
+
|
|
127
|
+
Given I am logged in as an Owner
|
|
128
|
+
And there is at least one customer in the list
|
|
129
|
+
When I click on a customer row
|
|
130
|
+
Then I should be navigated to the customer detail page
|
|
131
|
+
And the URL should match /dashboard/customers/{id}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
```gherkin:es
|
|
135
|
+
Scenario: Owner puede ver detalles de un cliente
|
|
136
|
+
|
|
137
|
+
Given estoy logueado como Owner
|
|
138
|
+
And existe al menos un cliente en la lista
|
|
139
|
+
When hago clic en una fila de cliente
|
|
140
|
+
Then deberia ser navegado a la pagina de detalle
|
|
141
|
+
And la URL deberia coincidir con /dashboard/customers/{id}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Expected Results
|
|
145
|
+
- Customer rows are clickable
|
|
146
|
+
- Navigation to detail page works
|
|
147
|
+
- URL contains customer ID
|
|
148
|
+
- Customer details are displayed
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## @test CUST-004: Edit existing customer
|
|
153
|
+
|
|
154
|
+
### Metadata
|
|
155
|
+
- **Priority:** High
|
|
156
|
+
- **Type:** Regression
|
|
157
|
+
- **Tags:** update, edit, form
|
|
158
|
+
|
|
159
|
+
```gherkin:en
|
|
160
|
+
Scenario: Owner can modify customer information
|
|
161
|
+
|
|
162
|
+
Given I am logged in as an Owner
|
|
163
|
+
And there is at least one customer in the list
|
|
164
|
+
When I click on a customer row to view details
|
|
165
|
+
And I click the "Edit" button
|
|
166
|
+
Then the customer edit form should appear
|
|
167
|
+
And the form should be pre-filled with current data
|
|
168
|
+
|
|
169
|
+
When I change the Name to "Updated Customer [timestamp]"
|
|
170
|
+
And I click the "Save" button
|
|
171
|
+
Then the changes should be saved successfully
|
|
172
|
+
And I should see "Updated Customer" in the list
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```gherkin:es
|
|
176
|
+
Scenario: Owner puede modificar informacion del cliente
|
|
177
|
+
|
|
178
|
+
Given estoy logueado como Owner
|
|
179
|
+
And existe al menos un cliente en la lista
|
|
180
|
+
When hago clic en una fila para ver detalles
|
|
181
|
+
And hago clic en el boton "Editar"
|
|
182
|
+
Then deberia aparecer el formulario de edicion
|
|
183
|
+
And el formulario deberia estar pre-llenado con datos actuales
|
|
184
|
+
|
|
185
|
+
When cambio el Nombre a "Cliente Actualizado [timestamp]"
|
|
186
|
+
And hago clic en el boton "Guardar"
|
|
187
|
+
Then los cambios deberian guardarse exitosamente
|
|
188
|
+
And deberia ver "Cliente Actualizado" en la lista
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Expected Results
|
|
192
|
+
- Edit button is accessible from detail page
|
|
193
|
+
- Edit form pre-fills with existing data
|
|
194
|
+
- Changes can be saved successfully
|
|
195
|
+
- Updated data reflects in the list
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## @test CUST-005: Delete customer
|
|
200
|
+
|
|
201
|
+
### Metadata
|
|
202
|
+
- **Priority:** High
|
|
203
|
+
- **Type:** Regression
|
|
204
|
+
- **Tags:** delete, confirmation, dialog
|
|
205
|
+
|
|
206
|
+
```gherkin:en
|
|
207
|
+
Scenario: Owner can permanently delete a customer
|
|
208
|
+
|
|
209
|
+
Given I am logged in as an Owner
|
|
210
|
+
And I have created a customer called "Delete Test [timestamp]"
|
|
211
|
+
When I click on that customer to view details
|
|
212
|
+
And I click the "Delete" button
|
|
213
|
+
Then a confirmation dialog should appear
|
|
214
|
+
|
|
215
|
+
When I confirm the deletion
|
|
216
|
+
Then a second confirmation dialog should appear
|
|
217
|
+
When I confirm again
|
|
218
|
+
Then the customer should be deleted
|
|
219
|
+
And "Delete Test" should no longer appear in the list
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```gherkin:es
|
|
223
|
+
Scenario: Owner puede eliminar permanentemente un cliente
|
|
224
|
+
|
|
225
|
+
Given estoy logueado como Owner
|
|
226
|
+
And he creado un cliente llamado "Prueba Eliminar [timestamp]"
|
|
227
|
+
When hago clic en ese cliente para ver detalles
|
|
228
|
+
And hago clic en el boton "Eliminar"
|
|
229
|
+
Then deberia aparecer un dialogo de confirmacion
|
|
230
|
+
|
|
231
|
+
When confirmo la eliminacion
|
|
232
|
+
Then deberia aparecer un segundo dialogo de confirmacion
|
|
233
|
+
When confirmo nuevamente
|
|
234
|
+
Then el cliente deberia ser eliminado
|
|
235
|
+
And "Prueba Eliminar" ya no deberia aparecer en la lista
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Expected Results
|
|
239
|
+
- Delete button is accessible from detail page
|
|
240
|
+
- First confirmation dialog appears
|
|
241
|
+
- Second confirmation dialog appears (2-step deletion)
|
|
242
|
+
- Customer is permanently removed
|
|
243
|
+
- Customer no longer appears in the list
|