@nextsparkjs/theme-default 0.1.0-beta.20 → 0.1.0-beta.21
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.config.ts +150 -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,345 @@
|
|
|
1
|
+
# Billing Plans - BDD Test Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
These tests validate the billing system's plan-based features, limits, and quota enforcement.
|
|
6
|
+
Tests are organized by plan to ensure comprehensive coverage of each subscription tier.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Test Files Structure
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
e2e/api/billing/plans/
|
|
14
|
+
├── README.md # This file - BDD documentation
|
|
15
|
+
├── free-plan.cy.ts # Free plan tests
|
|
16
|
+
├── starter-plan.cy.ts # Starter plan tests
|
|
17
|
+
├── pro-plan.cy.ts # Pro plan tests
|
|
18
|
+
├── business-plan.cy.ts # Business plan tests
|
|
19
|
+
├── downgrade-scenarios.cy.ts # Downgrade policy tests
|
|
20
|
+
└── fixtures/
|
|
21
|
+
└── billing-plans.json # Plan configurations for tests
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## BDD Specifications
|
|
27
|
+
|
|
28
|
+
### Feature: Free Plan Restrictions
|
|
29
|
+
|
|
30
|
+
```gherkin
|
|
31
|
+
Feature: Free Plan Restrictions
|
|
32
|
+
As a user with a Free plan
|
|
33
|
+
I want to understand my plan limitations
|
|
34
|
+
So that I can decide if I need to upgrade
|
|
35
|
+
|
|
36
|
+
Background:
|
|
37
|
+
Given I am authenticated as a user with Free plan
|
|
38
|
+
And my team has the Free subscription active
|
|
39
|
+
|
|
40
|
+
# Scenario 1.1: Auto-subscription on team creation
|
|
41
|
+
Scenario: New team gets Free plan automatically
|
|
42
|
+
When I create a new team
|
|
43
|
+
Then the team should have an active Free subscription
|
|
44
|
+
And the plan slug should be "free"
|
|
45
|
+
|
|
46
|
+
# Scenario 1.2: Basic analytics access
|
|
47
|
+
Scenario: User can access basic analytics
|
|
48
|
+
When I check my subscription details
|
|
49
|
+
Then the plan features should include "basic_analytics"
|
|
50
|
+
|
|
51
|
+
# Scenario 1.3: Advanced analytics blocked
|
|
52
|
+
Scenario: User cannot access advanced analytics
|
|
53
|
+
When I check action "analytics.view_advanced"
|
|
54
|
+
Then the action should be denied
|
|
55
|
+
And the reason should be "feature_not_in_plan"
|
|
56
|
+
|
|
57
|
+
# Scenario 1.4: Team members limit
|
|
58
|
+
Scenario: Team members limit of 3 is enforced
|
|
59
|
+
Given my team has 3 members
|
|
60
|
+
When I check action "team.members.invite"
|
|
61
|
+
Then the action should be denied
|
|
62
|
+
And the reason should be "quota_exceeded"
|
|
63
|
+
And the quota current should be 3
|
|
64
|
+
And the quota max should be 3
|
|
65
|
+
|
|
66
|
+
# Scenario 1.5: Tasks limit
|
|
67
|
+
Scenario: Tasks limit of 50 is enforced
|
|
68
|
+
Given my team has 50 tasks
|
|
69
|
+
When I check action "tasks.create"
|
|
70
|
+
Then the action should be denied
|
|
71
|
+
And the reason should be "quota_exceeded"
|
|
72
|
+
|
|
73
|
+
# Scenario 1.6: Customers limit
|
|
74
|
+
Scenario: Customers limit of 25 is enforced
|
|
75
|
+
Given my team has 25 customers
|
|
76
|
+
When I check action "customers.create"
|
|
77
|
+
Then the action should be denied
|
|
78
|
+
And the reason should be "quota_exceeded"
|
|
79
|
+
|
|
80
|
+
# Scenario 1.7: API calls monthly tracking
|
|
81
|
+
Scenario: API calls are tracked monthly
|
|
82
|
+
When I check usage for "api_calls"
|
|
83
|
+
Then the period key should be in format "YYYY-MM"
|
|
84
|
+
And the max should be 1000
|
|
85
|
+
|
|
86
|
+
# Scenario 1.8: Domain features blocked
|
|
87
|
+
Scenario: Domain-specific features are not available
|
|
88
|
+
When I check action "tasks.automate"
|
|
89
|
+
Then the action should be denied
|
|
90
|
+
And the reason should be "feature_not_in_plan"
|
|
91
|
+
|
|
92
|
+
When I check action "customers.bulk_import"
|
|
93
|
+
Then the action should be denied
|
|
94
|
+
|
|
95
|
+
When I check action "tasks.create_recurring"
|
|
96
|
+
Then the action should be denied
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Feature: Starter Plan Features
|
|
100
|
+
|
|
101
|
+
```gherkin
|
|
102
|
+
Feature: Starter Plan Features
|
|
103
|
+
As a user with a Starter plan
|
|
104
|
+
I want to access starter-level features
|
|
105
|
+
So that I can grow my small team
|
|
106
|
+
|
|
107
|
+
Background:
|
|
108
|
+
Given I am authenticated as a user with Starter plan
|
|
109
|
+
And my team has the Starter subscription active
|
|
110
|
+
|
|
111
|
+
Scenario: Starter plan includes advanced analytics
|
|
112
|
+
When I check action "analytics.view_advanced"
|
|
113
|
+
Then the action should be allowed
|
|
114
|
+
|
|
115
|
+
Scenario: Starter plan includes API access
|
|
116
|
+
When I check action "api.generate_key"
|
|
117
|
+
Then the action should be allowed
|
|
118
|
+
|
|
119
|
+
Scenario: Starter plan includes guest access
|
|
120
|
+
When I check action "team.invite_guest"
|
|
121
|
+
Then the action should be allowed
|
|
122
|
+
|
|
123
|
+
Scenario: Starter plan limits - 5 team members
|
|
124
|
+
Given my team has 5 members
|
|
125
|
+
When I check action "team.members.invite"
|
|
126
|
+
Then the action should be denied
|
|
127
|
+
And the quota max should be 5
|
|
128
|
+
|
|
129
|
+
Scenario: Starter plan limits - 200 tasks
|
|
130
|
+
When I check usage for "tasks"
|
|
131
|
+
Then the max should be 200
|
|
132
|
+
|
|
133
|
+
Scenario: Starter plan limits - 100 customers
|
|
134
|
+
When I check usage for "customers"
|
|
135
|
+
Then the max should be 100
|
|
136
|
+
|
|
137
|
+
Scenario: Starter plan does NOT include realtime analytics
|
|
138
|
+
When I check action "analytics.view_realtime"
|
|
139
|
+
Then the action should be denied
|
|
140
|
+
And the reason should be "feature_not_in_plan"
|
|
141
|
+
|
|
142
|
+
Scenario: Starter plan does NOT include task automation
|
|
143
|
+
When I check action "tasks.automate"
|
|
144
|
+
Then the action should be denied
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Feature: Pro Plan Features
|
|
148
|
+
|
|
149
|
+
```gherkin
|
|
150
|
+
Feature: Pro Plan Features
|
|
151
|
+
As a user with a Pro plan
|
|
152
|
+
I want to access professional features
|
|
153
|
+
So that I can scale my growing business
|
|
154
|
+
|
|
155
|
+
Background:
|
|
156
|
+
Given I am authenticated as a user with Pro plan
|
|
157
|
+
And my team has the Pro subscription active
|
|
158
|
+
|
|
159
|
+
Scenario: Pro plan includes realtime analytics
|
|
160
|
+
When I check action "analytics.view_realtime"
|
|
161
|
+
Then the action should be allowed
|
|
162
|
+
|
|
163
|
+
Scenario: Pro plan includes webhooks
|
|
164
|
+
When I check action "webhooks.create"
|
|
165
|
+
Then the action should be allowed
|
|
166
|
+
|
|
167
|
+
Scenario: Pro plan includes custom branding
|
|
168
|
+
When I check action "branding.customize"
|
|
169
|
+
Then the action should be allowed
|
|
170
|
+
|
|
171
|
+
Scenario: Pro plan includes task automation
|
|
172
|
+
When I check action "tasks.automate"
|
|
173
|
+
Then the action should be allowed
|
|
174
|
+
|
|
175
|
+
Scenario: Pro plan includes priority support
|
|
176
|
+
When I check action "support.priority_access"
|
|
177
|
+
Then the action should be allowed
|
|
178
|
+
|
|
179
|
+
Scenario: Pro plan limits - 15 team members
|
|
180
|
+
When I check usage for "team_members"
|
|
181
|
+
Then the max should be 15
|
|
182
|
+
|
|
183
|
+
Scenario: Pro plan limits - 1000 tasks
|
|
184
|
+
When I check usage for "tasks"
|
|
185
|
+
Then the max should be 1000
|
|
186
|
+
|
|
187
|
+
Scenario: Pro plan limits - 500 customers
|
|
188
|
+
When I check usage for "customers"
|
|
189
|
+
Then the max should be 500
|
|
190
|
+
|
|
191
|
+
Scenario: Pro plan limits - 10 webhooks
|
|
192
|
+
When I check usage for "webhooks_count"
|
|
193
|
+
Then the max should be 10
|
|
194
|
+
|
|
195
|
+
Scenario: Pro plan does NOT include SSO
|
|
196
|
+
When I check action "auth.configure_sso"
|
|
197
|
+
Then the action should be denied
|
|
198
|
+
And the reason should be "feature_not_in_plan"
|
|
199
|
+
|
|
200
|
+
Scenario: Pro plan does NOT include customer import
|
|
201
|
+
When I check action "customers.bulk_import"
|
|
202
|
+
Then the action should be denied
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Feature: Business Plan Features
|
|
206
|
+
|
|
207
|
+
```gherkin
|
|
208
|
+
Feature: Business Plan Features
|
|
209
|
+
As a user with a Business plan
|
|
210
|
+
I want to access enterprise-grade features
|
|
211
|
+
So that I can run my large organization
|
|
212
|
+
|
|
213
|
+
Background:
|
|
214
|
+
Given I am authenticated as a user with Business plan
|
|
215
|
+
And my team has the Business subscription active
|
|
216
|
+
|
|
217
|
+
Scenario: Business plan includes SSO
|
|
218
|
+
When I check action "auth.configure_sso"
|
|
219
|
+
Then the action should be allowed
|
|
220
|
+
|
|
221
|
+
Scenario: Business plan includes audit logs
|
|
222
|
+
When I check action "security.view_audit_logs"
|
|
223
|
+
Then the action should be allowed
|
|
224
|
+
|
|
225
|
+
Scenario: Business plan includes customer import
|
|
226
|
+
When I check action "customers.bulk_import"
|
|
227
|
+
Then the action should be allowed
|
|
228
|
+
|
|
229
|
+
Scenario: Business plan includes recurring tasks
|
|
230
|
+
When I check action "tasks.create_recurring"
|
|
231
|
+
Then the action should be allowed
|
|
232
|
+
|
|
233
|
+
Scenario: Business plan limits - 50 team members
|
|
234
|
+
When I check usage for "team_members"
|
|
235
|
+
Then the max should be 50
|
|
236
|
+
|
|
237
|
+
Scenario: Business plan limits - 5000 tasks
|
|
238
|
+
When I check usage for "tasks"
|
|
239
|
+
Then the max should be 5000
|
|
240
|
+
|
|
241
|
+
Scenario: Business plan limits - 2000 customers
|
|
242
|
+
When I check usage for "customers"
|
|
243
|
+
Then the max should be 2000
|
|
244
|
+
|
|
245
|
+
Scenario: Business plan limits - 50 webhooks
|
|
246
|
+
When I check usage for "webhooks_count"
|
|
247
|
+
Then the max should be 50
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Feature: Downgrade Policy (Soft Limits)
|
|
251
|
+
|
|
252
|
+
```gherkin
|
|
253
|
+
Feature: Downgrade Policy - Soft Limits
|
|
254
|
+
As a user downgrading from a higher plan
|
|
255
|
+
I want my existing resources to remain accessible
|
|
256
|
+
So that I don't lose my data
|
|
257
|
+
|
|
258
|
+
Background:
|
|
259
|
+
Given I am authenticated as a team owner
|
|
260
|
+
|
|
261
|
+
Scenario: Downgrade is always allowed
|
|
262
|
+
Given my team has Pro plan with 200 tasks
|
|
263
|
+
When I request downgrade preview to Free plan
|
|
264
|
+
Then the downgrade should be allowed
|
|
265
|
+
And I should see warning about resources exceeding limits
|
|
266
|
+
|
|
267
|
+
Scenario: Existing resources remain accessible after downgrade
|
|
268
|
+
Given my team has Pro plan with 200 tasks
|
|
269
|
+
When I downgrade to Free plan (limit: 50 tasks)
|
|
270
|
+
Then all 200 tasks should still be accessible
|
|
271
|
+
And I should be able to read any task
|
|
272
|
+
|
|
273
|
+
Scenario: New resource creation blocked when over limit
|
|
274
|
+
Given my team was downgraded from Pro to Free
|
|
275
|
+
And my team has 200 tasks (exceeds Free limit of 50)
|
|
276
|
+
When I check action "tasks.create"
|
|
277
|
+
Then the action should be denied
|
|
278
|
+
And the reason should be "quota_exceeded"
|
|
279
|
+
And the quota current should be 200
|
|
280
|
+
And the quota max should be 50
|
|
281
|
+
|
|
282
|
+
Scenario: Creation allowed after reducing resources
|
|
283
|
+
Given my team was downgraded from Pro to Free
|
|
284
|
+
And my team originally had 200 tasks
|
|
285
|
+
When I delete tasks until I have 40 remaining
|
|
286
|
+
And I check action "tasks.create"
|
|
287
|
+
Then the action should be allowed
|
|
288
|
+
And the quota remaining should be 10
|
|
289
|
+
|
|
290
|
+
Scenario: Features are lost immediately on downgrade
|
|
291
|
+
Given my team has Pro plan with task_automation enabled
|
|
292
|
+
When I downgrade to Free plan
|
|
293
|
+
And I check action "tasks.automate"
|
|
294
|
+
Then the action should be denied
|
|
295
|
+
And the reason should be "feature_not_in_plan"
|
|
296
|
+
|
|
297
|
+
Scenario: Team members remain but cannot add more
|
|
298
|
+
Given my team has Pro plan with 8 members
|
|
299
|
+
When I downgrade to Free plan (limit: 3 members)
|
|
300
|
+
Then all 8 members should still be in the team
|
|
301
|
+
But I should not be able to invite new members
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Test Data Requirements
|
|
307
|
+
|
|
308
|
+
### Sample Teams for Testing
|
|
309
|
+
|
|
310
|
+
| Team ID | Plan | Tasks | Customers | Members | Purpose |
|
|
311
|
+
|---------|------|-------|-----------|---------|---------|
|
|
312
|
+
| team-billing-free-001 | free | 49 | 24 | 2 | Test near-limit scenarios |
|
|
313
|
+
| team-billing-free-at-limit | free | 50 | 25 | 3 | Test at-limit blocking |
|
|
314
|
+
| team-billing-starter-001 | starter | 50 | 50 | 3 | Starter plan tests |
|
|
315
|
+
| team-billing-pro-001 | pro | 100 | 100 | 5 | Pro plan tests |
|
|
316
|
+
| team-billing-business-001 | business | 500 | 500 | 10 | Business plan tests |
|
|
317
|
+
| team-billing-downgrade-001 | free | 200 | 80 | 8 | Downgrade scenario (over-limit) |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Selectors Reference
|
|
322
|
+
|
|
323
|
+
| Selector | Description |
|
|
324
|
+
|----------|-------------|
|
|
325
|
+
| `billing-usage-bar` | Usage progress bar |
|
|
326
|
+
| `billing-usage-current` | Current usage value |
|
|
327
|
+
| `billing-usage-max` | Maximum limit value |
|
|
328
|
+
| `billing-plan-badge` | Current plan badge |
|
|
329
|
+
| `billing-upgrade-button` | Upgrade CTA button |
|
|
330
|
+
| `billing-downgrade-warning` | Downgrade warning modal |
|
|
331
|
+
| `billing-quota-exceeded-toast` | Quota exceeded notification |
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Coverage Summary
|
|
336
|
+
|
|
337
|
+
| Plan | Features | Limits | Quota Tests |
|
|
338
|
+
|------|----------|--------|-------------|
|
|
339
|
+
| Free | 4 tests | 6 tests | 3 tests |
|
|
340
|
+
| Starter | 6 tests | 4 tests | 2 tests |
|
|
341
|
+
| Pro | 8 tests | 5 tests | 2 tests |
|
|
342
|
+
| Business | 6 tests | 4 tests | 2 tests |
|
|
343
|
+
| Downgrade | N/A | N/A | 6 tests |
|
|
344
|
+
|
|
345
|
+
**Total: 52 tests across 5 files**
|