@nextsparkjs/theme-default 0.1.0-beta.2 → 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 (222) hide show
  1. package/package.json +8 -4
  2. package/templates/(public)/page.tsx +1 -1
  3. package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
  4. package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
  5. package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
  6. package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
  7. package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
  8. package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
  9. package/tests/cypress/e2e/_docs/README.md +215 -0
  10. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
  11. package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
  12. package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
  13. package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
  14. package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
  15. package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
  16. package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
  17. package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
  18. package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
  19. package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
  20. package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
  21. package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
  22. package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
  23. package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
  24. package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
  25. package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
  26. package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
  27. package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
  28. package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
  29. package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
  30. package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
  31. package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
  32. package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
  33. package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
  34. package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
  35. package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
  36. package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
  37. package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
  38. package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
  39. package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
  40. package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
  41. package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
  42. package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
  43. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  44. package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
  45. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  46. package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
  47. package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
  48. package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
  49. package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
  50. package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
  51. package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
  52. package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
  53. package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
  54. package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
  55. package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
  56. package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
  57. package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
  58. package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
  59. package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
  60. package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
  61. package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
  62. package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
  63. package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
  64. package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
  65. package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
  66. package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
  67. package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
  68. package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
  69. package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
  70. package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
  71. package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
  72. package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
  73. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
  74. package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
  75. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  76. package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  77. package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
  78. package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
  79. package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
  80. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
  81. package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
  82. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
  83. package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
  84. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
  85. package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
  86. package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
  87. package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
  88. package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
  89. package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
  90. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
  91. package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
  92. package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
  93. package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
  94. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
  95. package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
  96. package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
  97. package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
  98. package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
  99. package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
  100. package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
  101. package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
  102. package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
  103. package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
  104. package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
  105. package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
  106. package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
  107. package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
  108. package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
  109. package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
  110. package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
  111. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  112. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  113. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  114. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  115. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  116. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  117. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  118. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  119. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  120. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  121. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  122. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  123. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  124. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  125. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  126. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  127. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  128. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  129. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  130. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  131. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  132. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  133. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  134. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  135. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  136. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  137. package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
  138. package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
  139. package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
  140. package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
  141. package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
  142. package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
  143. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
  144. package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
  145. package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
  146. package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
  147. package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
  148. package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
  149. package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
  150. package/tests/cypress/fixtures/blocks.json +218 -0
  151. package/tests/cypress/fixtures/entities.json +78 -0
  152. package/tests/cypress/fixtures/page-builder.json +21 -0
  153. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  154. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  155. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  156. package/tests/cypress/src/components/EntityForm.ts +375 -0
  157. package/tests/cypress/src/components/EntityList.ts +389 -0
  158. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  159. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  160. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  161. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  162. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  163. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  164. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  165. package/tests/cypress/src/components/index.ts +21 -0
  166. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  167. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  168. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  169. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  170. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  171. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  172. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  173. package/tests/cypress/src/controllers/index.js +25 -0
  174. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  175. package/tests/cypress/src/core/BasePOM.ts +86 -0
  176. package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
  177. package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
  178. package/tests/cypress/src/core/index.ts +14 -0
  179. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  180. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  181. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  182. package/tests/cypress/src/entities/TasksPOM.ts +176 -0
  183. package/tests/cypress/src/entities/index.ts +14 -0
  184. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  185. package/tests/cypress/src/features/DashboardPOM.ts +245 -0
  186. package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
  187. package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
  188. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  189. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  190. package/tests/cypress/src/features/SettingsPOM.ts +362 -0
  191. package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
  192. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  193. package/tests/cypress/src/features/index.ts +28 -0
  194. package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
  195. package/tests/cypress/src/index.ts +101 -0
  196. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  197. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  198. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  199. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  200. package/tests/cypress/src/pages/index.js +5 -0
  201. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  202. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  203. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  204. package/tests/cypress/src/pages/public/index.js +6 -0
  205. package/tests/cypress/src/selectors.ts +46 -0
  206. package/tests/cypress/src/session-helpers.ts +500 -0
  207. package/tests/cypress/support/doc-commands.ts +260 -0
  208. package/tests/cypress.config.ts +150 -0
  209. package/tests/jest/components/post-header.test.tsx +377 -0
  210. package/tests/jest/config/role-config.test.ts +529 -0
  211. package/tests/jest/jest.config.ts +81 -0
  212. package/tests/jest/langchain/COVERAGE.md +372 -0
  213. package/tests/jest/langchain/guardrails.test.ts +465 -0
  214. package/tests/jest/langchain/streaming.test.ts +367 -0
  215. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  216. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  217. package/tests/jest/langchain/tracer.test.ts +823 -0
  218. package/tests/jest/user-roles/role-helpers.test.ts +432 -0
  219. package/tests/jest/validation/categories.test.ts +429 -0
  220. package/tests/jest/validation/posts.test.ts +546 -0
  221. package/tests/tsconfig.json +15 -0
  222. package/LICENSE +0 -21
