@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.
Files changed (220) hide show
  1. package/package.json +1 -1
  2. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  3. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  4. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  5. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  6. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  7. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  8. package/tests/cypress/e2e/_docs/README.md +215 -0
  9. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  11. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  13. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  14. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  15. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  19. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  20. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  21. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  22. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  23. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  24. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  25. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  26. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  27. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  28. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  29. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  30. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  31. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  32. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  33. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  34. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  36. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  38. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  40. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  42. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  43. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  44. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  45. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  46. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  47. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  48. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  49. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  50. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  51. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  52. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  53. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  54. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  55. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  56. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  57. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  58. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  59. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  60. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  61. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  62. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  63. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  64. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  65. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  66. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  67. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  68. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  69. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  70. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  71. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  72. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  78. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  79. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  83. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  85. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  87. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  89. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  95. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  96. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  97. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  99. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  100. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  101. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  102. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  103. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  105. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  106. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  107. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  109. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  110. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  112. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  114. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  118. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  120. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  122. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  126. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  128. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  130. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  132. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  136. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  138. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  140. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  142. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  144. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  146. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  148. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  149. package/tests/cypress/fixtures/blocks.json +218 -0
  150. package/tests/cypress/fixtures/entities.json +78 -0
  151. package/tests/cypress/fixtures/page-builder.json +21 -0
  152. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  153. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  154. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  155. package/tests/cypress/src/components/EntityForm.ts +375 -0
  156. package/tests/cypress/src/components/EntityList.ts +389 -0
  157. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  158. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  159. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  160. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  161. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  162. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  163. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  164. package/tests/cypress/src/components/index.ts +21 -0
  165. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  166. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  167. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  168. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  169. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  170. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  171. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  172. package/tests/cypress/src/controllers/index.js +25 -0
  173. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  174. package/tests/cypress/src/core/BasePOM.ts +86 -0
  175. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  176. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  177. package/tests/cypress/src/core/index.ts +14 -0
  178. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  179. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  180. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  181. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  182. package/tests/cypress/src/entities/index.ts +14 -0
  183. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  184. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  185. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  186. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  187. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  188. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  189. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  190. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  191. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  192. package/tests/cypress/src/features/index.ts +28 -0
  193. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  194. package/tests/cypress/src/index.ts +101 -0
  195. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  196. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  198. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  199. package/tests/cypress/src/pages/index.js +5 -0
  200. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  201. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  202. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  203. package/tests/cypress/src/pages/public/index.js +6 -0
  204. package/tests/cypress/src/selectors.ts +46 -0
  205. package/tests/cypress/src/session-helpers.ts +500 -0
  206. package/tests/cypress/support/doc-commands.ts +260 -0
  207. package/tests/cypress.config.ts +150 -0
  208. package/tests/jest/components/post-header.test.tsx +377 -0
  209. package/tests/jest/config/role-config.test.ts +529 -0
  210. package/tests/jest/jest.config.ts +81 -0
  211. package/tests/jest/langchain/COVERAGE.md +372 -0
  212. package/tests/jest/langchain/guardrails.test.ts +465 -0
  213. package/tests/jest/langchain/streaming.test.ts +367 -0
  214. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  215. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  216. package/tests/jest/langchain/tracer.test.ts +823 -0
  217. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  218. package/tests/jest/validation/categories.test.ts +429 -0
  219. package/tests/jest/validation/posts.test.ts +546 -0
  220. 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**