@mohasinac/appkit 4.57.0 → 4.59.0

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 (574) hide show
  1. package/dist/.build-stamp.json +4 -4
  2. package/dist/_internal/server/features/beys/data.d.ts +44 -0
  3. package/dist/_internal/server/features/beys/data.js +107 -0
  4. package/dist/_internal/server/features/beys/og.d.ts +42 -0
  5. package/dist/_internal/server/features/beys/og.js +89 -0
  6. package/dist/_internal/server/features/parts/data.js +3 -2
  7. package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
  8. package/dist/_internal/server/jobs/handlers/messages.js +1 -1
  9. package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
  10. package/dist/_internal/shared/actions/action-registry.js +86 -0
  11. package/dist/_internal/shared/types/base-document.d.ts +1 -1
  12. package/dist/client.d.ts +2 -0
  13. package/dist/client.js +1 -0
  14. package/dist/constants/api-endpoints.d.ts +12 -0
  15. package/dist/constants/api-endpoints.js +10 -0
  16. package/dist/constants/field-names.d.ts +46 -0
  17. package/dist/constants/field-names.js +46 -0
  18. package/dist/constants/seed-meta.d.ts +113 -0
  19. package/dist/constants/seed-meta.js +91 -0
  20. package/dist/features/admin/components/AdminBeysView.d.ts +27 -0
  21. package/dist/features/admin/components/AdminBeysView.js +178 -0
  22. package/dist/features/admin/components/AdminPartsView.d.ts +27 -0
  23. package/dist/features/admin/components/AdminPartsView.js +160 -0
  24. package/dist/features/admin/components/OwnerQuickActions.d.ts +19 -2
  25. package/dist/features/admin/components/OwnerQuickActions.js +31 -3
  26. package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +31 -0
  27. package/dist/features/admin/components/RecordOwnerQuickActions.js +128 -0
  28. package/dist/features/admin/components/ReferenceRecordEditor.d.ts +45 -0
  29. package/dist/features/admin/components/ReferenceRecordEditor.js +153 -0
  30. package/dist/features/admin/schemas/firestore.d.ts +1 -1
  31. package/dist/features/auctions/components/MarketplaceAuctionCard.js +15 -2
  32. package/dist/features/auth/permissions/constants.d.ts +1 -1
  33. package/dist/features/auth/permissions/constants.js +12 -1
  34. package/dist/features/beys/components/BeyDetailPageView.d.ts +50 -0
  35. package/dist/features/beys/components/BeyDetailPageView.js +98 -0
  36. package/dist/features/beys/schemas/firestore.d.ts +417 -0
  37. package/dist/features/beys/schemas/firestore.js +65 -0
  38. package/dist/features/blog/components/BlogFeaturedCard.js +15 -2
  39. package/dist/features/blog/components/BlogPostView.js +2 -2
  40. package/dist/features/categories/components/BrandDetailPageView.js +4 -2
  41. package/dist/features/categories/components/BundleDetailView.js +2 -2
  42. package/dist/features/categories/components/CategoryDetailPageView.js +36 -3
  43. package/dist/features/categories/components/CategoryGrid.js +24 -2
  44. package/dist/features/categories/components/FranchiseDetailPageView.js +2 -3
  45. package/dist/features/events/components/EventCard.js +15 -2
  46. package/dist/features/grouped/components/GroupedListingDetailView.js +2 -3
  47. package/dist/features/homepage/components/CustomCardsSection.js +67 -50
  48. package/dist/features/homepage/components/ShopByCategorySection.js +23 -10
  49. package/dist/features/homepage/schemas/index.d.ts +10 -10
  50. package/dist/features/parts/components/PartDetailPageView.js +5 -3
  51. package/dist/features/parts/components/PartsSearchBox.js +79 -4
  52. package/dist/features/parts/schemas/admin-edit.d.ts +81 -0
  53. package/dist/features/parts/schemas/admin-edit.js +89 -0
  54. package/dist/features/parts/schemas/firestore.d.ts +2 -1
  55. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +15 -2
  56. package/dist/features/products/components/MarketplaceBundleCard.js +15 -2
  57. package/dist/features/products/components/MarketplacePrizeDrawCard.js +15 -2
  58. package/dist/features/products/components/ProductGrid.js +18 -2
  59. package/dist/features/products/schemas/firestore.d.ts +18 -0
  60. package/dist/features/seller/components/CategoryInlineSelect.d.ts +10 -1
  61. package/dist/features/seller/components/CategoryInlineSelect.js +53 -5
  62. package/dist/features/seller/components/SellerProductShell.d.ts +39 -0
  63. package/dist/features/seller/components/SellerProductShell.js +31 -3
  64. package/dist/index.d.ts +6 -129
  65. package/dist/index.js +61 -292
  66. package/dist/next/routing/route-map.d.ts +13 -1
  67. package/dist/next/routing/route-map.js +37 -0
  68. package/dist/schemas/registry.d.ts +6 -6
  69. package/dist/server.d.ts +2 -69
  70. package/dist/server.js +8 -69
  71. package/dist/styles.css +468 -1
  72. package/dist/tailwind-utilities.css +1 -1
  73. package/dist/ui/components/PosterCard.d.ts +99 -0
  74. package/dist/ui/components/PosterCard.js +109 -0
  75. package/dist/ui/components/PosterCard.style.css +466 -0
  76. package/dist/ui/components/index.style.css +1 -0
  77. package/dist/ui/index.d.ts +2 -0
  78. package/dist/ui/index.js +2 -0
  79. package/package.json +4 -2
  80. package/scripts/seed-cli.mjs +177 -2
  81. package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
  82. package/dist/features/tester/seed-data/_happy-path.js +0 -710
  83. package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
  84. package/dist/features/tester/seed-data/_money-flows.js +0 -610
  85. package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
  86. package/dist/features/tester/seed-data/authored/_types.js +0 -35
  87. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
  88. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
  89. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
  90. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
  91. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
  92. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
  93. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
  94. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
  95. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
  96. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
  97. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
  98. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
  99. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
  100. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
  101. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
  102. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
  103. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
  104. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
  105. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
  106. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
  107. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
  108. package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
  109. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
  110. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
  111. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
  112. package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
  113. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
  114. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
  115. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
  116. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
  117. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
  118. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
  119. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
  120. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
  121. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
  122. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
  123. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
  124. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
  125. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
  126. package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
  127. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
  128. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
  129. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
  130. package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
  131. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
  132. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
  133. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
  134. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
  135. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
  136. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
  137. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
  138. package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
  139. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
  140. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
  141. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
  142. package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
  143. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
  144. package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
  145. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
  146. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
  147. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
  148. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
  149. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
  150. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
  151. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
  152. package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
  153. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
  154. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
  155. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
  156. package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
  157. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
  158. package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
  159. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
  160. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
  161. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
  162. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
  163. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
  164. package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
  165. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
  166. package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
  167. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
  168. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
  169. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
  170. package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
  171. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
  172. package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
  173. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
  174. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
  175. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
  176. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
  177. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
  178. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
  179. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
  180. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
  181. package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
  182. package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
  183. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
  184. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
  185. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
  186. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
  187. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
  188. package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
  189. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
  190. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
  191. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
  192. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
  193. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
  194. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
  195. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
  196. package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
  197. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
  198. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
  199. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
  200. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
  201. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
  202. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
  203. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
  204. package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
  205. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
  206. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
  207. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
  208. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
  209. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
  210. package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
  211. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
  212. package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
  213. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
  214. package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
  215. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
  216. package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
  217. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
  218. package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
  219. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
  220. package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
  221. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
  222. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
  223. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
  224. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
  225. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
  226. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
  227. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
  228. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
  229. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
  230. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
  231. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
  232. package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
  233. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
  234. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
  235. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
  236. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
  237. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
  238. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
  239. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
  240. package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
  241. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
  242. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
  243. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
  244. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
  245. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
  246. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
  247. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
  248. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
  249. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
  250. package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
  251. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
  252. package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
  253. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
  254. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
  255. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
  256. package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
  257. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
  258. package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
  259. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
  260. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
  261. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
  262. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
  263. package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
  264. package/dist/features/tester/seed-data/authored/index.js +0 -301
  265. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
  266. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
  267. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
  268. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
  269. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
  270. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
  271. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
  272. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
  273. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
  274. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
  275. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
  276. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
  277. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
  278. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
  279. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
  280. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
  281. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
  282. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
  283. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
  284. package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
  285. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
  286. package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
  287. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
  288. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
  289. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
  290. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
  291. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
  292. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
  293. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
  294. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
  295. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
  296. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
  297. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
  298. package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
  299. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
  300. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
  301. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
  302. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
  303. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
  304. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
  305. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
  306. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
  307. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
  308. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
  309. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
  310. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
  311. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
  312. package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
  313. package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
  314. package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
  315. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
  316. package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
  317. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
  318. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
  319. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
  320. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
  321. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
  322. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
  323. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
  324. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
  325. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
  326. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
  327. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
  328. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
  329. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
  330. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
  331. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
  332. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
  333. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
  334. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
  335. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
  336. package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
  337. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
  338. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
  339. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
  340. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
  341. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
  342. package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
  343. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
  344. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
  345. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
  346. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
  347. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
  348. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
  349. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
  350. package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
  351. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
  352. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
  353. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
  354. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
  355. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
  356. package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
  357. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
  358. package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
  359. package/dist/features/tester/seed-data/index.d.ts +0 -2
  360. package/dist/features/tester/seed-data/index.js +0 -2
  361. package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
  362. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
  363. package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
  364. package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
  365. package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
  366. package/dist/features/tester/seed-data/tester-window.js +0 -66
  367. package/dist/seed/_helpers/brand-rows.d.ts +0 -35
  368. package/dist/seed/_helpers/brand-rows.js +0 -600
  369. package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
  370. package/dist/seed/_helpers/category-content-generated.js +0 -1853
  371. package/dist/seed/_helpers/category-content.d.ts +0 -68
  372. package/dist/seed/_helpers/category-content.js +0 -731
  373. package/dist/seed/_helpers/category-forest.d.ts +0 -4
  374. package/dist/seed/_helpers/category-forest.js +0 -824
  375. package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
  376. package/dist/seed/_helpers/category-images-generated.js +0 -618
  377. package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
  378. package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
  379. package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
  380. package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
  381. package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
  382. package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
  383. package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
  384. package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
  385. package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
  386. package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
  387. package/dist/seed/_helpers/category-models.d.ts +0 -12
  388. package/dist/seed/_helpers/category-models.js +0 -45
  389. package/dist/seed/_helpers/category-names.d.ts +0 -54
  390. package/dist/seed/_helpers/category-names.js +0 -118
  391. package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
  392. package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
  393. package/dist/seed/_helpers/category-parts.d.ts +0 -9
  394. package/dist/seed/_helpers/category-parts.js +0 -15022
  395. package/dist/seed/_helpers/category-tree.d.ts +0 -27
  396. package/dist/seed/_helpers/category-tree.js +0 -119
  397. package/dist/seed/_helpers/character-features.d.ts +0 -10
  398. package/dist/seed/_helpers/character-features.js +0 -120
  399. package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
  400. package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
  401. package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
  402. package/dist/seed/_helpers/franchise-rows.js +0 -189
  403. package/dist/seed/_helpers/media.d.ts +0 -67
  404. package/dist/seed/_helpers/media.js +0 -172
  405. package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
  406. package/dist/seed/_helpers/part-colours-generated.js +0 -273
  407. package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
  408. package/dist/seed/_helpers/product-search-txt.js +0 -23
  409. package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
  410. package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
  411. package/dist/seed/addresses-seed-data.d.ts +0 -2
  412. package/dist/seed/addresses-seed-data.js +0 -78
  413. package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
  414. package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
  415. package/dist/seed/bids-seed-data.d.ts +0 -2
  416. package/dist/seed/bids-seed-data.js +0 -206
  417. package/dist/seed/blog-posts-seed-data.d.ts +0 -6
  418. package/dist/seed/blog-posts-seed-data.js +0 -442
  419. package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
  420. package/dist/seed/carousel-slides-seed-data.js +0 -411
  421. package/dist/seed/carousels-seed-data.d.ts +0 -2
  422. package/dist/seed/carousels-seed-data.js +0 -36
  423. package/dist/seed/cart-seed-data.d.ts +0 -2
  424. package/dist/seed/cart-seed-data.js +0 -241
  425. package/dist/seed/catalogue-seed-data.d.ts +0 -2
  426. package/dist/seed/catalogue-seed-data.js +0 -112
  427. package/dist/seed/categories-seed-data.d.ts +0 -3
  428. package/dist/seed/categories-seed-data.js +0 -816
  429. package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
  430. package/dist/seed/claimed-coupons-seed-data.js +0 -85
  431. package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
  432. package/dist/seed/coupon-usage-seed-data.js +0 -55
  433. package/dist/seed/coupons-seed-data.d.ts +0 -2
  434. package/dist/seed/coupons-seed-data.js +0 -226
  435. package/dist/seed/defaults/categories.d.ts +0 -2
  436. package/dist/seed/defaults/categories.js +0 -12
  437. package/dist/seed/defaults/faqs.d.ts +0 -2
  438. package/dist/seed/defaults/faqs.js +0 -40
  439. package/dist/seed/events-seed-data.d.ts +0 -7
  440. package/dist/seed/events-seed-data.js +0 -482
  441. package/dist/seed/factories/address.factory.d.ts +0 -21
  442. package/dist/seed/factories/address.factory.js +0 -44
  443. package/dist/seed/factories/bid.factory.d.ts +0 -15
  444. package/dist/seed/factories/bid.factory.js +0 -33
  445. package/dist/seed/factories/blog-post.factory.d.ts +0 -15
  446. package/dist/seed/factories/blog-post.factory.js +0 -22
  447. package/dist/seed/factories/carousel.factory.d.ts +0 -11
  448. package/dist/seed/factories/carousel.factory.js +0 -17
  449. package/dist/seed/factories/cart.factory.d.ts +0 -25
  450. package/dist/seed/factories/cart.factory.js +0 -35
  451. package/dist/seed/factories/category.factory.d.ts +0 -11
  452. package/dist/seed/factories/category.factory.js +0 -16
  453. package/dist/seed/factories/coupon.factory.d.ts +0 -21
  454. package/dist/seed/factories/coupon.factory.js +0 -43
  455. package/dist/seed/factories/faq.factory.d.ts +0 -10
  456. package/dist/seed/factories/faq.factory.js +0 -15
  457. package/dist/seed/factories/notification.factory.d.ts +0 -18
  458. package/dist/seed/factories/notification.factory.js +0 -39
  459. package/dist/seed/factories/order.factory.d.ts +0 -20
  460. package/dist/seed/factories/order.factory.js +0 -20
  461. package/dist/seed/factories/payout.factory.d.ts +0 -21
  462. package/dist/seed/factories/payout.factory.js +0 -38
  463. package/dist/seed/factories/product.factory.d.ts +0 -27
  464. package/dist/seed/factories/product.factory.js +0 -80
  465. package/dist/seed/factories/review.factory.d.ts +0 -14
  466. package/dist/seed/factories/review.factory.js +0 -52
  467. package/dist/seed/factories/session.factory.d.ts +0 -15
  468. package/dist/seed/factories/session.factory.js +0 -31
  469. package/dist/seed/factories/store.factory.d.ts +0 -23
  470. package/dist/seed/factories/store.factory.js +0 -47
  471. package/dist/seed/factories/user.factory.d.ts +0 -19
  472. package/dist/seed/factories/user.factory.js +0 -56
  473. package/dist/seed/faq-seed-data.d.ts +0 -18
  474. package/dist/seed/faq-seed-data.js +0 -1956
  475. package/dist/seed/firestore-indexes.d.ts +0 -12
  476. package/dist/seed/firestore-indexes.js +0 -31
  477. package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
  478. package/dist/seed/grouped-listings-seed-data.js +0 -283
  479. package/dist/seed/history-seed-data.d.ts +0 -12
  480. package/dist/seed/history-seed-data.js +0 -70
  481. package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
  482. package/dist/seed/homepage-sections-seed-data.js +0 -1018
  483. package/dist/seed/index.d.ts +0 -98
  484. package/dist/seed/index.js +0 -112
  485. package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
  486. package/dist/seed/lottery-entries-seed-data.js +0 -108
  487. package/dist/seed/manifest.d.ts +0 -16
  488. package/dist/seed/manifest.js +0 -235
  489. package/dist/seed/media-assets-seed-data.d.ts +0 -22
  490. package/dist/seed/media-assets-seed-data.js +0 -5593
  491. package/dist/seed/model-composition-seed-data.d.ts +0 -15
  492. package/dist/seed/model-composition-seed-data.js +0 -9032
  493. package/dist/seed/notifications-seed-data.d.ts +0 -2
  494. package/dist/seed/notifications-seed-data.js +0 -606
  495. package/dist/seed/offers-seed-data.d.ts +0 -2
  496. package/dist/seed/offers-seed-data.js +0 -398
  497. package/dist/seed/orders-seed-data.d.ts +0 -2
  498. package/dist/seed/orders-seed-data.js +0 -845
  499. package/dist/seed/part-glossary/chunk0.d.ts +0 -9
  500. package/dist/seed/part-glossary/chunk0.js +0 -35448
  501. package/dist/seed/part-glossary/chunk1.d.ts +0 -9
  502. package/dist/seed/part-glossary/chunk1.js +0 -40494
  503. package/dist/seed/part-glossary/chunk2.d.ts +0 -9
  504. package/dist/seed/part-glossary/chunk2.js +0 -51242
  505. package/dist/seed/part-glossary/chunk3.d.ts +0 -9
  506. package/dist/seed/part-glossary/chunk3.js +0 -53337
  507. package/dist/seed/part-glossary/chunk4.d.ts +0 -9
  508. package/dist/seed/part-glossary/chunk4.js +0 -51454
  509. package/dist/seed/part-glossary-seed-data.d.ts +0 -15
  510. package/dist/seed/part-glossary-seed-data.js +0 -25
  511. package/dist/seed/payouts-seed-data.d.ts +0 -2
  512. package/dist/seed/payouts-seed-data.js +0 -302
  513. package/dist/seed/product-features-seed-data.d.ts +0 -3
  514. package/dist/seed/product-features-seed-data.js +0 -366
  515. package/dist/seed/products-art-seed-data.d.ts +0 -2
  516. package/dist/seed/products-art-seed-data.js +0 -289
  517. package/dist/seed/products-auctions-seed-data.d.ts +0 -2
  518. package/dist/seed/products-auctions-seed-data.js +0 -475
  519. package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
  520. package/dist/seed/products-beyblade-x-seed-data.js +0 -476
  521. package/dist/seed/products-catalogue-seed-data.d.ts +0 -22
  522. package/dist/seed/products-catalogue-seed-data.js +0 -86384
  523. package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
  524. package/dist/seed/products-classifieds-seed-data.js +0 -435
  525. package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
  526. package/dist/seed/products-digital-codes-seed-data.js +0 -395
  527. package/dist/seed/products-live-items-seed-data.d.ts +0 -7
  528. package/dist/seed/products-live-items-seed-data.js +0 -269
  529. package/dist/seed/products-preorders-seed-data.d.ts +0 -2
  530. package/dist/seed/products-preorders-seed-data.js +0 -360
  531. package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
  532. package/dist/seed/products-prize-draws-seed-data.js +0 -427
  533. package/dist/seed/products-spares-seed-data.d.ts +0 -2
  534. package/dist/seed/products-spares-seed-data.js +0 -368
  535. package/dist/seed/products-standard-seed-data.d.ts +0 -2
  536. package/dist/seed/products-standard-seed-data.js +0 -632
  537. package/dist/seed/products-stickers-seed-data.d.ts +0 -2
  538. package/dist/seed/products-stickers-seed-data.js +0 -319
  539. package/dist/seed/reviews-seed-data.d.ts +0 -1
  540. package/dist/seed/reviews-seed-data.js +0 -185
  541. package/dist/seed/runner.d.ts +0 -2
  542. package/dist/seed/runner.js +0 -125
  543. package/dist/seed/scammers-seed-data.d.ts +0 -2
  544. package/dist/seed/scammers-seed-data.js +0 -235
  545. package/dist/seed/seed-market-config.d.ts +0 -48
  546. package/dist/seed/seed-market-config.js +0 -199
  547. package/dist/seed/seed-purpose.d.ts +0 -299
  548. package/dist/seed/seed-purpose.js +0 -431
  549. package/dist/seed/sessions-seed-data.d.ts +0 -3
  550. package/dist/seed/sessions-seed-data.js +0 -116
  551. package/dist/seed/shipments-seed-data.d.ts +0 -5
  552. package/dist/seed/shipments-seed-data.js +0 -185
  553. package/dist/seed/site-settings-seed-data.d.ts +0 -2
  554. package/dist/seed/site-settings-seed-data.js +0 -1069
  555. package/dist/seed/store-addresses-seed-data.d.ts +0 -18
  556. package/dist/seed/store-addresses-seed-data.js +0 -71
  557. package/dist/seed/store-extensions-seed-data.d.ts +0 -11
  558. package/dist/seed/store-extensions-seed-data.js +0 -292
  559. package/dist/seed/stores-seed-data.d.ts +0 -6
  560. package/dist/seed/stores-seed-data.js +0 -242
  561. package/dist/seed/support-tickets-seed-data.d.ts +0 -16
  562. package/dist/seed/support-tickets-seed-data.js +0 -239
  563. package/dist/seed/tax-codes-seed-data.d.ts +0 -34
  564. package/dist/seed/tax-codes-seed-data.js +0 -100
  565. package/dist/seed/test-data-ttl.d.ts +0 -29
  566. package/dist/seed/test-data-ttl.js +0 -31
  567. package/dist/seed/test-utils.d.ts +0 -49
  568. package/dist/seed/test-utils.js +0 -110
  569. package/dist/seed/types.d.ts +0 -89
  570. package/dist/seed/types.js +0 -15
  571. package/dist/seed/users-seed-data.d.ts +0 -2
  572. package/dist/seed/users-seed-data.js +0 -597
  573. package/dist/seed/wishlists-seed-data.d.ts +0 -12
  574. package/dist/seed/wishlists-seed-data.js +0 -54
