@mohasinac/appkit 4.34.1 → 4.35.1

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 (243) hide show
  1. package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +32 -2
  2. package/dist/features/auth/actions/profile-actions.d.ts +14 -1
  3. package/dist/features/auth/actions/profile-actions.js +16 -2
  4. package/dist/features/tester/components/TesterChecklistStepRow.d.ts +9 -1
  5. package/dist/features/tester/components/TesterChecklistStepRow.js +31 -2
  6. package/dist/features/tester/components/TesterHubView.js +8 -0
  7. package/dist/features/tester/schemas/firestore.d.ts +109 -0
  8. package/dist/features/tester/schemas/firestore.js +14 -0
  9. package/dist/features/tester/seed-data/_money-flows.d.ts +23 -0
  10. package/dist/features/tester/seed-data/_money-flows.js +430 -0
  11. package/dist/features/tester/seed-data/authored/_types.d.ts +33 -0
  12. package/dist/features/tester/seed-data/authored/_types.js +35 -0
  13. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +2 -0
  14. package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +207 -0
  15. package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +2 -0
  16. package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +298 -0
  17. package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +2 -0
  18. package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +33 -0
  19. package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +2 -0
  20. package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +138 -0
  21. package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +2 -0
  22. package/dist/features/tester/seed-data/authored/addresses__address-filters.js +36 -0
  23. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +2 -0
  24. package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +75 -0
  25. package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +2 -0
  26. package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +72 -0
  27. package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +2 -0
  28. package/dist/features/tester/seed-data/authored/addresses__state-picker.js +54 -0
  29. package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +2 -0
  30. package/dist/features/tester/seed-data/authored/addresses__unban-request.js +39 -0
  31. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +2 -0
  32. package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +226 -0
  33. package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +2 -0
  34. package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +82 -0
  35. package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +2 -0
  36. package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +177 -0
  37. package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +2 -0
  38. package/dist/features/tester/seed-data/authored/admin__bundles.js +97 -0
  39. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +2 -0
  40. package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +232 -0
  41. package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +2 -0
  42. package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +306 -0
  43. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +2 -0
  44. package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +158 -0
  45. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +2 -0
  46. package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +78 -0
  47. package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +2 -0
  48. package/dist/features/tester/seed-data/authored/admin__content-deletes.js +261 -0
  49. package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +2 -0
  50. package/dist/features/tester/seed-data/authored/admin__content-marketing.js +151 -0
  51. package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +2 -0
  52. package/dist/features/tester/seed-data/authored/admin__coupons.js +214 -0
  53. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +2 -0
  54. package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +160 -0
  55. package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +2 -0
  56. package/dist/features/tester/seed-data/authored/admin__media-watermark.js +104 -0
  57. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +2 -0
  58. package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +350 -0
  59. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +2 -0
  60. package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +105 -0
  61. package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +2 -0
  62. package/dist/features/tester/seed-data/authored/admin__site-system.js +590 -0
  63. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +2 -0
  64. package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +235 -0
  65. package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +2 -0
  66. package/dist/features/tester/seed-data/authored/admin__users-trust.js +569 -0
  67. package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +2 -0
  68. package/dist/features/tester/seed-data/authored/buying__bidding.js +417 -0
  69. package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +2 -0
  70. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +653 -0
  71. package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +2 -0
  72. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +533 -0
  73. package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +2 -0
  74. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +379 -0
  75. package/dist/features/tester/seed-data/authored/buying__cart.d.ts +2 -0
  76. package/dist/features/tester/seed-data/authored/buying__cart.js +1171 -0
  77. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +2 -0
  78. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +140 -0
  79. package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +2 -0
  80. package/dist/features/tester/seed-data/authored/buying__my-orders.js +257 -0
  81. package/dist/features/tester/seed-data/authored/buying__offers.d.ts +2 -0
  82. package/dist/features/tester/seed-data/authored/buying__offers.js +1111 -0
  83. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +2 -0
  84. package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +252 -0
  85. package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +2 -0
  86. package/dist/features/tester/seed-data/authored/buying__product-detail.js +387 -0
  87. package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +2 -0
  88. package/dist/features/tester/seed-data/authored/buying__return-request.js +152 -0
  89. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +2 -0
  90. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +242 -0
  91. package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +2 -0
  92. package/dist/features/tester/seed-data/authored/buying__reviews.js +113 -0
  93. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +2 -0
  94. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +283 -0
  95. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +2 -0
  96. package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +167 -0
  97. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +2 -0
  98. package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +90 -0
  99. package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +2 -0
  100. package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +344 -0
  101. package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +2 -0
  102. package/dist/features/tester/seed-data/authored/community-support__public-profile.js +53 -0
  103. package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +2 -0
  104. package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +76 -0
  105. package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +2 -0
  106. package/dist/features/tester/seed-data/authored/content-discovery__blog.js +93 -0
  107. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +2 -0
  108. package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +149 -0
  109. package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +2 -0
  110. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +121 -0
  111. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +2 -0
  112. package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +207 -0
  113. package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +2 -0
  114. package/dist/features/tester/seed-data/authored/content-discovery__events.js +318 -0
  115. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +2 -0
  116. package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +65 -0
  117. package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +2 -0
  118. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +147 -0
  119. package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +2 -0
  120. package/dist/features/tester/seed-data/authored/content-discovery__search.js +332 -0
  121. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +2 -0
  122. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +53 -0
  123. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +2 -0
  124. package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +52 -0
  125. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +2 -0
  126. package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +35 -0
  127. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +2 -0
  128. package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +141 -0
  129. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +2 -0
  130. package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +35 -0
  131. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +2 -0
  132. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +95 -0
  133. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +2 -0
  134. package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +191 -0
  135. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +2 -0
  136. package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +158 -0
  137. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +2 -0
  138. package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +106 -0
  139. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +2 -0
  140. package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +88 -0
  141. package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +2 -0
  142. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +204 -0
  143. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +2 -0
  144. package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +301 -0
  145. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +2 -0
  146. package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +407 -0
  147. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +2 -0
  148. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +214 -0
  149. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +2 -0
  150. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +275 -0
  151. package/dist/features/tester/seed-data/authored/index.d.ts +2 -0
  152. package/dist/features/tester/seed-data/authored/index.js +237 -0
  153. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +2 -0
  154. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +102 -0
  155. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +2 -0
  156. package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +50 -0
  157. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +2 -0
  158. package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +66 -0
  159. package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +2 -0
  160. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +115 -0
  161. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +2 -0
  162. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +136 -0
  163. package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.d.ts +2 -0
  164. package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.js +69 -0
  165. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +2 -0
  166. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +263 -0
  167. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +2 -0
  168. package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +102 -0
  169. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +2 -0
  170. package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +234 -0
  171. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +2 -0
  172. package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +126 -0
  173. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +2 -0
  174. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +255 -0
  175. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +2 -0
  176. package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +59 -0
  177. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +2 -0
  178. package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +88 -0
  179. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +2 -0
  180. package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +51 -0
  181. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +2 -0
  182. package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +35 -0
  183. package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +2 -0
  184. package/dist/features/tester/seed-data/authored/selling__become-seller.js +94 -0
  185. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +2 -0
  186. package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +107 -0
  187. package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +2 -0
  188. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +285 -0
  189. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +2 -0
  190. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +326 -0
  191. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +2 -0
  192. package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +136 -0
  193. package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +2 -0
  194. package/dist/features/tester/seed-data/authored/selling__media-limits.js +128 -0
  195. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +2 -0
  196. package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +167 -0
  197. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +2 -0
  198. package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +117 -0
  199. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +2 -0
  200. package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +88 -0
  201. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +2 -0
  202. package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +151 -0
  203. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +2 -0
  204. package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +105 -0
  205. package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +2 -0
  206. package/dist/features/tester/seed-data/authored/selling__seller-guide.js +33 -0
  207. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +2 -0
  208. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +347 -0
  209. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +2 -0
  210. package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +166 -0
  211. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +2 -0
  212. package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +89 -0
  213. package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +2 -0
  214. package/dist/features/tester/seed-data/authored/selling__seller-orders.js +195 -0
  215. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +2 -0
  216. package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +180 -0
  217. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +2 -0
  218. package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +164 -0
  219. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +2 -0
  220. package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +116 -0
  221. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +2 -0
  222. package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +111 -0
  223. package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +2 -0
  224. package/dist/features/tester/seed-data/authored/seo__og-images.js +91 -0
  225. package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +2 -0
  226. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +122 -0
  227. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +2 -0
  228. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +105 -0
  229. package/dist/features/tester/seed-data/carts-tester-seed-data.d.ts +3 -0
  230. package/dist/features/tester/seed-data/carts-tester-seed-data.js +70 -0
  231. package/dist/features/tester/seed-data/index.d.ts +1 -0
  232. package/dist/features/tester/seed-data/index.js +1 -0
  233. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +744 -1
  234. package/dist/seed/carousel-slides-seed-data.js +1 -1
  235. package/dist/seed/cart-seed-data.js +11 -0
  236. package/dist/seed/index.d.ts +1 -1
  237. package/dist/seed/index.js +1 -1
  238. package/dist/seed/manifest.js +2 -2
  239. package/dist/seed/notifications-seed-data.js +5 -1
  240. package/dist/seed/products-standard-seed-data.js +2 -2
  241. package/dist/seed/reviews-seed-data.js +6 -1
  242. package/package.json +1 -1
  243. package/scripts/seed-cli.mjs +752 -746
