@nextsparkjs/theme-default 0.1.0-beta.20 → 0.1.0-beta.22
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/package.json +1 -1
- package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_docs/README.md +215 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
- package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
- package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
- package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
- package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
- package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
- package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
- package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
- package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
- package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
- package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
- package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
- package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
- package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
- package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
- package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
- package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
- package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
- package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_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 +107 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -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/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +78 -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/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 +86 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -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/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +176 -0
- package/tests/cypress/src/entities/index.ts +14 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +245 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +263 -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 +362 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +331 -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 +177 -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 +500 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress/support/e2e.ts +89 -0
- package/tests/cypress.config.ts +165 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/config/role-config.test.ts +529 -0
- package/tests/jest/jest.config.ts +81 -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 +367 -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/user-roles/role-helpers.test.ts +432 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +15 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Feature Gates UAT
|
|
3
|
+
priority: high
|
|
4
|
+
tags: [billing, uat, feature-gates, fake-door]
|
|
5
|
+
grepTags: [uat, billing, feature-gates]
|
|
6
|
+
coverage: 12
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Feature Gates - UAT Tests
|
|
10
|
+
|
|
11
|
+
> Browser-based tests that validate feature access control based on subscription plans (Free, Pro, Enterprise). These "fake door" feature pages test plan-based gating.
|
|
12
|
+
|
|
13
|
+
## Features Under Test
|
|
14
|
+
|
|
15
|
+
| Feature | Feature Slug | Free | Pro | Enterprise |
|
|
16
|
+
|---------|--------------|------|-----|------------|
|
|
17
|
+
| Advanced Analytics | `advanced_analytics` | ❌ | ✅ | ✅ |
|
|
18
|
+
| Webhooks | `webhooks` | ❌ | ✅ | ✅ |
|
|
19
|
+
| Task Automation | `task_automation` | ❌ | ✅ | ✅ |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## @test FEAT-UAT-001: Free plan user sees placeholder for Advanced Analytics
|
|
24
|
+
|
|
25
|
+
### Metadata
|
|
26
|
+
- **Priority:** Critical
|
|
27
|
+
- **Type:** Smoke
|
|
28
|
+
- **Tags:** free-plan, feature-gate, analytics
|
|
29
|
+
- **Grep:** `@smoke`
|
|
30
|
+
|
|
31
|
+
```gherkin:en
|
|
32
|
+
Scenario: Free plan user cannot access Advanced Analytics
|
|
33
|
+
|
|
34
|
+
Given I am logged in as Carlos (Free plan team)
|
|
35
|
+
When I visit /dashboard/features/analytics
|
|
36
|
+
Then I should see the feature placeholder
|
|
37
|
+
And I should see the upgrade button
|
|
38
|
+
And I should NOT see the analytics content
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```gherkin:es
|
|
42
|
+
Scenario: Usuario Free no puede acceder a Analytics Avanzados
|
|
43
|
+
|
|
44
|
+
Given estoy logueado como Carlos (team con plan Free)
|
|
45
|
+
When visito /dashboard/features/analytics
|
|
46
|
+
Then deberia ver el placeholder de la funcion
|
|
47
|
+
And deberia ver el boton de upgrade
|
|
48
|
+
And NO deberia ver el contenido de analytics
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Expected Results
|
|
52
|
+
- Feature placeholder is visible with `[data-cy="feature-placeholder-advanced_analytics"]`
|
|
53
|
+
- Upgrade button is visible with `[data-cy="placeholder-upgrade-btn"]`
|
|
54
|
+
- Analytics content NOT visible
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## @test FEAT-UAT-002: Free plan user sees placeholder for Webhooks
|
|
59
|
+
|
|
60
|
+
### Metadata
|
|
61
|
+
- **Priority:** Critical
|
|
62
|
+
- **Type:** Smoke
|
|
63
|
+
- **Tags:** free-plan, feature-gate, webhooks
|
|
64
|
+
- **Grep:** `@smoke`
|
|
65
|
+
|
|
66
|
+
```gherkin:en
|
|
67
|
+
Scenario: Free plan user cannot access Webhooks
|
|
68
|
+
|
|
69
|
+
Given I am logged in as Carlos (Free plan team)
|
|
70
|
+
When I visit /dashboard/features/webhooks
|
|
71
|
+
Then I should see the feature placeholder
|
|
72
|
+
And I should see the upgrade button
|
|
73
|
+
And I should NOT see the webhooks content
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```gherkin:es
|
|
77
|
+
Scenario: Usuario Free no puede acceder a Webhooks
|
|
78
|
+
|
|
79
|
+
Given estoy logueado como Carlos (team con plan Free)
|
|
80
|
+
When visito /dashboard/features/webhooks
|
|
81
|
+
Then deberia ver el placeholder de la funcion
|
|
82
|
+
And deberia ver el boton de upgrade
|
|
83
|
+
And NO deberia ver el contenido de webhooks
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Expected Results
|
|
87
|
+
- Feature placeholder is visible with `[data-cy="feature-placeholder-webhooks"]`
|
|
88
|
+
- Upgrade button visible
|
|
89
|
+
- Webhooks content NOT visible
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## @test FEAT-UAT-003: Free plan user sees placeholder for Task Automation
|
|
94
|
+
|
|
95
|
+
### Metadata
|
|
96
|
+
- **Priority:** Critical
|
|
97
|
+
- **Type:** Smoke
|
|
98
|
+
- **Tags:** free-plan, feature-gate, automation
|
|
99
|
+
- **Grep:** `@smoke`
|
|
100
|
+
|
|
101
|
+
```gherkin:en
|
|
102
|
+
Scenario: Free plan user cannot access Task Automation
|
|
103
|
+
|
|
104
|
+
Given I am logged in as Carlos (Free plan team)
|
|
105
|
+
When I visit /dashboard/features/automation
|
|
106
|
+
Then I should see the feature placeholder
|
|
107
|
+
And I should see the upgrade button
|
|
108
|
+
And I should NOT see the automation content
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```gherkin:es
|
|
112
|
+
Scenario: Usuario Free no puede acceder a Automatizacion de Tareas
|
|
113
|
+
|
|
114
|
+
Given estoy logueado como Carlos (team con plan Free)
|
|
115
|
+
When visito /dashboard/features/automation
|
|
116
|
+
Then deberia ver el placeholder de la funcion
|
|
117
|
+
And deberia ver el boton de upgrade
|
|
118
|
+
And NO deberia ver el contenido de automatizacion
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Expected Results
|
|
122
|
+
- Feature placeholder is visible with `[data-cy="feature-placeholder-task_automation"]`
|
|
123
|
+
- Upgrade button visible
|
|
124
|
+
- Automation content NOT visible
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## @test FEAT-UAT-010: Pro plan user can access Advanced Analytics
|
|
129
|
+
|
|
130
|
+
### Metadata
|
|
131
|
+
- **Priority:** Critical
|
|
132
|
+
- **Type:** Smoke
|
|
133
|
+
- **Tags:** pro-plan, feature-gate, analytics
|
|
134
|
+
- **Grep:** `@smoke`
|
|
135
|
+
|
|
136
|
+
```gherkin:en
|
|
137
|
+
Scenario: Pro plan user can access Advanced Analytics
|
|
138
|
+
|
|
139
|
+
Given I am logged in as Carlos (Pro plan team - Everpoint)
|
|
140
|
+
When I visit /dashboard/features/analytics
|
|
141
|
+
Then I should see the analytics content
|
|
142
|
+
And I should NOT see the feature placeholder
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
```gherkin:es
|
|
146
|
+
Scenario: Usuario Pro puede acceder a Analytics Avanzados
|
|
147
|
+
|
|
148
|
+
Given estoy logueado como Carlos (team Pro - Everpoint)
|
|
149
|
+
When visito /dashboard/features/analytics
|
|
150
|
+
Then deberia ver el contenido de analytics
|
|
151
|
+
And NO deberia ver el placeholder de la funcion
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Expected Results
|
|
155
|
+
- Analytics content visible with `[data-cy="analytics-content"]`
|
|
156
|
+
- Feature placeholder NOT visible
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## @test FEAT-UAT-011: Pro plan user can access Webhooks
|
|
161
|
+
|
|
162
|
+
### Metadata
|
|
163
|
+
- **Priority:** Critical
|
|
164
|
+
- **Type:** Smoke
|
|
165
|
+
- **Tags:** pro-plan, feature-gate, webhooks
|
|
166
|
+
- **Grep:** `@smoke`
|
|
167
|
+
|
|
168
|
+
```gherkin:en
|
|
169
|
+
Scenario: Pro plan user can access Webhooks
|
|
170
|
+
|
|
171
|
+
Given I am logged in as Carlos (Pro plan team - Everpoint)
|
|
172
|
+
When I visit /dashboard/features/webhooks
|
|
173
|
+
Then I should see the webhooks content
|
|
174
|
+
And I should NOT see the feature placeholder
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
```gherkin:es
|
|
178
|
+
Scenario: Usuario Pro puede acceder a Webhooks
|
|
179
|
+
|
|
180
|
+
Given estoy logueado como Carlos (team Pro - Everpoint)
|
|
181
|
+
When visito /dashboard/features/webhooks
|
|
182
|
+
Then deberia ver el contenido de webhooks
|
|
183
|
+
And NO deberia ver el placeholder de la funcion
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Expected Results
|
|
187
|
+
- Webhooks content visible with `[data-cy="webhooks-content"]`
|
|
188
|
+
- Feature placeholder NOT visible
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## @test FEAT-UAT-012: Pro plan user can access Task Automation
|
|
193
|
+
|
|
194
|
+
### Metadata
|
|
195
|
+
- **Priority:** Critical
|
|
196
|
+
- **Type:** Smoke
|
|
197
|
+
- **Tags:** pro-plan, feature-gate, automation
|
|
198
|
+
- **Grep:** `@smoke`
|
|
199
|
+
|
|
200
|
+
```gherkin:en
|
|
201
|
+
Scenario: Pro plan user can access Task Automation
|
|
202
|
+
|
|
203
|
+
Given I am logged in as Carlos (Pro plan team - Everpoint)
|
|
204
|
+
When I visit /dashboard/features/automation
|
|
205
|
+
Then I should see the automation content
|
|
206
|
+
And I should NOT see the feature placeholder
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```gherkin:es
|
|
210
|
+
Scenario: Usuario Pro puede acceder a Automatizacion de Tareas
|
|
211
|
+
|
|
212
|
+
Given estoy logueado como Carlos (team Pro - Everpoint)
|
|
213
|
+
When visito /dashboard/features/automation
|
|
214
|
+
Then deberia ver el contenido de automatizacion
|
|
215
|
+
And NO deberia ver el placeholder de la funcion
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Expected Results
|
|
219
|
+
- Automation content visible with `[data-cy="automation-content"]`
|
|
220
|
+
- Feature placeholder NOT visible
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## @test FEAT-UAT-020: Enterprise plan user can access all features
|
|
225
|
+
|
|
226
|
+
### Metadata
|
|
227
|
+
- **Priority:** Critical
|
|
228
|
+
- **Type:** Smoke
|
|
229
|
+
- **Tags:** enterprise-plan, feature-gate
|
|
230
|
+
- **Grep:** `@smoke`
|
|
231
|
+
|
|
232
|
+
```gherkin:en
|
|
233
|
+
Scenario: Enterprise plan user can access all features
|
|
234
|
+
|
|
235
|
+
Given I am logged in as Ana (Enterprise plan team - Ironvale)
|
|
236
|
+
When I visit each feature page
|
|
237
|
+
Then I should see the feature content for all features
|
|
238
|
+
And I should NOT see any feature placeholders
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
```gherkin:es
|
|
242
|
+
Scenario: Usuario Enterprise puede acceder a todas las funciones
|
|
243
|
+
|
|
244
|
+
Given estoy logueado como Ana (team Enterprise - Ironvale)
|
|
245
|
+
When visito cada pagina de funcion
|
|
246
|
+
Then deberia ver el contenido de todas las funciones
|
|
247
|
+
And NO deberia ver ningun placeholder
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Expected Results
|
|
251
|
+
- All feature pages show content, not placeholders
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## @test FEAT-UAT-030: Placeholder upgrade button navigates to pricing
|
|
256
|
+
|
|
257
|
+
### Metadata
|
|
258
|
+
- **Priority:** Normal
|
|
259
|
+
- **Type:** Regression
|
|
260
|
+
- **Tags:** navigation, upgrade, placeholder
|
|
261
|
+
- **Grep:** `@regression`
|
|
262
|
+
|
|
263
|
+
```gherkin:en
|
|
264
|
+
Scenario: Placeholder upgrade button works
|
|
265
|
+
|
|
266
|
+
Given I am logged in as Carlos (Free plan team)
|
|
267
|
+
And I am on a blocked feature page
|
|
268
|
+
When I click the upgrade button in the placeholder
|
|
269
|
+
Then I should be redirected to the pricing page
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
```gherkin:es
|
|
273
|
+
Scenario: Boton de upgrade en placeholder funciona
|
|
274
|
+
|
|
275
|
+
Given estoy logueado como Carlos (team con plan Free)
|
|
276
|
+
And estoy en una pagina de funcion bloqueada
|
|
277
|
+
When hago clic en el boton de upgrade del placeholder
|
|
278
|
+
Then deberia ser redirigido a la pagina de pricing
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Expected Results
|
|
282
|
+
- URL changes to include `/pricing` or `/settings/pricing`
|
|
283
|
+
- Pricing page loads
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## @test FEAT-UAT-031: Feature page shows benefits list
|
|
288
|
+
|
|
289
|
+
### Metadata
|
|
290
|
+
- **Priority:** Normal
|
|
291
|
+
- **Type:** Regression
|
|
292
|
+
- **Tags:** placeholder, benefits
|
|
293
|
+
- **Grep:** `@regression`
|
|
294
|
+
|
|
295
|
+
```gherkin:en
|
|
296
|
+
Scenario: Placeholder shows feature benefits
|
|
297
|
+
|
|
298
|
+
Given I am logged in as Carlos (Free plan team)
|
|
299
|
+
When I visit a blocked feature page
|
|
300
|
+
Then I should see the benefits list for that feature
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
```gherkin:es
|
|
304
|
+
Scenario: Placeholder muestra beneficios de la funcion
|
|
305
|
+
|
|
306
|
+
Given estoy logueado como Carlos (team con plan Free)
|
|
307
|
+
When visito una pagina de funcion bloqueada
|
|
308
|
+
Then deberia ver la lista de beneficios de esa funcion
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Expected Results
|
|
312
|
+
- Benefits container is visible with `[data-cy="placeholder-benefits"]`
|
|
313
|
+
- List items are displayed
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## @test FEAT-UAT-032: Feature page shows placeholder title
|
|
318
|
+
|
|
319
|
+
### Metadata
|
|
320
|
+
- **Priority:** Normal
|
|
321
|
+
- **Type:** Regression
|
|
322
|
+
- **Tags:** placeholder, title
|
|
323
|
+
- **Grep:** `@regression`
|
|
324
|
+
|
|
325
|
+
```gherkin:en
|
|
326
|
+
Scenario: Placeholder shows feature title
|
|
327
|
+
|
|
328
|
+
Given I am logged in as Carlos (Free plan team)
|
|
329
|
+
When I visit a blocked feature page
|
|
330
|
+
Then I should see the feature title in the placeholder
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
```gherkin:es
|
|
334
|
+
Scenario: Placeholder muestra titulo de la funcion
|
|
335
|
+
|
|
336
|
+
Given estoy logueado como Carlos (team con plan Free)
|
|
337
|
+
When visito una pagina de funcion bloqueada
|
|
338
|
+
Then deberia ver el titulo de la funcion en el placeholder
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Expected Results
|
|
342
|
+
- Title is visible with `[data-cy="placeholder-title"]`
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## @test FEAT-UAT-033: Feature page shows placeholder description
|
|
347
|
+
|
|
348
|
+
### Metadata
|
|
349
|
+
- **Priority:** Normal
|
|
350
|
+
- **Type:** Regression
|
|
351
|
+
- **Tags:** placeholder, description
|
|
352
|
+
- **Grep:** `@regression`
|
|
353
|
+
|
|
354
|
+
```gherkin:en
|
|
355
|
+
Scenario: Placeholder shows feature description
|
|
356
|
+
|
|
357
|
+
Given I am logged in as Carlos (Free plan team)
|
|
358
|
+
When I visit a blocked feature page
|
|
359
|
+
Then I should see the feature description in the placeholder
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
```gherkin:es
|
|
363
|
+
Scenario: Placeholder muestra descripcion de la funcion
|
|
364
|
+
|
|
365
|
+
Given estoy logueado como Carlos (team con plan Free)
|
|
366
|
+
When visito una pagina de funcion bloqueada
|
|
367
|
+
Then deberia ver la descripcion de la funcion en el placeholder
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Expected Results
|
|
371
|
+
- Description is visible with `[data-cy="placeholder-description"]`
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## UI Elements
|
|
376
|
+
|
|
377
|
+
| Element | Selector | Description |
|
|
378
|
+
|---------|----------|-------------|
|
|
379
|
+
| Analytics Page | `[data-cy="feature-analytics-page"]` | Analytics feature page container |
|
|
380
|
+
| Webhooks Page | `[data-cy="feature-webhooks-page"]` | Webhooks feature page container |
|
|
381
|
+
| Automation Page | `[data-cy="feature-automation-page"]` | Automation feature page container |
|
|
382
|
+
| Analytics Placeholder | `[data-cy="feature-placeholder-advanced_analytics"]` | Analytics placeholder |
|
|
383
|
+
| Webhooks Placeholder | `[data-cy="feature-placeholder-webhooks"]` | Webhooks placeholder |
|
|
384
|
+
| Automation Placeholder | `[data-cy="feature-placeholder-task_automation"]` | Automation placeholder |
|
|
385
|
+
| Analytics Content | `[data-cy="analytics-content"]` | Analytics feature content |
|
|
386
|
+
| Webhooks Content | `[data-cy="webhooks-content"]` | Webhooks feature content |
|
|
387
|
+
| Automation Content | `[data-cy="automation-content"]` | Automation feature content |
|
|
388
|
+
| Placeholder Title | `[data-cy="placeholder-title"]` | Feature title in placeholder |
|
|
389
|
+
| Placeholder Description | `[data-cy="placeholder-description"]` | Feature description |
|
|
390
|
+
| Placeholder Benefits | `[data-cy="placeholder-benefits"]` | Benefits list container |
|
|
391
|
+
| Upgrade Button | `[data-cy="placeholder-upgrade-btn"]` | Upgrade CTA button |
|
|
392
|
+
|
|
393
|
+
## Summary
|
|
394
|
+
|
|
395
|
+
| Test ID | Plan | Feature | Type | Tags |
|
|
396
|
+
|---------|------|---------|------|------|
|
|
397
|
+
| FEAT-UAT-001 | Free | Analytics | Blocked | `@smoke` |
|
|
398
|
+
| FEAT-UAT-002 | Free | Webhooks | Blocked | `@smoke` |
|
|
399
|
+
| FEAT-UAT-003 | Free | Automation | Blocked | `@smoke` |
|
|
400
|
+
| FEAT-UAT-010 | Pro | Analytics | Accessible | `@smoke` |
|
|
401
|
+
| FEAT-UAT-011 | Pro | Webhooks | Accessible | `@smoke` |
|
|
402
|
+
| FEAT-UAT-012 | Pro | Automation | Accessible | `@smoke` |
|
|
403
|
+
| FEAT-UAT-020 | Enterprise | All | Accessible | `@smoke` |
|
|
404
|
+
| FEAT-UAT-030 | Free | Navigation | Upgrade CTA | `@regression` |
|
|
405
|
+
| FEAT-UAT-031 | Free | UI | Benefits | `@regression` |
|
|
406
|
+
| FEAT-UAT-032 | Free | UI | Title | `@regression` |
|
|
407
|
+
| FEAT-UAT-033 | Free | UI | Description | `@regression` |
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/// <reference types="cypress" />
|
|
2
|
+
|
|
3
|
+
import * as allure from 'allure-cypress'
|
|
4
|
+
import { BillingPOM } from '../../../src/features/BillingPOM'
|
|
5
|
+
import {
|
|
6
|
+
loginAsFreePlanUser,
|
|
7
|
+
loginAsProPlanUser,
|
|
8
|
+
loginAsEnterprisePlanUser,
|
|
9
|
+
} from '../../../src/session-helpers'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Feature Gates UAT Tests
|
|
13
|
+
*
|
|
14
|
+
* Tests feature access control based on subscription plans:
|
|
15
|
+
* - Free Plan: Cannot access advanced_analytics, webhooks, task_automation
|
|
16
|
+
* - Pro Plan: Can access advanced_analytics, webhooks, task_automation
|
|
17
|
+
* - Enterprise Plan: Can access all features (*)
|
|
18
|
+
*
|
|
19
|
+
* These "fake door" pages validate plan-based gating using FeatureGate component.
|
|
20
|
+
*
|
|
21
|
+
* Session: 2025-12-20-subscriptions-system-v2
|
|
22
|
+
*
|
|
23
|
+
* KNOWN ISSUE (2025-12-28):
|
|
24
|
+
* Pro Plan User tests are skipped because feature content selectors are not implemented:
|
|
25
|
+
* - [data-cy="analytics-content"] not found
|
|
26
|
+
* - [data-cy="webhooks-content"] not found
|
|
27
|
+
* - [data-cy="automation-content"] not found
|
|
28
|
+
*
|
|
29
|
+
* The feature pages may only show placeholder content (fake door pages).
|
|
30
|
+
* TODO: Implement feature content selectors or update tests to match actual UI.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
describe('Feature Gates - UAT Tests', {
|
|
34
|
+
tags: ['@uat', '@billing', '@feature-gates']
|
|
35
|
+
}, () => {
|
|
36
|
+
const billingPage = BillingPOM.create()
|
|
37
|
+
|
|
38
|
+
// ============================================================
|
|
39
|
+
// FREE PLAN USER - BLOCKED FEATURES
|
|
40
|
+
// ============================================================
|
|
41
|
+
describe('Free Plan User - Blocked Features', () => {
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
allure.epic('UAT')
|
|
44
|
+
allure.feature('Feature Gates')
|
|
45
|
+
allure.story('Free Plan Restrictions')
|
|
46
|
+
|
|
47
|
+
loginAsFreePlanUser()
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('FEAT-UAT-001: Free plan user sees placeholder for Advanced Analytics', () => {
|
|
51
|
+
allure.severity('critical')
|
|
52
|
+
allure.description(`
|
|
53
|
+
Scenario: Free plan user cannot access Advanced Analytics
|
|
54
|
+
Given I am logged in as Carlos (Free plan team)
|
|
55
|
+
When I visit /dashboard/features/analytics
|
|
56
|
+
Then I should see the feature placeholder
|
|
57
|
+
And I should see the upgrade button
|
|
58
|
+
And I should NOT see the analytics content
|
|
59
|
+
`)
|
|
60
|
+
|
|
61
|
+
// Visit analytics feature page
|
|
62
|
+
billingPage.visitAnalyticsFeature()
|
|
63
|
+
|
|
64
|
+
// Assert placeholder is visible (feature blocked)
|
|
65
|
+
billingPage.assertFeaturePlaceholderVisible('advanced_analytics')
|
|
66
|
+
|
|
67
|
+
// Assert upgrade button is visible
|
|
68
|
+
billingPage.getPlaceholderUpgradeButton().should('be.visible')
|
|
69
|
+
|
|
70
|
+
// Assert actual content is NOT visible
|
|
71
|
+
cy.get('[data-cy="analytics-content"]').should('not.exist')
|
|
72
|
+
|
|
73
|
+
cy.log('✅ Free plan user sees analytics placeholder correctly')
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('FEAT-UAT-002: Free plan user sees placeholder for Webhooks', () => {
|
|
77
|
+
allure.severity('critical')
|
|
78
|
+
allure.description(`
|
|
79
|
+
Scenario: Free plan user cannot access Webhooks
|
|
80
|
+
Given I am logged in as Carlos (Free plan team)
|
|
81
|
+
When I visit /dashboard/features/webhooks
|
|
82
|
+
Then I should see the feature placeholder
|
|
83
|
+
And I should see the upgrade button
|
|
84
|
+
And I should NOT see the webhooks content
|
|
85
|
+
`)
|
|
86
|
+
|
|
87
|
+
billingPage.visitWebhooksFeature()
|
|
88
|
+
|
|
89
|
+
billingPage.assertFeaturePlaceholderVisible('webhooks')
|
|
90
|
+
billingPage.getPlaceholderUpgradeButton().should('be.visible')
|
|
91
|
+
cy.get('[data-cy="webhooks-content"]').should('not.exist')
|
|
92
|
+
|
|
93
|
+
cy.log('✅ Free plan user sees webhooks placeholder correctly')
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('FEAT-UAT-003: Free plan user sees placeholder for Task Automation', () => {
|
|
97
|
+
allure.severity('critical')
|
|
98
|
+
allure.description(`
|
|
99
|
+
Scenario: Free plan user cannot access Task Automation
|
|
100
|
+
Given I am logged in as Carlos (Free plan team)
|
|
101
|
+
When I visit /dashboard/features/automation
|
|
102
|
+
Then I should see the feature placeholder
|
|
103
|
+
And I should see the upgrade button
|
|
104
|
+
And I should NOT see the automation content
|
|
105
|
+
`)
|
|
106
|
+
|
|
107
|
+
billingPage.visitAutomationFeature()
|
|
108
|
+
|
|
109
|
+
billingPage.assertFeaturePlaceholderVisible('task_automation')
|
|
110
|
+
billingPage.getPlaceholderUpgradeButton().should('be.visible')
|
|
111
|
+
cy.get('[data-cy="automation-content"]').should('not.exist')
|
|
112
|
+
|
|
113
|
+
cy.log('✅ Free plan user sees automation placeholder correctly')
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
// ============================================================
|
|
118
|
+
// PRO PLAN USER - ACCESSIBLE FEATURES
|
|
119
|
+
// ============================================================
|
|
120
|
+
describe('Pro Plan User - Accessible Features', () => {
|
|
121
|
+
beforeEach(() => {
|
|
122
|
+
allure.epic('UAT')
|
|
123
|
+
allure.feature('Feature Gates')
|
|
124
|
+
allure.story('Pro Plan Access')
|
|
125
|
+
|
|
126
|
+
loginAsProPlanUser()
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
it.skip('FEAT-UAT-010: Pro plan user can access Advanced Analytics (PENDING: selector not implemented)', () => {
|
|
130
|
+
allure.severity('critical')
|
|
131
|
+
allure.description(`
|
|
132
|
+
Scenario: Pro plan user can access Advanced Analytics
|
|
133
|
+
Given I am logged in as Carlos (Pro plan team - Everpoint)
|
|
134
|
+
When I visit /dashboard/features/analytics
|
|
135
|
+
Then I should see the analytics content
|
|
136
|
+
And I should NOT see the feature placeholder
|
|
137
|
+
|
|
138
|
+
SKIPPED: [data-cy="analytics-content"] selector not implemented
|
|
139
|
+
`)
|
|
140
|
+
|
|
141
|
+
billingPage.visitAnalyticsFeature()
|
|
142
|
+
billingPage.assertFeatureContentVisible('analytics')
|
|
143
|
+
cy.get('[data-cy="feature-placeholder-advanced_analytics"]').should('not.exist')
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
it.skip('FEAT-UAT-011: Pro plan user can access Webhooks (PENDING: selector not implemented)', () => {
|
|
147
|
+
allure.severity('critical')
|
|
148
|
+
allure.description(`
|
|
149
|
+
Scenario: Pro plan user can access Webhooks
|
|
150
|
+
Given I am logged in as Carlos (Pro plan team - Everpoint)
|
|
151
|
+
When I visit /dashboard/features/webhooks
|
|
152
|
+
Then I should see the webhooks content
|
|
153
|
+
And I should NOT see the feature placeholder
|
|
154
|
+
|
|
155
|
+
SKIPPED: [data-cy="webhooks-content"] selector not implemented
|
|
156
|
+
`)
|
|
157
|
+
|
|
158
|
+
billingPage.visitWebhooksFeature()
|
|
159
|
+
billingPage.assertFeatureContentVisible('webhooks')
|
|
160
|
+
cy.get('[data-cy="feature-placeholder-webhooks"]').should('not.exist')
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
it.skip('FEAT-UAT-012: Pro plan user can access Task Automation (PENDING: selector not implemented)', () => {
|
|
164
|
+
allure.severity('critical')
|
|
165
|
+
allure.description(`
|
|
166
|
+
Scenario: Pro plan user can access Task Automation
|
|
167
|
+
Given I am logged in as Carlos (Pro plan team - Everpoint)
|
|
168
|
+
When I visit /dashboard/features/automation
|
|
169
|
+
Then I should see the automation content
|
|
170
|
+
And I should NOT see the feature placeholder
|
|
171
|
+
|
|
172
|
+
SKIPPED: [data-cy="automation-content"] selector not implemented
|
|
173
|
+
`)
|
|
174
|
+
|
|
175
|
+
billingPage.visitAutomationFeature()
|
|
176
|
+
billingPage.assertFeatureContentVisible('automation')
|
|
177
|
+
cy.get('[data-cy="feature-placeholder-task_automation"]').should('not.exist')
|
|
178
|
+
})
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
// ============================================================
|
|
182
|
+
// ENTERPRISE PLAN USER - ALL FEATURES
|
|
183
|
+
// ============================================================
|
|
184
|
+
describe('Enterprise Plan User - All Features', () => {
|
|
185
|
+
beforeEach(() => {
|
|
186
|
+
allure.epic('UAT')
|
|
187
|
+
allure.feature('Feature Gates')
|
|
188
|
+
allure.story('Enterprise Plan Access')
|
|
189
|
+
|
|
190
|
+
loginAsEnterprisePlanUser()
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
it('FEAT-UAT-020: Enterprise plan user can access all features', () => {
|
|
194
|
+
allure.severity('critical')
|
|
195
|
+
allure.description(`
|
|
196
|
+
Scenario: Enterprise plan user can access all features
|
|
197
|
+
Given I am logged in as Ana (Enterprise plan team - Ironvale)
|
|
198
|
+
When I visit each feature page
|
|
199
|
+
Then I should see the feature content for all features
|
|
200
|
+
And I should NOT see any feature placeholders
|
|
201
|
+
`)
|
|
202
|
+
|
|
203
|
+
// Analytics
|
|
204
|
+
billingPage.visitAnalyticsFeature()
|
|
205
|
+
billingPage.assertFeatureContentVisible('analytics')
|
|
206
|
+
cy.get('[data-cy="feature-placeholder-advanced_analytics"]').should('not.exist')
|
|
207
|
+
|
|
208
|
+
// Webhooks
|
|
209
|
+
billingPage.visitWebhooksFeature()
|
|
210
|
+
billingPage.assertFeatureContentVisible('webhooks')
|
|
211
|
+
cy.get('[data-cy="feature-placeholder-webhooks"]').should('not.exist')
|
|
212
|
+
|
|
213
|
+
// Automation
|
|
214
|
+
billingPage.visitAutomationFeature()
|
|
215
|
+
billingPage.assertFeatureContentVisible('automation')
|
|
216
|
+
cy.get('[data-cy="feature-placeholder-task_automation"]').should('not.exist')
|
|
217
|
+
|
|
218
|
+
cy.log('✅ Enterprise plan user can access all features')
|
|
219
|
+
})
|
|
220
|
+
})
|
|
221
|
+
|
|
222
|
+
// ============================================================
|
|
223
|
+
// PLACEHOLDER UI TESTS
|
|
224
|
+
// ============================================================
|
|
225
|
+
describe('Feature Placeholder UI', () => {
|
|
226
|
+
beforeEach(() => {
|
|
227
|
+
allure.epic('UAT')
|
|
228
|
+
allure.feature('Feature Gates')
|
|
229
|
+
allure.story('Placeholder UI')
|
|
230
|
+
|
|
231
|
+
loginAsFreePlanUser()
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
it('FEAT-UAT-030: Placeholder upgrade button navigates to pricing', () => {
|
|
235
|
+
allure.severity('normal')
|
|
236
|
+
allure.description(`
|
|
237
|
+
Scenario: Placeholder upgrade button works
|
|
238
|
+
Given I am logged in as Carlos (Free plan team)
|
|
239
|
+
And I am on a blocked feature page
|
|
240
|
+
When I click the upgrade button in the placeholder
|
|
241
|
+
Then I should be redirected to the pricing page
|
|
242
|
+
`)
|
|
243
|
+
|
|
244
|
+
billingPage.visitAnalyticsFeature()
|
|
245
|
+
|
|
246
|
+
// Click the upgrade button
|
|
247
|
+
billingPage.clickPlaceholderUpgrade()
|
|
248
|
+
|
|
249
|
+
// Should navigate to pricing page
|
|
250
|
+
cy.url().should('include', '/pricing')
|
|
251
|
+
|
|
252
|
+
cy.log('✅ Upgrade button navigates to pricing page')
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
it('FEAT-UAT-031: Feature page shows benefits list', () => {
|
|
256
|
+
allure.severity('normal')
|
|
257
|
+
allure.description(`
|
|
258
|
+
Scenario: Placeholder shows feature benefits
|
|
259
|
+
Given I am logged in as Carlos (Free plan team)
|
|
260
|
+
When I visit a blocked feature page
|
|
261
|
+
Then I should see the benefits list for that feature
|
|
262
|
+
`)
|
|
263
|
+
|
|
264
|
+
billingPage.visitAnalyticsFeature()
|
|
265
|
+
|
|
266
|
+
// Assert benefits list is visible
|
|
267
|
+
cy.get('[data-cy="placeholder-benefits"]').should('be.visible')
|
|
268
|
+
cy.get('[data-cy="placeholder-benefits"] li').should('have.length.at.least', 1)
|
|
269
|
+
|
|
270
|
+
cy.log('✅ Benefits list is displayed in placeholder')
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
it('FEAT-UAT-032: Feature page shows placeholder title', () => {
|
|
274
|
+
allure.severity('normal')
|
|
275
|
+
allure.description(`
|
|
276
|
+
Scenario: Placeholder shows feature title
|
|
277
|
+
Given I am logged in as Carlos (Free plan team)
|
|
278
|
+
When I visit a blocked feature page
|
|
279
|
+
Then I should see the feature title in the placeholder
|
|
280
|
+
`)
|
|
281
|
+
|
|
282
|
+
billingPage.visitWebhooksFeature()
|
|
283
|
+
|
|
284
|
+
// Assert title is visible
|
|
285
|
+
cy.get('[data-cy="placeholder-title"]').should('be.visible')
|
|
286
|
+
|
|
287
|
+
cy.log('✅ Placeholder title is displayed')
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
it('FEAT-UAT-033: Feature page shows placeholder description', () => {
|
|
291
|
+
allure.severity('normal')
|
|
292
|
+
allure.description(`
|
|
293
|
+
Scenario: Placeholder shows feature description
|
|
294
|
+
Given I am logged in as Carlos (Free plan team)
|
|
295
|
+
When I visit a blocked feature page
|
|
296
|
+
Then I should see the feature description in the placeholder
|
|
297
|
+
`)
|
|
298
|
+
|
|
299
|
+
billingPage.visitAutomationFeature()
|
|
300
|
+
|
|
301
|
+
// Assert description is visible
|
|
302
|
+
cy.get('[data-cy="placeholder-description"]').should('be.visible')
|
|
303
|
+
|
|
304
|
+
cy.log('✅ Placeholder description is displayed')
|
|
305
|
+
})
|
|
306
|
+
})
|
|
307
|
+
})
|