@@ -1,23 +0,0 @@
1
- import type { TesterCaseRole } from "../schemas";
2
- interface MoneyFlowCase {
3
- key: string;
4
- label: string;
5
- /** Every role the case affects; per-role detail goes inline in the expectations. */
6
- roles: TesterCaseRole[];
7
- startPage?: string;
8
- steps: string[];
9
- inputs?: Record<string, string | number | boolean>;
10
- expectedBehaviour: string;
11
- expectedUiState: string;
12
- expectedData?: Record<string, string | number | boolean>;
13
- endResult: string;
14
- href?: string;
15
- }
16
- interface MoneyFlowPage {
17
- pageKey: string;
18
- pageLabel: string;
19
- href?: string;
20
- cases: MoneyFlowCase[];
21
- }
22
- export declare const moneyFlowsPages: MoneyFlowPage[];
23
- export {};
@@ -1,610 +0,0 @@
1
- /*
2
- * WHY: End-to-end money flows — offers, auction wins, payments and the refusals
3
- * that guard them. This was the largest hole in the catalogue: offers had
4
- * cases for MAKING one but none for the seller accepting it and the buyer
5
- * then paying, and a won auction had no payment path tested at all — which
6
- * is exactly where Root Cause #60 lived (settlement wrote an order nobody
7
- * could pay for, and no case would have caught it).
8
- *
9
- * WHAT: Exports moneyFlowsPages — the page definitions consumed by group() in
10
- * tester-checklist-seed-data.ts.
11
- *
12
- * 🛑 THIS FILE IS THE REFERENCE for the six-part case contract. Every other page
13
- * is authored against it, so it must never be the odd one out: role, startPage,
14
- * steps, expectedBehaviour, expectedUiState, endResult — all six, every case,
15
- * with literal values and named fixtures.
16
- *
17
- * @tag domain:tester
18
- * @tag layer:seed
19
- * @tag access:server-only
20
- * @tag consumers:tester-checklist-seed-data.ts
21
- * @tag sideEffects:none
22
- */
23
- /** Reused so the wording cannot drift between cases that mean the same thing. */
24
- const STEP_SIGNIN_BUYER = "Sign in as the buyer ash@pokemonpalace.in.";
25
- const STEP_PLACE_ORDER = "Click 'Place order'.";
26
- const STEP_RELOAD_ORDERS = "Reload /user/orders.";
27
- export const moneyFlowsPages = [
28
- {
29
- pageKey: "offer-to-purchase",
30
- pageLabel: "Offer → accept → pay",
31
- href: "/products/product-beyblade-burst-valkyrie",
32
- cases: [
33
- {
34
- key: "buyer-makes-offer",
35
- label: "A buyer can make an offer on a seller's product and it appears in their own offers list",
36
- roles: ["buyer"],
37
- startPage: "/products/product-beyblade-burst-valkyrie",
38
- steps: [
39
- STEP_SIGNIN_BUYER,
40
- "Open /products/product-beyblade-burst-valkyrie.",
41
- "Confirm the signed-in account is ash@pokemonpalace.in and NOT rehan.sheikh@gmail.com. The seeded pending 780 on this product belongs to rehan, who is also the harness default buyer, so running this case as rehan trips the guard that allows only one active offer per listing and Make Offer is refused — which reads as a broken control rather than as the wrong identity.",
42
- "Click 'Make Offer'.",
43
- "Enter 815 as the offer amount. NOT 780: the seed already ships offer-yugi-burst-valkyrie-pending, a pending 780 from a different buyer on this same product, and two pending rows at the same amount on the same listing are tellable apart only by buyer name.",
44
- /*
45
- * Named `QA note buyer-makes-offer`, not `QA offer offer-to-purchase-…`.
46
- * R7 reads `offer-…` as a FIXTURE CITATION wherever it appears in a
47
- * step — including inside a name the tester is being told to type — so
48
- * the page-qualified key read as an offer id that does not exist. The
49
- * fixture reference documents this exact trap; renaming the record is
50
- * cheaper than weakening the rule.
51
- */
52
- "Enter the note 'QA note buyer-makes-offer'.",
53
- "Click the primary button. It reads 'Send offer of ₹815.00' — the label carries the amount, so it doubles as a check that what you typed reached the button. The label is interpolated, so it is not a fixed string to search for.",
54
- "Open /user/offers.",
55
- ],
56
- expectedBehaviour: "An offer is created for 815 against product-beyblade-burst-valkyrie, owned by the signed-in buyer, and the owning seller receives an offer-received notification.",
57
- expectedUiState: "The offer modal closes and a success confirmation appears. /user/offers lists a row for the product with amount ₹815 and status Pending. The page does NOT read 'No offers yet'. Only THIS buyer's offers appear here, so the seeded 780 from another buyer must not be listed.",
58
- endResult: "After reloading /user/offers the row is still listed at ₹815 with status Pending.",
59
- },
60
- {
61
- key: "duplicate-offer-refused",
62
- label: "A second offer on the same listing while one is still pending is refused",
63
- roles: ["buyer"],
64
- startPage: "/products/product-beyblade-burst-valkyrie",
65
- steps: [
66
- "Sign in as the buyer ash@pokemonpalace.in, holding the pending 815 offer from the previous case.",
67
- "Open /products/product-beyblade-burst-valkyrie.",
68
- "Click 'Make Offer'.",
69
- "Enter 800 as the offer amount.",
70
- "Click the primary button, which now reads 'Send offer of ₹800.00'.",
71
- ],
72
- expectedBehaviour: "The second offer is rejected. No new offer document is created; the existing 815 offer is untouched.",
73
- expectedUiState: "An error states that an active offer already exists on this listing. The amount field keeps the entered 800 rather than clearing silently.",
74
- endResult: "After reloading /user/offers there is still exactly ONE pending row for this product, at ₹815 — not two, and not one at ₹800. The rule is per buyer per listing, so the other buyer's seeded 780 is unaffected and is not visible here anyway.",
75
- },
76
- {
77
- key: "seller-sees-and-accepts",
78
- label: "The owning seller sees the inbound offer and can accept it",
79
- roles: ["seller"],
80
- startPage: "/store/offers",
81
- steps: [
82
- "Sign in as tyson@beybladearena.in / TempPass123!, who owns store-beyblade-arena.",
83
- "Open /store/offers.",
84
- "Find the row for offer-yugi-burst-valkyrie-pending — product-beyblade-burst-valkyrie, offered ₹780 against a listed ₹999, from buyer Mock User 3. If the previous cases ran there is also an ₹815 row from a different buyer on the same product; accept the ₹780 one.",
85
- "Open the row actions menu.",
86
- "Click 'Accept'.",
87
- "Confirm in the dialog.",
88
- "Reload /store/offers.",
89
- ],
90
- expectedBehaviour: "The offer moves to Accepted, a locked price of 780 is recorded, and the buyer receives an offer-responded notification.",
91
- expectedUiState: "Before acting, the row menu offers Accept, Decline and Counter as enabled controls. After confirming, the row's status badge reads Accepted.",
92
- endResult: "After reloading /store/offers the status still reads Accepted — not Pending.",
93
- href: "/store/offers",
94
- },
95
- {
96
- key: "accepted-offer-locks-price",
97
- label: "🛑 Checkout bills the AGREED price, never the listing price",
98
- roles: ["buyer"],
99
- startPage: "/user/offers",
100
- steps: [
101
- "Sign in as vivaan.kapoor@gmail.com / TempPass123!, who holds offer-kaiba-dranzer-s-accepted on product-beyblade-original-dranzer-s (listed ₹1499, agreed ₹1250).",
102
- "Open /user/offers.",
103
- "Click through to checkout from the accepted offer.",
104
- "Read the line item price in the checkout summary.",
105
- "Continue to the payment step.",
106
- "Read the order total.",
107
- ],
108
- expectedBehaviour: "Every price computed for this line uses the locked 1250, not the product's current 1499.",
109
- expectedUiState: "The line item reads ₹1,250.00 and the order total reflects 1250 plus fees. ₹1,499 appears nowhere on the checkout screen for this line.",
110
- endResult: "Nothing is placed in this case — stop at the payment step. The check is that the two numbers never appear together for the same line.",
111
- href: "/user/offers",
112
- },
113
- {
114
- key: "owning-seller-cannot-offer",
115
- label: "The owning seller sees no Make Offer control on their own listing",
116
- roles: ["seller"],
117
- startPage: "/products/product-beyblade-burst-valkyrie",
118
- steps: [
119
- "Sign in as tyson@beybladearena.in / TempPass123!, who owns store-beyblade-arena.",
120
- "Open /products/product-beyblade-burst-valkyrie, a listing owned by that store.",
121
- "Read the action controls on the listing.",
122
- ],
123
- expectedBehaviour: "The seller is not offered any purchase path on their own listing — you cannot make an offer on, or buy, your own item.",
124
- expectedUiState: "'Make Offer' is ABSENT, not merely disabled. A seller-facing control such as 'Edit listing' is shown instead.",
125
- endResult: "Nothing is persisted; this is a read-only check of which controls render for the owner.",
126
- href: "/products/product-beyblade-burst-valkyrie",
127
- },
128
- {
129
- key: "offer-lane-blocks-other-items",
130
- label: "An accepted offer in the cart blocks unrelated items from being checked out alongside it",
131
- roles: ["buyer"],
132
- startPage: "/cart",
133
- steps: [
134
- "Sign in as vivaan.kapoor@gmail.com / TempPass123!, who holds offer-kaiba-dranzer-s-accepted.",
135
- "Open /user/offers and start checkout from that accepted offer so its locked line enters the cart, then return to /products.",
136
- "Open /products/product-beyblade-burst-valkyrie and click 'Add to cart'.",
137
- "Open /cart.",
138
- "Read which lane or tab each line sits in.",
139
- "Attempt to check out the standard item.",
140
- ],
141
- expectedBehaviour: "The cart separates the offer line from the standard line, and only the higher-priority offer lane may be checked out while it is pending.",
142
- expectedUiState: "The two lines appear under different lane labels, and the standard lane's checkout control is disabled with a stated reason — not silently inert.",
143
- endResult: "After reloading /cart both lines are still present and still in separate lanes.",
144
- href: "/cart",
145
- },
146
- {
147
- key: "expired-offer-cannot-checkout",
148
- label: "An offer past its window can no longer be paid",
149
- roles: ["buyer"],
150
- startPage: "/user/offers",
151
- steps: [
152
- "Sign in as vivaan.kapoor@gmail.com / TempPass123!.",
153
- "Open /user/offers and find offer-kaiba-x-wizard-arrow-expired (product-beyblade-x-wizard-arrow, ₹700), whose window closed two days ago.",
154
- "Read the row's status badge and the date it names.",
155
- "Read every control the row offers.",
156
- "Attempt to start checkout from that offer.",
157
- ],
158
- expectedBehaviour: "Checkout is refused once the window has passed; the offer is treated as expired rather than payable.",
159
- expectedUiState: "The row reads Expired and offers no checkout control. It must not silently proceed at ₹700.",
160
- endResult: "After reloading /user/offers the row still reads Expired.",
161
- href: "/user/offers",
162
- },
163
- ],
164
- },
165
- {
166
- pageKey: "auction-win-to-payment",
167
- pageLabel: "Win an auction → get notified → pay",
168
- href: "/auctions/auction-money-flows-closing",
169
- cases: [
170
- {
171
- key: "winning-bid-recorded",
172
- label: "Placing the highest bid on a closing auction records you as the winner",
173
- roles: ["buyer"],
174
- // Batch-scoped fixture, seeded by
175
- // seed-data/fixtures/money-flows__auction-win-to-payment.mjs and closing
176
- // ~3 minutes after this batch starts.
177
- //
178
- // It used to cite auction-beyblade-original-dragoon-storm, which 46 OTHER
179
- // citations need LIVE — one fixture with two contradictory
180
- // requirements, so this case could never pass its final step and the
181
- // rig notes recorded it as unpassable-by-design.
182
- startPage: "/auctions/auction-money-flows-closing",
183
- steps: [
184
- STEP_SIGNIN_BUYER,
185
- "Open /auctions/auction-money-flows-closing, which starts at ₹15,000 with a ₹1,000 increment and closes about three minutes from now.",
186
- "Note the current bid and the end time.",
187
- "Enter 16000 as the bid amount.",
188
- "Click 'Place Bid'.",
189
- "Wait past the auction end time, reloading the page.",
190
- ],
191
- expectedBehaviour: "The bid is accepted at 16000, becomes the winning bid, and after the end time the auction settles with this buyer as winner.",
192
- expectedUiState: "Immediately after bidding the page shows '1 bid' and ₹16,000.00 without a manual refresh. After the end time it shows the auction as ended and names you as the winning bidder.",
193
- endResult: "After reloading, the auction still reads ended with your winning bid at ₹16,000.00, and Bid History lists it with other bidders' names masked.",
194
- },
195
- {
196
- key: "win-notification-arrives",
197
- label: "🛑 Winning an auction produces a notification that links somewhere payable",
198
- roles: ["buyer"],
199
- startPage: "/user/notifications",
200
- steps: [
201
- "Sign in as the buyer who won auction-money-flows-closing.",
202
- "🛑 WAIT FOR SETTLEMENT FIRST. The auction closes three minutes after the batch starts, but `auctionSettlement` is a scheduled function running every 15 minutes — so the win is not processed the moment the clock runs out. Nothing in this case or the two after it can be judged until it has run; an empty list before then is the schedule, not a defect.",
203
- "Open the notifications bell in the header.",
204
- "Find the auction-won notification.",
205
- "Read its text.",
206
- "Click it.",
207
- ],
208
- expectedBehaviour: "A notification exists for the win, names the item, and its action URL resolves to a page from which the win can be paid.",
209
- expectedUiState: "The notification names the auction. Following it lands on a page showing the amount due and a payment control — not a generic listing page and not a 404.",
210
- endResult: "The notification remains in the list after reload, marked read.",
211
- href: "/user/notifications",
212
- },
213
- {
214
- key: "won-auction-is-payable",
215
- label: "🛑 A won auction can actually be paid for",
216
- roles: ["buyer"],
217
- startPage: "/cart",
218
- steps: [
219
- "Sign in as the buyer who won auction-money-flows-closing.",
220
- "Open /cart, NOT /user/orders. A win does not create an order — settlement adds a LOCKED CART LINE, and the buyer pays through the ordinary checkout in the auction lane. An order only exists after payment.",
221
- "Locate the won auction line and read its price.",
222
- "Click through to checkout from that line.",
223
- "Read the amount due.",
224
- "Proceed as far as the payment method selection.",
225
- ],
226
- expectedBehaviour: "A reachable payment path exists and the amount due equals the winning bid of ₹16,000.",
227
- expectedUiState: "The cart line reads ₹16,000.00 and checkout is reachable from it, arriving at a payment method selection. Root Cause #60 is exactly this failing — settlement once wrote an ORDER with no payment route at all, so 'the record exists' is NOT a pass; a payment step must be reachable. A line that is present but leads nowhere is the same defect wearing a different shape.",
228
- endResult: "Stop at the payment method step and place nothing. After reloading /cart the locked line is still there at ₹16,000.00.",
229
- href: "/cart",
230
- },
231
- {
232
- key: "won-auction-line-is-locked",
233
- label: "A won-auction line cannot be removed from the cart or have its quantity changed",
234
- roles: ["buyer"],
235
- startPage: "/cart",
236
- steps: [
237
- "Sign in as the buyer holding the won auction line.",
238
- "Open /cart.",
239
- "Attempt to change the quantity on the won-auction line.",
240
- "Attempt to remove that line.",
241
- "Click 'Remove all'.",
242
- ],
243
- expectedBehaviour: "Quantity is fixed at 1 and removal is refused for the won line. 'Remove all' clears other lines but keeps this one.",
244
- expectedUiState: "The quantity stepper is absent or disabled on that line, and the remove control is refused with a stated reason. After 'Remove all', a message explicitly says the awaiting-payment line was kept.",
245
- endResult: "After reloading /cart the won-auction line is still present.",
246
- href: "/cart",
247
- },
248
- {
249
- key: "unpaid-win-forfeits",
250
- label: "An unpaid win past its deadline is forfeited and the buyer is told",
251
- roles: ["buyer"],
252
- startPage: "/user/orders",
253
- steps: [
254
- "Sign in as the buyer holding an unpaid won auction.",
255
- "Leave it unpaid until its payment deadline passes.",
256
- STEP_RELOAD_ORDERS,
257
- "Open the notifications bell.",
258
- ],
259
- expectedBehaviour: "The win is forfeited or cancelled rather than remaining payable, and the buyer is notified.",
260
- expectedUiState: "The order reads Forfeited or Cancelled and offers no payment control. A notification explains the forfeit.",
261
- endResult: "After reloading, the order still reads forfeited and the line is gone from /cart — it must not sit there payable forever.",
262
- href: "/user/orders",
263
- },
264
- ],
265
- },
266
- {
267
- pageKey: "payment-methods",
268
- pageLabel: "Making payments",
269
- href: "/checkout",
270
- cases: [
271
- {
272
- key: "cod-order-places",
273
- label: "A cash-on-delivery order can be placed and shows the COD fee before confirming",
274
- roles: ["buyer"],
275
- startPage: "/products/product-beyblade-burst-valkyrie",
276
- steps: [
277
- STEP_SIGNIN_BUYER,
278
- "Open /products/product-beyblade-burst-valkyrie and click 'Add to cart'.",
279
- "Open /checkout and complete the address step.",
280
- "Continue to the add-ons and fees step.",
281
- "Select 'Cash on Delivery'.",
282
- "Read every fee line in the order summary and note the total.",
283
- STEP_PLACE_ORDER,
284
- STEP_RELOAD_ORDERS,
285
- ],
286
- expectedBehaviour: "A COD order is created, and the COD handling fee and deposit are included in the recorded total.",
287
- expectedUiState: "Before confirming, the summary lists the COD handling fee and any deposit as their own lines, and the total includes them.",
288
- endResult: "After reloading /user/orders the order exists with a total exactly equal to the figure shown at checkout.",
289
- },
290
- {
291
- key: "manual-payment-proof-upload",
292
- label: "🛑 A manual (UPI) order reaches a page where proof can actually be uploaded",
293
- roles: ["buyer"],
294
- startPage: "/checkout",
295
- steps: [
296
- "Sign in as the buyer ash@pokemonpalace.in with product-beyblade-original-dranzer-s in the cart.",
297
- "Open /checkout and complete the address step.",
298
- "Select UPI / manual payment.",
299
- STEP_PLACE_ORDER,
300
- "Follow the redirect that appears after placing it.",
301
- "Read the UPI id and the countdown shown.",
302
- "Upload public/test-media/sample-image.png as payment proof.",
303
- "Reload the page.",
304
- ],
305
- expectedBehaviour: "The order is created awaiting manual payment, and the uploaded proof is attached to it for admin review.",
306
- expectedUiState: "The page shows a UPI id, a visible deadline countdown, and a working upload control. It must NOT read 'This order does not require manual payment upload' — that message on a manual order is the Root Cause #57 failure.",
307
- endResult: "After reloading, the uploaded proof is still shown attached to the order.",
308
- href: "/user/orders",
309
- },
310
- {
311
- key: "payment-page-reachable-later",
312
- label: "The payment page for an unpaid order is reachable again after navigating away",
313
- roles: ["buyer"],
314
- startPage: "/user/orders",
315
- steps: [
316
- "Sign in as the buyer holding an unpaid manual-payment order.",
317
- "Open the homepage without paying.",
318
- "Open /user/orders.",
319
- "Open the unpaid order.",
320
- ],
321
- expectedBehaviour: "The order detail exposes a route back to the payment and proof-upload page.",
322
- expectedUiState: "A 'Complete payment' or 'Re-upload proof' control is visible on the order detail.",
323
- endResult: "Following that control lands on the payment page for the same order, and it still shows the amount due after a reload.",
324
- href: "/user/orders",
325
- },
326
- {
327
- key: "fees-match-between-preview-and-order",
328
- label: "🛑 The total shown at checkout equals the total recorded on the order",
329
- roles: ["buyer"],
330
- startPage: "/checkout",
331
- steps: [
332
- STEP_SIGNIN_BUYER,
333
- "Add product-beyblade-burst-valkyrie (store-beyblade-arena) to the cart.",
334
- "Add prizedraw-beyblade-mystery-box (store-letitrip-official) to the cart, so the cart spans two sellers.",
335
- "Open /checkout and reach the payment step.",
336
- "Write down the exact total and every fee line.",
337
- STEP_PLACE_ORDER,
338
- "Open /user/orders and add up the totals of the orders just produced.",
339
- ],
340
- expectedBehaviour: "A two-seller cart splits into one order per seller, and the platform commission is charged ONCE for the checkout rather than once per seller.",
341
- expectedUiState: "The checkout summary shows a single platform-fee line, qualified by the number of stores where relevant.",
342
- endResult: "After reload, the sum of the recorded order totals equals the checkout figure to the rupee.",
343
- },
344
- {
345
- key: "coupon-applies-and-persists",
346
- label: "A coupon applied at checkout is reflected in the placed order",
347
- roles: ["buyer"],
348
- startPage: "/checkout",
349
- steps: [
350
- STEP_SIGNIN_BUYER,
351
- "Add product-beyblade-burst-valkyrie to the cart.",
352
- "Open /checkout and reach the payment step.",
353
- "Enter the coupon code ARENA25 and apply it.",
354
- "Note the discount line and the new total.",
355
- STEP_PLACE_ORDER,
356
- STEP_RELOAD_ORDERS,
357
- ],
358
- expectedBehaviour: "The discount is applied to the order that is created, and the coupon's usage count increments.",
359
- expectedUiState: "A discount line appears naming ARENA25, and the total drops accordingly before the order is placed.",
360
- endResult: "After reloading the order, ARENA25 and the same discount amount are still recorded on it.",
361
- },
362
- /*
363
- * PhonePe replaced Razorpay entirely in this migration. Unlike Razorpay,
364
- * PhonePe never hands the browser a verifiable signature — the checkout
365
- * iframe's own callback is not authoritative, and either the buyer's own
366
- * /api/payment/verify call OR the async webhook (buyer may be gone) can
367
- * be the one that actually places the order. A Firestore claim doc
368
- * (phonepeOrderClaims/{merchantOrderId}) makes whichever caller arrives
369
- * first the sole placer, which is the one behavior with no Razorpay
370
- * precedent and the reason these five cases exist as their own group.
371
- */
372
- {
373
- key: "phonepe-iframe-payment-completes",
374
- label: "🛑 A PhonePe online payment completes inside the checkout iframe and places the order",
375
- roles: ["buyer"],
376
- startPage: "/checkout",
377
- steps: [
378
- "Sign in as admin@letitrip.in / TempPass123!, open /admin/site, switch to the Shipping tab, and confirm the toggle reading 'PhonePe (online card/UPI) enabled — disabled by default, manual payment is the default' is ON. It is OFF on a fresh install, which is what that label is telling you.",
379
- STEP_SIGNIN_BUYER,
380
- "Open /products/product-beyblade-burst-valkyrie (₹999) and click 'Add to cart'.",
381
- "Open /checkout and complete the address step.",
382
- "On the payment step, click 'Pay Online (PhonePe)'.",
383
- "Complete the payment inside the PhonePe checkout iframe using a sandbox test instrument.",
384
- "Wait for the iframe to close and the page to react.",
385
- ],
386
- expectedBehaviour: "The iframe's own callback is NOT trusted — the app calls /api/payment/verify immediately afterward, which asks PhonePe's Order Status API what actually happened and only then places the order.",
387
- expectedUiState: "A brief 'processing' state appears after the iframe closes (this is the verify call in flight), then the page redirects to order confirmation with a success toast. It must not hang indefinitely or show a generic failure while the payment genuinely succeeded.",
388
- endResult: "After reloading /user/orders, exactly one order exists for this purchase with status reflecting a confirmed payment.",
389
- href: "/checkout",
390
- },
391
- {
392
- key: "phonepe-webhook-places-order-alone",
393
- label: "🛑 If the buyer leaves before /api/payment/verify runs, the PhonePe webhook alone places the order",
394
- roles: ["buyer"],
395
- startPage: "/checkout",
396
- steps: [
397
- "Confirm PhonePe is enabled (Site Settings → Shipping → 'PhonePe (online card/UPI) enabled').",
398
- STEP_SIGNIN_BUYER,
399
- "Open /products/product-beyblade-original-dranzer-s and click 'Add to cart'.",
400
- "Open /checkout, complete the address step, and click 'Pay Online (PhonePe)'.",
401
- "Complete the payment inside the PhonePe iframe using a sandbox test instrument.",
402
- "The instant the iframe reports success, close the browser tab entirely — before the app's own confirmation screen or processing state can appear.",
403
- "Wait about 30 seconds for PhonePe's server-to-server webhook to arrive.",
404
- "Sign back in and open /user/orders.",
405
- ],
406
- expectedBehaviour: "PhonePe never hands the browser a verifiable proof of payment, so with the tab closed before the buyer-present verify call ran, only the async webhook (POST /api/payment/webhook, event checkout.order.completed) is left to place the order — and it does, using the buyer identity packed into PhonePe's metaInfo at order-creation time rather than a session.",
407
- expectedUiState: "There is no UI to observe during this case — the tab is gone. The check is entirely in what /user/orders shows afterward.",
408
- endResult: "The order for product-beyblade-original-dranzer-s exists in /user/orders with a confirmed payment, even though the buyer's browser never received a success screen.",
409
- href: "/user/orders",
410
- },
411
- {
412
- key: "phonepe-verify-and-webhook-race-no-duplicate-order",
413
- label: "A PhonePe payment confirmed by BOTH the buyer's browser and the webhook produces exactly ONE order, never two",
414
- roles: ["buyer"],
415
- startPage: "/checkout",
416
- steps: [
417
- "Confirm PhonePe is enabled.",
418
- STEP_SIGNIN_BUYER,
419
- "Open /products/product-beyblade-x-dran-sword-video-demo and click 'Add to cart'.",
420
- "Open /checkout, complete the address step, and click 'Pay Online (PhonePe)'.",
421
- "Complete the payment inside the PhonePe iframe and let the tab stay open normally (do NOT close it) — the ordinary happy path, where the buyer's own verify call and PhonePe's webhook can both arrive for the same payment.",
422
- "After the confirmation page loads, open /user/orders and count how many orders exist for this one purchase.",
423
- ],
424
- expectedBehaviour: "A Firestore claim doc keyed on the payment's merchantOrderId, created with .create() (which throws on conflict), makes whichever of the two callers — the buyer's browser or the webhook — arrives first the sole placer of the order. The second caller's attempt is a no-op.",
425
- expectedUiState: "The confirmation page shows exactly one order.",
426
- expectedData: { ordersCreatedForThisPurchase: 1 },
427
- endResult: "After reloading /user/orders, still exactly one order exists for product-beyblade-x-dran-sword-video-demo from this checkout — not two, and not zero.",
428
- href: "/user/orders",
429
- },
430
- {
431
- key: "phonepe-failed-payment-creates-no-order",
432
- label: "A PhonePe payment the buyer abandons or fails produces NO order and the item stays in the cart",
433
- roles: ["buyer"],
434
- startPage: "/checkout",
435
- steps: [
436
- "Confirm PhonePe is enabled.",
437
- STEP_SIGNIN_BUYER,
438
- "Open /products/product-beyblade-metal-dark-bull-video-demo and click 'Add to cart'.",
439
- "Open /checkout, complete the address step, and click 'Pay Online (PhonePe)'.",
440
- "Inside the PhonePe iframe, either close it without paying or use a sandbox instrument that simulates a decline.",
441
- "Observe the checkout page's reaction.",
442
- "Open /user/orders.",
443
- ],
444
- expectedBehaviour: "A failed or abandoned PhonePe payment must never place an order — the webhook's checkout.order.failed handler only signals the failure, it never calls order placement, and a subsequent /api/payment/verify call reports the payment as not completed rather than creating one anyway.",
445
- expectedUiState: "The checkout page shows a payment-failed error and returns to the payment step rather than redirecting to a confirmation page.",
446
- expectedData: { ordersCreated: 0 },
447
- endResult: "After reloading /user/orders, no order exists for this attempt, and the item is still in /cart to retry.",
448
- href: "/cart",
449
- },
450
- {
451
- key: "phonepe-auto-refund-on-skipped-item",
452
- label: "🛑 An item dropped by the \"skip unavailable items\" policy on a paid PhonePe order is automatically refunded through PhonePe's real refund API",
453
- roles: ["buyer"],
454
- startPage: "/checkout",
455
- steps: [
456
- "Sign in as admin@letitrip.in / TempPass123! and confirm PhonePe is enabled on Site Settings, Shipping tab.",
457
- "🛑 The out-of-stock policy is NOT an admin setting — there is no Checkout tab in Site Settings, and no control by the name this step used to give. It is a BUYER choice made at checkout, under the heading 'If an item goes out of stock', offering \"Ship what's available and refund the rest\" and \"Cancel my whole order\". The first is already the default, so nothing needs changing; just confirm it is selected when you reach checkout.",
458
- STEP_SIGNIN_BUYER,
459
- "Add product-beyblade-burst-valkyrie (₹999, stock available) and product-beyblade-original-dranzer-s (₹1,499) to the cart.",
460
- "Open /checkout, complete the address step, and click 'Pay Online (PhonePe)'.",
461
- "While on the PhonePe iframe (before completing payment), have the admin or another session reduce product-beyblade-original-dranzer-s's stock to 0.",
462
- "Complete the PhonePe payment for the FULL cart total shown (both items) inside the iframe.",
463
- "Open the resulting order's detail page.",
464
- ],
465
- inputs: { policy: "Skip unavailable items", goesOutOfStock: "product-beyblade-original-dranzer-s" },
466
- expectedBehaviour: "PhonePe already captured payment for the whole cart before the stock check ran, so the value of the dropped item (₹1,499) is refunded back to the buyer automatically via a real PhonePe refund call (processRefundAction, reason 'not_received'), keyed off the order's own merchantOrderId — not just recorded as a database adjustment.",
467
- expectedUiState: "The order confirmation shows only product-beyblade-burst-valkyrie with a notice that product-beyblade-original-dranzer-s was unavailable and refunded. The order detail's refund history / status timeline shows a partial refund of ₹1,499 with reason 'not_received'.",
468
- endResult: "After reloading the order detail page, the ₹1,499 partial refund is still listed in the timeline. If the automatic refund call itself fails (rare), the order is flagged refundPending and an admin-inbox notification 'Automatic refund failed' appears instead — that is the documented fallback, not a silent loss of the buyer's money.",
469
- href: "/user/orders",
470
- },
471
- {
472
- key: "phonepe-manual-refund-has-no-admin-control",
473
- label: "🛑 There is currently no admin control that triggers a real PhonePe refund on a completed order — surfacing this, not asserting it works",
474
- roles: ["admin"],
475
- startPage: "/admin/orders",
476
- steps: [
477
- "Sign in as admin@letitrip.in / TempPass123!.",
478
- "Open any order paid via PhonePe from /admin/orders and open its detail/editor.",
479
- "Look for a control to issue a refund (a button, a 'Refund' action, or a status change to 'Refunded' with an amount field).",
480
- "If a 'Refunded' status option with a refund-amount field exists, set it, save, and reload the order.",
481
- ],
482
- expectedBehaviour: "A dedicated route (POST /api/admin/orders/[id]/refund) exists and does call PhonePe's real refund API when hit directly, but as of this migration nothing in the admin UI calls it. The generic order editor's status field can be set to 'Refunded' with a refund amount, but that PATCH goes through a schema (updateOrderSchema) that does not declare a refundAmount field at all — Zod's default object schema silently strips it, so the amount typed in is never persisted and PhonePe is never contacted.",
483
- expectedUiState: "Setting status to 'Refunded' with an amount appears to save successfully (a 200 / success toast), which is the failure mode to watch for — a save that LOOKS like it worked.",
484
- endResult: "After reloading the order, confirm whether the refund amount you entered is actually present on the order. If it is missing, this case should be answered 'no' — an admin currently has no working way to manually refund a PhonePe payment, and the money-moving path that exists (POST /api/admin/orders/[id]/refund) is only reachable automatically, from the checkout out-of-stock flow, never from a click in the dashboard.",
485
- href: "/admin/orders",
486
- },
487
- {
488
- key: "phonepe-preorder-deposit-charge-matches-shown-amount",
489
- label: "A pre-order paid via PhonePe charges exactly the shown DEPOSIT amount, never the full listing price",
490
- roles: ["buyer"],
491
- startPage: "/pre-orders/preorder-beyblade-x-bx-08-wave",
492
- steps: [
493
- "Confirm PhonePe is enabled.",
494
- STEP_SIGNIN_BUYER,
495
- "Open /pre-orders/preorder-beyblade-x-bx-08-wave (listed at ₹799, 25% deposit) and click its buy/reserve control.",
496
- "Open /checkout and complete the address step.",
497
- "On the payment step, note the exact deposit amount shown in the Order Summary.",
498
- "Click 'Pay Online (PhonePe)' and read the amount shown inside the PhonePe iframe before paying.",
499
- "Complete the payment.",
500
- "Open the resulting order's detail page.",
501
- ],
502
- inputs: { productId: "preorder-beyblade-x-bx-08-wave", listedPrice: 799, depositPercent: 25 },
503
- expectedBehaviour: "The PhonePe order is created for the deposit amount only (roughly 25% of ₹799), never the full ₹799 — a pre-order's checkout flow computes the deposit before ever calling PhonePe's create-order API.",
504
- expectedUiState: "The amount inside the PhonePe iframe is identical, to the rupee, to the deposit figure shown in the Order Summary a moment earlier — not the full listing price.",
505
- endResult: "The order detail page shows the deposit amount as paid and the remaining balance as due later, matching what was charged through PhonePe.",
506
- href: "/user/orders",
507
- },
508
- ],
509
- },
510
- {
511
- pageKey: "blockers",
512
- pageLabel: "Blockers and refusals",
513
- href: "/cart",
514
- cases: [
515
- {
516
- key: "out-of-stock-blocked",
517
- label: "A sold-out item cannot be added to the cart or checked out",
518
- roles: ["buyer"],
519
- startPage: "/products/product-beyblade-burst-valtryek-v3-sold-out",
520
- steps: [
521
- STEP_SIGNIN_BUYER,
522
- "Open /products/product-beyblade-burst-valtryek-v3-sold-out, a deliberately sold-out fixture.",
523
- "Attempt to add it to the cart.",
524
- ],
525
- expectedBehaviour: "The add is refused and no cart line is created for an unavailable item.",
526
- expectedUiState: "The add control is disabled or replaced by a Sold Out state, with the reason stated on the page.",
527
- endResult: "After reloading /cart the item is absent.",
528
- href: "/products/product-beyblade-burst-valtryek-v3-sold-out",
529
- },
530
- {
531
- /*
532
- * 🛑 THIS CASE MOVED FROM THE CART TO THE BUNDLE EDITOR, 2026-09-15.
533
- *
534
- * It used to open a deliberately-banned pair of fixtures — two products
535
- * in different stores wired into one group — and assert that the cart's
536
- * picker refused them. Those fixtures are gone, and no replacement can
537
- * be seeded: the guard the case tests is applied at SAVE time, so a
538
- * cross-store group cannot exist to be opened.
539
- *
540
- * The refusal is therefore tested where it actually fires — an admin
541
- * ATTEMPTS the banned shape and is refused before it is stored.
542
- */
543
- key: "cross-store-group-refused",
544
- label: "A bundle whose members span two stores is refused when saved",
545
- roles: ["admin"],
546
- startPage: "/admin/bundles",
547
- steps: [
548
- "Sign in as admin@letitrip.in / TempPass123!.",
549
- "Open /admin/bundles and start a new bundle.",
550
- "Name it 'QA cross-store bundle'.",
551
- "Add THREE members, because the form refuses fewer: product-beyblade-burst-valkyrie and product-beyblade-x-wizard-arrow (both store-beyblade-arena), plus prizedraw-beyblade-mystery-box (store-letitrip-official) — a different store.",
552
- "🛑 Two members is not enough to reach the cross-store check at all. BUNDLE_MIN_ITEMS is 3, and a two-member save is refused with 'Select at least 3 products (currently 2).' — a refusal for the wrong reason, which reads as a pass if the message is not read.",
553
- "Set the bundle price to 1000 and click Save.",
554
- ],
555
- inputs: { bundleName: "QA cross-store bundle", bundlePrice: 1000 },
556
- expectedBehaviour: "The save is refused because an order belongs to exactly one seller, and a bundle spanning two stores would produce an order containing another seller's product — with no notification, no shipping resolution and no payout for that second seller. The refusal is at save time, not at add-to-cart time, so bundles already stored keep working.",
557
- expectedUiState: "An error names how many sellers the members span, or at least states that a bundle cannot span sellers. Read the message: a minimum-members error means the cross-store guard never ran. The editor stays open with the entered members intact rather than clearing.",
558
- endResult: "After reloading /admin/bundles there is no bundle named 'QA cross-store bundle'.",
559
- href: "/admin/bundles",
560
- },
561
- {
562
- key: "classified-has-no-cart",
563
- label: "A classified listing offers contact, never Add to Cart",
564
- roles: ["buyer"],
565
- startPage: "/classified/classified-beyblade-stadium-set",
566
- steps: [
567
- STEP_SIGNIN_BUYER,
568
- "Open /classified/classified-beyblade-stadium-set.",
569
- "Read every action control on the listing.",
570
- ],
571
- expectedBehaviour: "A classified is a contact-only listing type with no cart path at all.",
572
- expectedUiState: "Exactly one of 'Make Offer', 'Request to Buy' or a contact-seller control is present. 'Add to Cart' and 'Buy Now' are ABSENT, not disabled.",
573
- endResult: "Nothing is persisted; this is a read-only check of which controls render.",
574
- href: "/classified/classified-beyblade-stadium-set",
575
- },
576
- {
577
- key: "guest-gated-action-prompts-signin",
578
- label: "A gated action while signed out prompts sign-in and then completes the original action",
579
- roles: ["guest"],
580
- startPage: "/products/product-beyblade-burst-valkyrie",
581
- steps: [
582
- "Sign out completely.",
583
- "Open /products/product-beyblade-burst-valkyrie.",
584
- "Click the wishlist heart.",
585
- "Sign in as ash@pokemonpalace.in through the prompt that appears.",
586
- ],
587
- expectedBehaviour: "The click is held while signing in and then replayed, so the item ends up on the wishlist.",
588
- expectedUiState: "A sign-in prompt appears rather than the click doing nothing. After signing in, the heart shows the saved state.",
589
- endResult: "After reloading /wishlist the item is listed.",
590
- href: "/products/product-beyblade-burst-valkyrie",
591
- },
592
- {
593
- key: "banned-account-blocked",
594
- label: "A disabled account cannot sign in and is told why",
595
- roles: ["guest"],
596
- startPage: "/auth/login",
597
- steps: [
598
- "Sign out completely.",
599
- "Open /auth/login.",
600
- "Enter the credentials of an account an admin has disabled.",
601
- "Click 'Sign in'.",
602
- ],
603
- expectedBehaviour: "Authentication is refused for a disabled account; no session cookie is issued.",
604
- expectedUiState: "A clear message states the account is disabled. The form must not appear to succeed and then fail on the next page.",
605
- endResult: "After reloading, the user is still signed out and /user/profile redirects to login.",
606
- href: "/auth/login",
607
- },
608
- ],
609
- },
610
- ];