@@ -0,0 +1,242 @@
1
+ /*
2
+ * WHY: Authored six-part procedures for the buying/reviews-pagination page.
3
+ * WHAT: 14 case(s), keyed by full checklist id.
4
+ *
5
+ * Written by hand, case by case, against the label each one states. There is no
6
+ * generator: the authoring scripts were deleted once it was clear they were
7
+ * scaffolding around work that is simply writing.
8
+ *
9
+ * 🛑 THESE REVIEWS PAGINATE INSIDE A TAB, so their state deliberately does NOT go
10
+ * in the URL — the product page's own tab and filter state owns that space. That
11
+ * makes the usual "reload and check the URL" assertion wrong here, and it is why
12
+ * several cases check that page 2 holds DIFFERENT rows rather than checking a
13
+ * query parameter. Identical rows on both pages is what a pager that moves a
14
+ * label without moving the query looks like.
15
+ *
16
+ * A filter or sort whose field is not marked sortable or filterable is dropped
17
+ * silently, so the control changes and nothing moves.
18
+ *
19
+ * @tag domain:tester
20
+ * @tag layer:seed
21
+ * @tag pattern:none
22
+ * @tag access:server-only
23
+ * @tag consumers:seed-data/authored/index.ts
24
+ * @tag sideEffects:none
25
+ */
26
+ export const authored = {
27
+ "checklist-buying-reviews-pagination-detail-tab-paginates": {
28
+ roles: ["guest"],
29
+ startPage: "/products/product-beyblade-burst-valkyrie",
30
+ steps: [
31
+ "Open /products/product-beyblade-burst-valkyrie in a private window.",
32
+ "Open the reviews tab and count the reviews shown.",
33
+ "Read the total review count stated on the page.",
34
+ "Look for a pagination control and read what it offers.",
35
+ "Click through to the last page and count the reviews on it.",
36
+ "Add up the per-page counts and compare against the stated total.",
37
+ ],
38
+ expectedBehaviour: "The tab shows a bounded page of reviews with a pager, rather than every review at once. The per-page counts must sum to the stated total — a total computed from a different query than the rows is how a pager offers a page that returns nothing.",
39
+ expectedUiState: "A pager is present when the review count exceeds one page. The pages' counts sum to the stated total. A pager offering more pages than the total supports is the failure, and the last page will be empty.",
40
+ endResult: "Read-only; nothing persists.",
41
+ },
42
+ "checklist-buying-reviews-pagination-detail-tab-newest-first": {
43
+ roles: ["guest"],
44
+ startPage: "/products/product-beyblade-burst-valkyrie",
45
+ steps: [
46
+ "Open /products/product-beyblade-burst-valkyrie in a private window.",
47
+ "Open the reviews tab without changing any control.",
48
+ "Read the date on every review down the page.",
49
+ "Check the dates descend from top to bottom.",
50
+ "Read the sort control and check its selection matches what is shown.",
51
+ "Go to page 2 and check its dates are all older than page 1's oldest.",
52
+ ],
53
+ expectedBehaviour: "The default is newest first, and the sort control shows that as its selection. Where the server's default and the control's default are computed separately the first paint shows one order while the control claims another — and because the client caches the server's data indefinitely, the disagreement never resolves itself.",
54
+ expectedUiState: "Dates descend down page 1, the sort control reads newest-first, and page 2's newest date is older than page 1's oldest. An order that does not match the control's stated selection is the failure.",
55
+ endResult: "Read-only; nothing persists.",
56
+ },
57
+ "checklist-buying-reviews-pagination-detail-tab-page-2-differs": {
58
+ roles: ["guest"],
59
+ startPage: "/products/product-beyblade-burst-valkyrie",
60
+ steps: [
61
+ "Open /products/product-beyblade-burst-valkyrie in a private window.",
62
+ "Open the reviews tab and write down every review title on page 1.",
63
+ "Click to page 2.",
64
+ "Write down every review title on page 2.",
65
+ "Compare the two lists.",
66
+ "Return to page 1 and check it shows its original titles again.",
67
+ ],
68
+ expectedBehaviour: "Page 2 fetches the next slice. A pager that updates its own label without moving the query renders the same rows under a different number — which looks like working pagination until the titles are actually compared.",
69
+ expectedUiState: "No title appears on both pages. Returning to page 1 restores its original set. Identical titles on both pages is the exact failure this case exists for.",
70
+ expectedData: { overlappingTitles: 0 },
71
+ endResult: "Read-only; nothing persists.",
72
+ },
73
+ "checklist-buying-reviews-pagination-detail-tab-url-unchanged": {
74
+ roles: ["guest"],
75
+ startPage: "/products/product-beyblade-burst-valkyrie",
76
+ steps: [
77
+ "Open /products/product-beyblade-burst-valkyrie in a private window and read the URL.",
78
+ "Open the reviews tab and read the URL again.",
79
+ "Click to page 2 and read the URL.",
80
+ "Apply a rating filter and read the URL.",
81
+ "Reload the page and read which tab and which page of reviews are shown.",
82
+ ],
83
+ expectedBehaviour: "Review pagination is tab-local and deliberately stays out of the URL — the product page's own tab and filter state owns that space, and pushing a review page number into it would put a second owner in the same place. So a reload returning to page 1 is CORRECT here rather than a bug.",
84
+ expectedUiState: "The URL does not gain a review page or rating parameter. After the reload the reviews tab opens at page 1 with no filter. A review page number appearing in the URL is the finding, not its absence.",
85
+ endResult: "Read-only; nothing persists. This is the one listing in the app where losing state on reload is the intended behaviour.",
86
+ },
87
+ "checklist-buying-reviews-pagination-detail-tab-sort": {
88
+ roles: ["guest"],
89
+ startPage: "/products/product-beyblade-burst-valkyrie",
90
+ steps: [
91
+ "Open /products/product-beyblade-burst-valkyrie in a private window and open the reviews tab.",
92
+ "Read the sort control's options and write them down.",
93
+ "Write down the review titles in the default order.",
94
+ "Select each other sort option in turn, writing down the resulting order each time.",
95
+ "Compare each against the default.",
96
+ "Write down any option that leaves the order unchanged.",
97
+ ],
98
+ expectedBehaviour: "Every sort option reorders the reviews. An option whose field is not marked sortable is dropped before the query runs, so the control's selection changes and nothing moves — and a list that happens to already be in that order makes the failure invisible unless the titles are compared.",
99
+ expectedUiState: "Each option produces a visibly different order from the default. An option that changes nothing is the finding, named specifically.",
100
+ expectedData: { inertSortOptions: 0 },
101
+ endResult: "Read-only; nothing persists.",
102
+ },
103
+ "checklist-buying-reviews-pagination-detail-tab-rating-filter": {
104
+ roles: ["guest"],
105
+ startPage: "/products/product-beyblade-burst-valkyrie",
106
+ steps: [
107
+ "Open /products/product-beyblade-burst-valkyrie in a private window and open the reviews tab.",
108
+ "Note the unfiltered review count.",
109
+ "Filter to 5-star reviews and read the count and every review's rating.",
110
+ "Filter to 1-star and read the count and ratings.",
111
+ "Filter to a rating no review has and read what is shown.",
112
+ "Clear the filter and check the original count returns.",
113
+ ],
114
+ expectedBehaviour: "The rating filter narrows to exactly that rating. A filter value with no matching reviews returns an empty state rather than the unfiltered list — a filter that silently shows everything when it matches nothing is indistinguishable from one that is not filtering at all.",
115
+ expectedUiState: "Each rating filter returns only reviews of that rating and a lower count. A rating with no reviews shows a named empty state, not every review. Clearing restores the original count.",
116
+ expectedData: { emptyRatingShowsAll: false },
117
+ endResult: "Read-only; nothing persists.",
118
+ },
119
+ "checklist-buying-reviews-pagination-detail-tab-summary-stable": {
120
+ roles: ["guest"],
121
+ startPage: "/products/product-beyblade-burst-valkyrie",
122
+ steps: [
123
+ "Open /products/product-beyblade-burst-valkyrie in a private window and open the reviews tab.",
124
+ "Read the rating summary — the average, the total count and any per-star breakdown.",
125
+ "Filter to 5-star reviews and read the summary again.",
126
+ "Go to page 2 and read the summary again.",
127
+ "Change the sort and read the summary again.",
128
+ "Compare all four readings.",
129
+ ],
130
+ expectedBehaviour: "The summary describes the whole review set and does not follow the filter, the page or the sort. A summary recomputed from the visible rows reads 5.0 out of 5 the moment a 5-star filter is applied — which is a true statement about the rows on screen and a false one about the product.",
131
+ expectedUiState: "The average, total and breakdown are identical in all four readings. A summary that changes with the filter is the failure, and it is the one that misrepresents the product.",
132
+ expectedData: { summaryChangesWithFilter: false },
133
+ endResult: "Read-only; nothing persists.",
134
+ },
135
+ "checklist-buying-reviews-pagination-detail-tab-filters-all-work": {
136
+ roles: ["guest"],
137
+ startPage: "/products/product-beyblade-burst-valkyrie",
138
+ steps: [
139
+ "Open /products/product-beyblade-burst-valkyrie in a private window and open the reviews tab.",
140
+ "Read every filter control offered and write the list down.",
141
+ "Note the unfiltered count.",
142
+ "Apply each filter in turn and read the resulting count and rows.",
143
+ "Write down any filter that leaves the count unchanged.",
144
+ "Apply two filters together and check the result is narrower than either alone.",
145
+ ],
146
+ expectedBehaviour: "Every filter offered actually narrows. A filter can render, count toward a filter badge and change nothing — that happens when it emits a field the query allowlist does not carry, or one the document does not have, and neither failure raises anything.",
147
+ expectedUiState: "Each filter visibly reduces the count and its rows respect it. Two together are narrower than either. A filter leaving the count identical is the finding, named specifically.",
148
+ expectedData: { inertFilters: 0 },
149
+ endResult: "Read-only; nothing persists.",
150
+ },
151
+ "checklist-buying-reviews-pagination-date-range-sort-options": {
152
+ roles: ["guest"],
153
+ startPage: "/products/product-beyblade-burst-valkyrie",
154
+ steps: [
155
+ "Open /products/product-beyblade-burst-valkyrie in a private window and open the reviews tab.",
156
+ "Read whether a date-range filter is offered.",
157
+ "Set a range covering only the oldest reviews and read the count and dates.",
158
+ "Set a range covering only the newest and read the count and dates.",
159
+ "Set a range in which no review falls and read what is shown.",
160
+ "Combine a date range with a sort and check both apply together.",
161
+ ],
162
+ expectedBehaviour: "A date range filters on the review's published date and combines with the sort. A date field that is filterable but lacks a value parser is the classic silent failure here: the range is sent as a plain string, the stored value is a timestamp, and the comparison matches NOTHING while raising no error.",
163
+ expectedUiState: "Each range returns reviews whose dates fall inside it. An empty range shows an empty state rather than everything. A range that returns ZERO reviews when reviews demonstrably fall inside it is the parser failure.",
164
+ expectedData: { rangeReturnsZeroIncorrectly: false },
165
+ endResult: "Read-only; nothing persists.",
166
+ },
167
+ "checklist-buying-reviews-pagination-other-listing-types-paginate": {
168
+ roles: ["guest"],
169
+ startPage: "/auctions/auction-beyblade-x-shark-edge",
170
+ steps: [
171
+ "Open /auctions/auction-beyblade-x-shark-edge in a private window and open its reviews tab.",
172
+ "Check a pager and the same filter and sort controls are present.",
173
+ "Open /pre-orders/preorder-beyblade-x-bx-08-wave and check the same.",
174
+ "Open /prize-draws/prizedraw-beyblade-mystery-box and check the same.",
175
+ "Open /classified/classified-beyblade-stadium-set and check the same.",
176
+ "Write down any listing type whose reviews tab lacks a control the others have.",
177
+ ],
178
+ expectedBehaviour: "Every listing type's detail page renders the same reviews component with the same controls. A type missing the pager or the filters has a local copy of the tab rather than the shared one, and a local copy drifts the first time the shared one changes.",
179
+ expectedUiState: "All four types show the same pager, filter and sort controls in their reviews tabs. A type missing one is the finding, named by type and by control.",
180
+ endResult: "Read-only; nothing persists.",
181
+ },
182
+ "checklist-buying-reviews-pagination-auction-store-reviews-paginated": {
183
+ roles: ["guest"],
184
+ startPage: "/stores/store-beyblade-arena",
185
+ steps: [
186
+ "Open /stores/store-beyblade-arena in a private window and open its reviews tab.",
187
+ "Count the reviews shown and read the stated total.",
188
+ "Check a pager is present and click to page 2.",
189
+ "Write down the titles on both pages and compare.",
190
+ "Check the store's aggregate rating does not change between pages.",
191
+ "Apply a rating filter and check the aggregate still does not change.",
192
+ ],
193
+ expectedBehaviour: "Store reviews paginate like product reviews, and the store's aggregate rating describes every review rather than the visible page. The same summary-stability rule applies here as on a product — an aggregate that follows the filter misrepresents the store.",
194
+ expectedUiState: "A pager is present, page 2 holds different titles, and the aggregate is identical across pages and under a filter.",
195
+ expectedData: { overlappingTitles: 0 },
196
+ endResult: "Read-only; nothing persists.",
197
+ },
198
+ "checklist-buying-reviews-pagination-store-reviews-tab-url-state": {
199
+ roles: ["guest"],
200
+ startPage: "/stores/store-beyblade-arena",
201
+ steps: [
202
+ "Open /stores/store-beyblade-arena in a private window and read the URL.",
203
+ "Open the reviews tab and read the URL again.",
204
+ "Click to page 2 and read the URL.",
205
+ "Copy the URL, open it in a new tab, and read which tab and page load.",
206
+ "Press the browser back button and read where it lands.",
207
+ ],
208
+ expectedBehaviour: "A store's TAB is a real route with its own URL — that is what makes each tab bookmarkable — while the review page number within it stays tab-local, exactly as on a product page. So the URL names the reviews tab and not the review page.",
209
+ expectedUiState: "The URL changes to name the reviews tab and the copied URL opens on that tab. The review page number is not in the URL, so the copy opens at page 1. Back returns to the previous tab in one press.",
210
+ endResult: "Read-only; nothing persists beyond the URL.",
211
+ },
212
+ "checklist-buying-reviews-pagination-reviews-index-unchanged": {
213
+ roles: ["guest"],
214
+ startPage: "/reviews",
215
+ steps: [
216
+ "Open /reviews in a private window and read the page.",
217
+ "Read the controls it offers — search, filters, sort, pagination.",
218
+ "Apply a filter and read the URL.",
219
+ "Click to page 2 and read the URL.",
220
+ "Copy the URL, open it in a new tab, and check the same filter and page load.",
221
+ "Reload and check the state survives.",
222
+ ],
223
+ expectedBehaviour: "The standalone reviews index is an ordinary listing page, so its state DOES live in the URL — unlike the tab-embedded versions. The two behave differently on purpose: a standalone listing is shareable, a tab-local pager would be a second owner of the page's URL state.",
224
+ expectedUiState: "Filters, sort and page all appear in the URL, the copied URL reproduces them, and a reload preserves them. State lost on reload is a failure here, where on a product's reviews tab it is correct.",
225
+ endResult: "Read-only; nothing persists beyond the URL.",
226
+ },
227
+ "checklist-buying-reviews-pagination-empty-state": {
228
+ roles: ["guest"],
229
+ startPage: "/products/product-tester-standard-3",
230
+ steps: [
231
+ "Sign in as tester@letitrip.in / TempPass123! so sandbox content is visible.",
232
+ "Open a product that has no reviews and open its reviews tab.",
233
+ "Read what is shown.",
234
+ "Check whether a pager, filters or a sort control are rendered over the empty list.",
235
+ "Read the rating summary and check it reads as no reviews rather than zero out of five.",
236
+ "Apply a filter that matches nothing on a product that DOES have reviews and compare the two empty states.",
237
+ ],
238
+ expectedBehaviour: "A product with no reviews shows a named empty state, and controls that cannot act on anything are not rendered over it. The two empty states are different facts — 'no reviews yet' invites the buyer to write one, 'no reviews match this filter' invites them to clear it — and one message cannot say both.",
239
+ expectedUiState: "The no-reviews product shows a message inviting a review, with no pager. The filtered-to-nothing case shows a message about the filter. A rating summary reading '0 out of 5' where there are no reviews is the failure — that is a rating, and no rating exists.",
240
+ endResult: "Read-only; nothing persists.",
241
+ },
242
+ };
@@ -0,0 +1,2 @@
1
+ import type { AuthoredCase } from "./_types";
2
+ export declare const authored: Record<string, AuthoredCase>;
@@ -0,0 +1,113 @@
1
+ /*
2
+ * WHY: Authored six-part procedures for the buying/reviews checklist page.
3
+ * WHAT: 5 case(s), keyed by full checklist id.
4
+ *
5
+ * Written by hand, case by case, against the label each one states. There is no
6
+ * generator: the authoring scripts were deleted once it was clear they were
7
+ * scaffolding around work that is simply writing.
8
+ *
9
+ * 🛑 A REVIEW'S IMAGES ARE PLAIN URL STRINGS. A renderer that expects objects and
10
+ * reads a nested property off each string gets undefined for every one, so every
11
+ * review photo on every surface falls back to a placeholder at once — the grid,
12
+ * the lightbox, the thumbnail strip, the modal and two separate server-side
13
+ * builders that each re-derived the same wrong transform independently.
14
+ *
15
+ * @tag domain:tester
16
+ * @tag layer:seed
17
+ * @tag pattern:none
18
+ * @tag access:server-only
19
+ * @tag consumers:seed-data/authored/index.ts
20
+ * @tag sideEffects:none
21
+ */
22
+ export const authored = {
23
+ "checklist-buying-reviews-leave-review": {
24
+ roles: ["buyer"],
25
+ startPage: "/user/orders",
26
+ steps: [
27
+ "Sign in as tester@letitrip.in / TempPass123!.",
28
+ "Open /user/orders and open a delivered order.",
29
+ "Use the control that leaves a review on one of its items.",
30
+ "Submit with no rating and no text, and read where the errors appear.",
31
+ "Select 4 stars, type 'QA Review leave-review' as the title and 'Written by the tester checklist.' as the body, and attach public/test-media/sample-image.png.",
32
+ "Submit and RELOAD.",
33
+ "Open the product's public page and find the review.",
34
+ "Read whether it carries a verified-purchase marker.",
35
+ ],
36
+ inputs: {
37
+ rating: 4,
38
+ title: "QA Review leave-review",
39
+ body: "Written by the tester checklist.",
40
+ image: "public/test-media/sample-image.png",
41
+ },
42
+ expectedBehaviour: "A review is written against the product, the store and the buyer, and is marked as a verified purchase because it came from a delivered order. The attached image is stored as a plain URL string rather than an object — that is the shape every renderer must read.",
43
+ expectedUiState: "The empty submit marks the rating and body fields individually. After the reload the review appears on the public product page with its stars, title, body, photo and a verified-purchase marker. The photo RENDERS rather than showing a placeholder icon.",
44
+ endResult: "One review exists. Delete it afterwards so the seeded product's review count and rating are left as they were.",
45
+ },
46
+ "checklist-buying-reviews-view-seller-reviews": {
47
+ roles: ["guest"],
48
+ startPage: "/stores/store-beyblade-arena",
49
+ steps: [
50
+ "Open /stores/store-beyblade-arena in a private window with no session.",
51
+ "Open the store's reviews tab and read the rows.",
52
+ "Check each shows a rating, a title, a body and a date.",
53
+ "Read how each reviewer is identified.",
54
+ "Search the page source for a full reviewer name or an email address.",
55
+ "Read the store's aggregate rating and compare it against the reviews listed.",
56
+ ],
57
+ expectedBehaviour: "The public reviews list shows masked reviewer identities. Names are PII-encrypted at rest, so what reaches this page is a masked form — and a masking helper that returns its input unchanged is invisible from every layer except this one, which is why the source is read rather than the rendered text alone.",
58
+ expectedUiState: "Reviews show rating, title, body and date with masked reviewer names. Neither the rendered page nor its source contains a full name or an email. The aggregate rating is consistent with the reviews shown.",
59
+ expectedData: { fullNamesInSource: 0 },
60
+ endResult: "Read-only; nothing persists.",
61
+ },
62
+ "checklist-buying-reviews-seller-response": {
63
+ roles: ["seller", "guest"],
64
+ startPage: "/store/reviews",
65
+ steps: [
66
+ "Sign in as tyson@beybladearena.in / TempPass123!.",
67
+ "Open the store's reviews list and open one with no seller response.",
68
+ "Type 'QA Response seller-response — thanks for the feedback.' and save.",
69
+ "RELOAD and read the response.",
70
+ "Open the same review on the product's public page in a private window.",
71
+ "Read whether the response is shown and how it is attributed.",
72
+ "Edit the response, save, reload, and read it again.",
73
+ "Delete the response.",
74
+ ],
75
+ inputs: { response: "QA Response seller-response — thanks for the feedback." },
76
+ expectedBehaviour: "A seller response is stored on the review and rendered publicly, attributed to the STORE rather than to a person. It can be edited afterwards — a response writable only once leaves a typo permanent on a public page.",
77
+ expectedUiState: "After the reload the response appears in the dashboard and on the public product page, attributed to Beyblade Arena. The edit persists. The reviewer's own name stays masked — a response does not unmask it.",
78
+ endResult: "The response is deleted so the seeded review is left as it was.",
79
+ },
80
+ "checklist-buying-reviews-review-detail-related-sections": {
81
+ roles: ["guest"],
82
+ startPage: "/products/product-beyblade-burst-valkyrie",
83
+ steps: [
84
+ "Open /products/product-beyblade-burst-valkyrie in a private window.",
85
+ "Open a review's own detail view.",
86
+ "Scroll below it and read each related section's heading.",
87
+ "Check each section holds real reviews with titles and ratings.",
88
+ "Check the review currently open does not appear in any of them.",
89
+ "Click one entry and confirm it opens that review.",
90
+ ],
91
+ expectedBehaviour: "A review detail offers other reviews — of the same product and of the same store — with the current one excluded. A heading over an empty rail is worse than no section: it advertises content that is not there, and the section should not render at all when it has nothing.",
92
+ expectedUiState: "Each related section holds at least one real review and the current review is in none of them. Every entry opens the review it names. An empty rail beneath a heading is the failure.",
93
+ expectedData: { selfLinkCount: 0 },
94
+ endResult: "Read-only; nothing persists.",
95
+ },
96
+ "checklist-buying-reviews-review-photos-render": {
97
+ roles: ["guest"],
98
+ startPage: "/products/product-beyblade-burst-valkyrie",
99
+ steps: [
100
+ "Open /products/product-beyblade-burst-valkyrie in a private window.",
101
+ "Find a review carrying photos and look at its photo grid.",
102
+ "Check each tile shows a photograph rather than a placeholder icon.",
103
+ "Click one to open the lightbox and check the image renders there.",
104
+ "Use the lightbox's thumbnail strip and check each thumbnail shows its own image.",
105
+ "Close it, open the review modal from the list, and check the photos render there too.",
106
+ "Open the seller's public profile reviews and check the photos render there as well.",
107
+ ],
108
+ expectedBehaviour: "Review images are plain URL strings and every renderer reads them as such. Where a renderer expects objects it reads undefined off each string and falls back to a placeholder — which makes every review photo vanish simultaneously across five surfaces, including two independent server-side builders that each re-derived the same wrong transform.",
109
+ expectedUiState: "Photos render in the grid, the lightbox, the lightbox's thumbnail strip, the review modal and the profile reviews. A placeholder icon in ANY of those is the failure, and it will be a placeholder in all of them rather than one.",
110
+ expectedData: { placeholderTiles: 0 },
111
+ endResult: "Read-only; nothing persists. Check every surface — this defect is all-or-nothing, so one working surface would mean the others are reading a different path.",
112
+ },
113
+ };
@@ -0,0 +1,2 @@
1
+ import type { AuthoredCase } from "./_types";
2
+ export declare const authored: Record<string, AuthoredCase>;