@@ -0,0 +1,476 @@
1
+ ---
2
+ feature: Block CRUD Operations
3
+ priority: high
4
+ tags: [page-builder, blocks, crud, admin]
5
+ grepTags: [uat, feat-pages, block-crud, page-builder, regression]
6
+ coverage: 14
7
+ ---
8
+
9
+ # Block CRUD Operations
10
+
11
+ > Comprehensive test suite for block creation, editing, duplication, removal, and reordering in the Page Builder.
12
+
13
+ ## @test PB-BLOCK-001: Add Hero block
14
+
15
+ ### Metadata
16
+ - **Priority:** High
17
+ - **Type:** Smoke
18
+ - **Tags:** add, hero
19
+ - **Grep:** `@smoke`
20
+
21
+ ```gherkin:en
22
+ Scenario: Add Hero block to empty canvas
23
+
24
+ Given I am logged in as Owner
25
+ And I have created a test page via API
26
+ When I visit the page editor
27
+ And I switch to Layout mode
28
+ And the canvas is empty
29
+ And I add a "hero" block
30
+ Then the block count should be 1
31
+ ```
32
+
33
+ ```gherkin:es
34
+ Scenario: Agregar bloque Hero al canvas vacío
35
+
36
+ Given estoy logueado como Owner
37
+ And he creado una página de prueba via API
38
+ When visito el editor de páginas
39
+ And cambio al modo Layout
40
+ And el canvas está vacío
41
+ And agrego un bloque "hero"
42
+ Then la cantidad de bloques debería ser 1
43
+ ```
44
+
45
+ ### Expected Results
46
+ - Hero block appears on canvas
47
+ - Block count updates to 1
48
+ - Block is selectable
49
+
50
+ ---
51
+
52
+ ## @test PB-BLOCK-002: Add Features Grid block
53
+
54
+ ### Metadata
55
+ - **Priority:** Medium
56
+ - **Type:** Regression
57
+ - **Tags:** add, features-grid
58
+
59
+ ```gherkin:en
60
+ Scenario: Add Features Grid block
61
+
62
+ Given I am on the page editor in Layout mode
63
+ When I add a "features-grid" block
64
+ Then the block count should be 1
65
+ ```
66
+
67
+ ```gherkin:es
68
+ Scenario: Agregar bloque Features Grid
69
+
70
+ Given estoy en el editor de páginas en modo Layout
71
+ When agrego un bloque "features-grid"
72
+ Then la cantidad de bloques debería ser 1
73
+ ```
74
+
75
+ ### Expected Results
76
+ - Features Grid block appears on canvas
77
+ - Default grid items are displayed
78
+
79
+ ---
80
+
81
+ ## @test PB-BLOCK-003: Add CTA Section block
82
+
83
+ ### Metadata
84
+ - **Priority:** Medium
85
+ - **Type:** Regression
86
+ - **Tags:** add, cta-section
87
+
88
+ ```gherkin:en
89
+ Scenario: Add CTA Section block
90
+
91
+ Given I am on the page editor in Layout mode
92
+ When I add a "cta-section" block
93
+ Then the block count should be 1
94
+ ```
95
+
96
+ ```gherkin:es
97
+ Scenario: Agregar bloque CTA Section
98
+
99
+ Given estoy en el editor de páginas en modo Layout
100
+ When agrego un bloque "cta-section"
101
+ Then la cantidad de bloques debería ser 1
102
+ ```
103
+
104
+ ### Expected Results
105
+ - CTA Section block appears on canvas
106
+ - Default CTA content is visible
107
+
108
+ ---
109
+
110
+ ## @test PB-BLOCK-004: Add Testimonials block
111
+
112
+ ### Metadata
113
+ - **Priority:** Medium
114
+ - **Type:** Regression
115
+ - **Tags:** add, testimonials
116
+
117
+ ```gherkin:en
118
+ Scenario: Add Testimonials block
119
+
120
+ Given I am on the page editor in Layout mode
121
+ When I add a "testimonials" block
122
+ Then the block count should be 1
123
+ ```
124
+
125
+ ```gherkin:es
126
+ Scenario: Agregar bloque Testimonials
127
+
128
+ Given estoy en el editor de páginas en modo Layout
129
+ When agrego un bloque "testimonials"
130
+ Then la cantidad de bloques debería ser 1
131
+ ```
132
+
133
+ ### Expected Results
134
+ - Testimonials block appears on canvas
135
+ - Default testimonial items are shown
136
+
137
+ ---
138
+
139
+ ## @test PB-BLOCK-005: Add Text Content block
140
+
141
+ ### Metadata
142
+ - **Priority:** Medium
143
+ - **Type:** Regression
144
+ - **Tags:** add, text-content
145
+
146
+ ```gherkin:en
147
+ Scenario: Add Text Content block
148
+
149
+ Given I am on the page editor in Layout mode
150
+ When I add a "text-content" block
151
+ Then the block count should be 1
152
+ ```
153
+
154
+ ```gherkin:es
155
+ Scenario: Agregar bloque Text Content
156
+
157
+ Given estoy en el editor de páginas en modo Layout
158
+ When agrego un bloque "text-content"
159
+ Then la cantidad de bloques debería ser 1
160
+ ```
161
+
162
+ ### Expected Results
163
+ - Text Content block appears on canvas
164
+ - Default text placeholder is visible
165
+
166
+ ---
167
+
168
+ ## @test PB-BLOCK-006: Add multiple blocks
169
+
170
+ ### Metadata
171
+ - **Priority:** High
172
+ - **Type:** Smoke
173
+ - **Tags:** add, multiple
174
+ - **Grep:** `@smoke`
175
+
176
+ ```gherkin:en
177
+ Scenario: Add multiple blocks to canvas
178
+
179
+ Given I am on the page editor in Layout mode
180
+ When I add a "hero" block
181
+ And I add a "features-grid" block
182
+ And I add a "cta-section" block
183
+ Then the block count should be 3
184
+ ```
185
+
186
+ ```gherkin:es
187
+ Scenario: Agregar múltiples bloques al canvas
188
+
189
+ Given estoy en el editor de páginas en modo Layout
190
+ When agrego un bloque "hero"
191
+ And agrego un bloque "features-grid"
192
+ And agrego un bloque "cta-section"
193
+ Then la cantidad de bloques debería ser 3
194
+ ```
195
+
196
+ ### Expected Results
197
+ - All three blocks appear on canvas
198
+ - Blocks are in correct order
199
+ - Block count shows 3
200
+
201
+ ---
202
+
203
+ ## @test PB-BLOCK-007: Edit block title prop
204
+
205
+ ### Metadata
206
+ - **Priority:** High
207
+ - **Type:** Smoke
208
+ - **Tags:** edit, props, title
209
+ - **Grep:** `@smoke`
210
+
211
+ ```gherkin:en
212
+ Scenario: Edit block properties
213
+
214
+ Given I am on the page editor with a hero block
215
+ When I locate the title field in settings panel
216
+ And I change the title to "Custom Hero Title"
217
+ And I save the page
218
+ Then the API should confirm the update
219
+ And the block should have the new title
220
+ ```
221
+
222
+ ```gherkin:es
223
+ Scenario: Editar propiedades del bloque
224
+
225
+ Given estoy en el editor de páginas con un bloque hero
226
+ When localizo el campo título en el panel de configuración
227
+ And cambio el título a "Custom Hero Title"
228
+ And guardo la página
229
+ Then la API debería confirmar la actualización
230
+ And el bloque debería tener el nuevo título
231
+ ```
232
+
233
+ ### Expected Results
234
+ - Settings panel shows title field
235
+ - Title change is reflected in preview
236
+ - Save completes successfully
237
+ - API confirms the update
238
+
239
+ ---
240
+
241
+ ## @test PB-BLOCK-008: Duplicate existing block
242
+
243
+ ### Metadata
244
+ - **Priority:** Medium
245
+ - **Type:** Regression
246
+ - **Tags:** duplicate
247
+
248
+ ```gherkin:en
249
+ Scenario: Duplicate a block
250
+
251
+ Given I am on the page editor with a hero block
252
+ And the block count is 1
253
+ When I get the block ID
254
+ And I duplicate the block
255
+ Then the block count should be 2
256
+ ```
257
+
258
+ ```gherkin:es
259
+ Scenario: Duplicar un bloque
260
+
261
+ Given estoy en el editor de páginas con un bloque hero
262
+ And la cantidad de bloques es 1
263
+ When obtengo el ID del bloque
264
+ And duplico el bloque
265
+ Then la cantidad de bloques debería ser 2
266
+ ```
267
+
268
+ ### Expected Results
269
+ - Duplicate button is accessible
270
+ - New block appears after original
271
+ - Block count updates to 2
272
+ - Duplicated block has same properties
273
+
274
+ ---
275
+
276
+ ## @test PB-BLOCK-009: Remove block from canvas
277
+
278
+ ### Metadata
279
+ - **Priority:** High
280
+ - **Type:** Smoke
281
+ - **Tags:** remove, delete
282
+ - **Grep:** `@smoke`
283
+
284
+ ```gherkin:en
285
+ Scenario: Remove a block from canvas
286
+
287
+ Given I am on the page editor with a hero block
288
+ And the block count is 1
289
+ When I get the block ID
290
+ And I remove the block
291
+ Then the canvas should be empty
292
+ ```
293
+
294
+ ```gherkin:es
295
+ Scenario: Eliminar un bloque del canvas
296
+
297
+ Given estoy en el editor de páginas con un bloque hero
298
+ And la cantidad de bloques es 1
299
+ When obtengo el ID del bloque
300
+ And elimino el bloque
301
+ Then el canvas debería estar vacío
302
+ ```
303
+
304
+ ### Expected Results
305
+ - Remove button is accessible
306
+ - Block is removed from canvas
307
+ - Canvas shows empty state
308
+ - No orphan data remains
309
+
310
+ ---
311
+
312
+ ## @test PB-BLOCK-010: Reorder blocks with drag and drop
313
+
314
+ ### Metadata
315
+ - **Priority:** Medium
316
+ - **Type:** Regression
317
+ - **Tags:** reorder, drag-drop, layout-mode
318
+
319
+ ```gherkin:en
320
+ Scenario: Reorder blocks with drag and drop
321
+
322
+ Given I am on the page editor in Layout mode
323
+ And I have added a "hero" block
324
+ And I have added a "cta-section" block
325
+ Then the first block should contain "hero"
326
+ And there should be 2 sortable blocks ready for reordering
327
+ ```
328
+
329
+ ```gherkin:es
330
+ Scenario: Reordenar bloques con arrastrar y soltar
331
+
332
+ Given estoy en el editor de páginas en modo Layout
333
+ And he agregado un bloque "hero"
334
+ And he agregado un bloque "cta-section"
335
+ Then el primer bloque debería contener "hero"
336
+ And debería haber 2 bloques ordenables listos para reordenar
337
+ ```
338
+
339
+ ### Expected Results
340
+ - Both blocks are visible
341
+ - Drag handles are present
342
+ - Blocks can be reordered
343
+ - Order persists after save
344
+
345
+ ---
346
+
347
+ ## @test PB-BLOCK-011: Reorder blocks with move buttons
348
+
349
+ ### Metadata
350
+ - **Priority:** Medium
351
+ - **Type:** Regression
352
+ - **Tags:** reorder, buttons, preview-mode
353
+
354
+ ```gherkin:en
355
+ Scenario: Reorder blocks with move buttons in Preview mode
356
+
357
+ Given I am on the page editor with multiple blocks
358
+ And I switch to Preview mode
359
+ When I hover over the first block
360
+ And I click the "move down" button
361
+ Then the block should move down
362
+ ```
363
+
364
+ ```gherkin:es
365
+ Scenario: Reordenar bloques con botones en modo Preview
366
+
367
+ Given estoy en el editor de páginas con múltiples bloques
368
+ And cambio al modo Preview
369
+ When paso el mouse sobre el primer bloque
370
+ And hago clic en el botón "mover abajo"
371
+ Then el bloque debería moverse abajo
372
+ ```
373
+
374
+ ### Expected Results
375
+ - Move buttons appear on hover
376
+ - Move down button is clickable
377
+ - Block moves to new position
378
+ - Other blocks adjust accordingly
379
+
380
+ ---
381
+
382
+ ## @test PB-BLOCK-012: Move up disabled for first block
383
+
384
+ ### Metadata
385
+ - **Priority:** Low
386
+ - **Type:** Regression
387
+ - **Tags:** reorder, buttons, disabled
388
+
389
+ ```gherkin:en
390
+ Scenario: Move up disabled for first block
391
+
392
+ Given I am on the page editor with multiple blocks
393
+ And I switch to Preview mode
394
+ When I hover over the first block
395
+ Then the "move up" button should be disabled
396
+ ```
397
+
398
+ ```gherkin:es
399
+ Scenario: Mover arriba deshabilitado para primer bloque
400
+
401
+ Given estoy en el editor de páginas con múltiples bloques
402
+ And cambio al modo Preview
403
+ When paso el mouse sobre el primer bloque
404
+ Then el botón "mover arriba" debería estar deshabilitado
405
+ ```
406
+
407
+ ### Expected Results
408
+ - Move up button is visually disabled
409
+ - Button is not clickable
410
+ - Move down button is still active
411
+
412
+ ---
413
+
414
+ ## @test PB-BLOCK-013: Reset block props to defaults
415
+
416
+ ### Metadata
417
+ - **Priority:** Low
418
+ - **Type:** Regression
419
+ - **Tags:** reset, props, defaults
420
+
421
+ ```gherkin:en
422
+ Scenario: Reset block properties to defaults
423
+
424
+ Given I am on the page editor with a hero block
425
+ And I have modified the title field
426
+ When I click the "reset props" button
427
+ Then the block properties should reset to defaults
428
+ ```
429
+
430
+ ```gherkin:es
431
+ Scenario: Resetear propiedades del bloque a valores por defecto
432
+
433
+ Given estoy en el editor de páginas con un bloque hero
434
+ And he modificado el campo título
435
+ When hago clic en el botón "resetear props"
436
+ Then las propiedades del bloque deberían resetearse a valores por defecto
437
+ ```
438
+
439
+ ### Expected Results
440
+ - Reset button is accessible
441
+ - Confirmation dialog appears (if any)
442
+ - All props return to default values
443
+ - Block updates in preview
444
+
445
+ ---
446
+
447
+ ## @test PB-BLOCK-014: Add items to array field
448
+
449
+ ### Metadata
450
+ - **Priority:** Medium
451
+ - **Type:** Regression
452
+ - **Tags:** array, fields, add-item
453
+
454
+ ```gherkin:en
455
+ Scenario: Add items to array field
456
+
457
+ Given I am on the page editor with a features-grid block
458
+ When I locate the array add button
459
+ And I click to add an item
460
+ Then at least 1 item should exist in the array
461
+ ```
462
+
463
+ ```gherkin:es
464
+ Scenario: Agregar items al campo array
465
+
466
+ Given estoy en el editor de páginas con un bloque features-grid
467
+ When localizo el botón agregar del array
468
+ And hago clic para agregar un item
469
+ Then al menos 1 item debería existir en el array
470
+ ```
471
+
472
+ ### Expected Results
473
+ - Add item button is visible
474
+ - New item appears in array
475
+ - Item can be edited
476
+ - Array count updates