@mohasinac/appkit 4.40.1 → 4.41.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 (223) hide show
  1. package/dist/features/categories/repository/categories.repository.js +2 -2
  2. package/dist/features/shell/SectionForm.js +44 -5
  3. package/dist/features/tester/seed-data/_money-flows.js +65 -49
  4. package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +6 -4
  5. package/dist/features/tester/seed-data/authored/admin__coupons.js +14 -13
  6. package/dist/features/tester/seed-data/authored/buying__bidding.js +154 -140
  7. package/dist/features/tester/seed-data/authored/buying__browsing-search.js +4 -4
  8. package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +59 -56
  9. package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +18 -18
  10. package/dist/features/tester/seed-data/authored/buying__cart.js +105 -79
  11. package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +6 -8
  12. package/dist/features/tester/seed-data/authored/buying__my-orders.js +13 -13
  13. package/dist/features/tester/seed-data/authored/buying__offers.js +6 -6
  14. package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +8 -7
  15. package/dist/features/tester/seed-data/authored/buying__product-detail.js +62 -56
  16. package/dist/features/tester/seed-data/authored/buying__return-request.js +6 -6
  17. package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +4 -4
  18. package/dist/features/tester/seed-data/authored/buying__reviews.js +1 -1
  19. package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +8 -8
  20. package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +1 -1
  21. package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +29 -16
  22. package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +9 -9
  23. package/dist/features/tester/seed-data/authored/content-discovery__events.js +69 -36
  24. package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +1 -1
  25. package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +2 -2
  26. package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +2 -2
  27. package/dist/features/tester/seed-data/authored/design-ux__general-design.js +1 -1
  28. package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +1 -1
  29. package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +3 -3
  30. package/dist/features/tester/seed-data/authored/index.js +0 -2
  31. package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +2 -2
  32. package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +6 -4
  33. package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +2 -2
  34. package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +1 -1
  35. package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +8 -10
  36. package/dist/features/tester/seed-data/authored/selling__become-seller.js +2 -2
  37. package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +2 -2
  38. package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +2 -2
  39. package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +2 -2
  40. package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +2 -2
  41. package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +2 -2
  42. package/dist/features/tester/seed-data/authored/seo__og-images.js +3 -4
  43. package/dist/features/tester/seed-data/authored/seo__page-metadata.js +6 -8
  44. package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +5 -5
  45. package/dist/features/tester/seed-data/index.d.ts +0 -10
  46. package/dist/features/tester/seed-data/index.js +0 -10
  47. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +75 -89
  48. package/dist/features/tester/seed-data/tester-responses-seed-data.js +5 -5
  49. package/dist/index.d.ts +0 -8
  50. package/dist/index.js +0 -21
  51. package/dist/seed/addresses-seed-data.js +0 -34
  52. package/dist/seed/index.d.ts +1 -1
  53. package/dist/seed/index.js +4 -3
  54. package/dist/seed/manifest.js +11 -12
  55. package/dist/seed/notifications-seed-data.js +4 -4
  56. package/dist/seed/stores-seed-data.js +7 -52
  57. package/dist/seed/users-seed-data.js +3 -83
  58. package/package.json +2 -2
  59. package/scripts/seed-cli.mjs +15 -20
  60. package/dist/_internal/server/features/classified/actions.d.ts +0 -12
  61. package/dist/_internal/server/features/classified/actions.js +0 -33
  62. package/dist/_internal/server/features/digital-code/actions.d.ts +0 -12
  63. package/dist/_internal/server/features/digital-code/actions.js +0 -33
  64. package/dist/_internal/server/features/homepage/data.d.ts +0 -18
  65. package/dist/_internal/server/features/homepage/data.js +0 -70
  66. package/dist/_internal/server/features/live/actions.d.ts +0 -6
  67. package/dist/_internal/server/features/live/actions.js +0 -27
  68. package/dist/_internal/server/features/messages/actions.d.ts +0 -6
  69. package/dist/_internal/server/features/messages/actions.js +0 -6
  70. package/dist/_internal/server/features/messages/data.d.ts +0 -10
  71. package/dist/_internal/server/features/messages/data.js +0 -24
  72. package/dist/_internal/server/features/messages/index.d.ts +0 -2
  73. package/dist/_internal/server/features/messages/index.js +0 -2
  74. package/dist/_internal/server/jobs/core/testerSandboxRefresh.d.ts +0 -12
  75. package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +0 -112
  76. package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.d.ts +0 -2
  77. package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.js +0 -2
  78. package/dist/_internal/shared/features/homepage/section-gate.d.ts +0 -14
  79. package/dist/_internal/shared/features/homepage/section-gate.js +0 -51
  80. package/dist/_internal/shared/features/lottery/config-form.d.ts +0 -58
  81. package/dist/_internal/shared/features/lottery/config-form.js +0 -71
  82. package/dist/client/api/useFeatureFlags.d.ts +0 -22
  83. package/dist/client/api/useFeatureFlags.js +0 -27
  84. package/dist/features/account/address-validation.d.ts +0 -20
  85. package/dist/features/account/address-validation.js +0 -35
  86. package/dist/features/account/components/ChatList.d.ts +0 -14
  87. package/dist/features/account/components/ChatList.js +0 -9
  88. package/dist/features/account/components/ChatWindow.d.ts +0 -17
  89. package/dist/features/account/components/ChatWindow.js +0 -6
  90. package/dist/features/account/components/MessagesView.d.ts +0 -16
  91. package/dist/features/account/components/MessagesView.js +0 -5
  92. package/dist/features/account/components/UserOffersView.d.ts +0 -10
  93. package/dist/features/account/components/UserOffersView.js +0 -5
  94. package/dist/features/account/constants/addresses.d.ts +0 -13
  95. package/dist/features/account/constants/addresses.js +0 -43
  96. package/dist/features/account/hooks/useAddressForm.d.ts +0 -24
  97. package/dist/features/account/hooks/useAddressForm.js +0 -58
  98. package/dist/features/admin/actions/chat-actions.d.ts +0 -29
  99. package/dist/features/admin/actions/chat-actions.js +0 -101
  100. package/dist/features/admin/components/AdminFeatureFlagsView.d.ts +0 -9
  101. package/dist/features/admin/components/AdminFeatureFlagsView.js +0 -109
  102. package/dist/features/admin/components/AdminSiteView.d.ts +0 -10
  103. package/dist/features/admin/components/AdminSiteView.js +0 -52
  104. package/dist/features/admin/hooks/useChat.d.ts +0 -24
  105. package/dist/features/admin/hooks/useChat.js +0 -100
  106. package/dist/features/admin/permission-map.d.ts +0 -3
  107. package/dist/features/admin/permission-map.js +0 -26
  108. package/dist/features/admin/repository/chat.repository.d.ts +0 -50
  109. package/dist/features/admin/repository/chat.repository.js +0 -223
  110. package/dist/features/auth/actions/password-change-otp-actions.d.ts +0 -18
  111. package/dist/features/auth/actions/password-change-otp-actions.js +0 -88
  112. package/dist/features/auth/actions/realtime-token-actions.d.ts +0 -11
  113. package/dist/features/auth/actions/realtime-token-actions.js +0 -38
  114. package/dist/features/auth/password-change-otp.d.ts +0 -34
  115. package/dist/features/auth/password-change-otp.js +0 -56
  116. package/dist/features/classified/components/ClassifiedContactSellerPanel.d.ts +0 -12
  117. package/dist/features/classified/components/ClassifiedContactSellerPanel.js +0 -49
  118. package/dist/features/events/api/route.d.ts +0 -12
  119. package/dist/features/events/api/route.js +0 -90
  120. package/dist/features/faq/api/route.d.ts +0 -11
  121. package/dist/features/faq/api/route.js +0 -52
  122. package/dist/features/faq/hooks/useFAQs.d.ts +0 -22
  123. package/dist/features/faq/hooks/useFAQs.js +0 -41
  124. package/dist/features/media/upload/video-poster.test.d.ts +0 -1
  125. package/dist/features/media/upload/video-poster.test.js +0 -42
  126. package/dist/features/messages/actions/index.d.ts +0 -2
  127. package/dist/features/messages/actions/index.js +0 -2
  128. package/dist/features/messages/actions/messages-actions.d.ts +0 -15
  129. package/dist/features/messages/actions/messages-actions.js +0 -33
  130. package/dist/features/messages/actions/ping-rtdb.d.ts +0 -2
  131. package/dist/features/messages/actions/ping-rtdb.js +0 -26
  132. package/dist/features/messages/hooks/useConversation.d.ts +0 -22
  133. package/dist/features/messages/hooks/useConversation.js +0 -155
  134. package/dist/features/messages/hooks/useConversations.d.ts +0 -15
  135. package/dist/features/messages/hooks/useConversations.js +0 -104
  136. package/dist/features/messages/index.d.ts +0 -6
  137. package/dist/features/messages/index.js +0 -4
  138. package/dist/features/messages/realtime.d.ts +0 -32
  139. package/dist/features/messages/realtime.js +0 -39
  140. package/dist/features/messages/repository/conversations.repository.d.ts +0 -71
  141. package/dist/features/messages/repository/conversations.repository.js +0 -284
  142. package/dist/features/messages/schemas/firestore.d.ts +0 -34
  143. package/dist/features/messages/schemas/firestore.js +0 -16
  144. package/dist/features/messages/schemas/index.d.ts +0 -177
  145. package/dist/features/messages/schemas/index.js +0 -35
  146. package/dist/features/messages/server.d.ts +0 -6
  147. package/dist/features/messages/server.js +0 -6
  148. package/dist/features/products/components/MakeOfferForm.d.ts +0 -20
  149. package/dist/features/products/components/MakeOfferForm.js +0 -9
  150. package/dist/features/reviews/api/route.d.ts +0 -21
  151. package/dist/features/reviews/api/route.js +0 -174
  152. package/dist/features/seller/api/offers/route.d.ts +0 -17
  153. package/dist/features/seller/api/offers/route.js +0 -63
  154. package/dist/features/seller/components/SellerAuctionsView.d.ts +0 -9
  155. package/dist/features/seller/components/SellerAuctionsView.js +0 -113
  156. package/dist/features/seller/components/SellerOffersPanel.d.ts +0 -21
  157. package/dist/features/seller/components/SellerOffersPanel.js +0 -160
  158. package/dist/features/seller/components/SellerPreOrdersView.d.ts +0 -6
  159. package/dist/features/seller/components/SellerPreOrdersView.js +0 -148
  160. package/dist/features/seller/components/SellerPrizeDrawsView.d.ts +0 -6
  161. package/dist/features/seller/components/SellerPrizeDrawsView.js +0 -152
  162. package/dist/features/seller/permission-map.d.ts +0 -5
  163. package/dist/features/seller/permission-map.js +0 -17
  164. package/dist/features/shell/StepForm.d.ts +0 -80
  165. package/dist/features/shell/StepForm.js +0 -136
  166. package/dist/features/stores/api/route.d.ts +0 -12
  167. package/dist/features/stores/api/route.js +0 -110
  168. package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +0 -2
  169. package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +0 -33
  170. package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +0 -2
  171. package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +0 -138
  172. package/dist/features/tester/seed-data/bids-tester-seed-data.d.ts +0 -2
  173. package/dist/features/tester/seed-data/bids-tester-seed-data.js +0 -37
  174. package/dist/features/tester/seed-data/blog-tester-seed-data.d.ts +0 -2
  175. package/dist/features/tester/seed-data/blog-tester-seed-data.js +0 -40
  176. package/dist/features/tester/seed-data/carts-tester-seed-data.d.ts +0 -3
  177. package/dist/features/tester/seed-data/carts-tester-seed-data.js +0 -70
  178. package/dist/features/tester/seed-data/categories-tester-seed-data.d.ts +0 -2
  179. package/dist/features/tester/seed-data/categories-tester-seed-data.js +0 -218
  180. package/dist/features/tester/seed-data/coupons-tester-seed-data.d.ts +0 -2
  181. package/dist/features/tester/seed-data/coupons-tester-seed-data.js +0 -76
  182. package/dist/features/tester/seed-data/events-tester-seed-data.d.ts +0 -2
  183. package/dist/features/tester/seed-data/events-tester-seed-data.js +0 -193
  184. package/dist/features/tester/seed-data/offers-tester-seed-data.d.ts +0 -2
  185. package/dist/features/tester/seed-data/offers-tester-seed-data.js +0 -191
  186. package/dist/features/tester/seed-data/orders-tester-seed-data.d.ts +0 -2
  187. package/dist/features/tester/seed-data/orders-tester-seed-data.js +0 -329
  188. package/dist/features/tester/seed-data/products-tester-seed-data.d.ts +0 -2
  189. package/dist/features/tester/seed-data/products-tester-seed-data.js +0 -815
  190. package/dist/features/tester/seed-data/stores-tester-seed-data.d.ts +0 -2
  191. package/dist/features/tester/seed-data/stores-tester-seed-data.js +0 -79
  192. package/dist/features/wishlist/components/WishlistToggleButton.d.ts +0 -12
  193. package/dist/features/wishlist/components/WishlistToggleButton.js +0 -36
  194. package/dist/monitoring/analytics.d.ts +0 -80
  195. package/dist/monitoring/analytics.js +0 -176
  196. package/dist/next/middleware/pii-redactor.d.ts +0 -32
  197. package/dist/next/middleware/pii-redactor.js +0 -84
  198. package/dist/providers/db-firebase/realtime.d.ts +0 -42
  199. package/dist/providers/db-firebase/realtime.js +0 -138
  200. package/dist/security/rbac/Can.d.ts +0 -31
  201. package/dist/security/rbac/Can.js +0 -22
  202. package/dist/security/rbac/default-roles.d.ts +0 -2
  203. package/dist/security/rbac/default-roles.js +0 -83
  204. package/dist/security/rbac/hook.d.ts +0 -20
  205. package/dist/security/rbac/hook.js +0 -30
  206. package/dist/security/rbac/index.d.ts +0 -8
  207. package/dist/security/rbac/index.js +0 -6
  208. package/dist/security/rbac/middleware.d.ts +0 -51
  209. package/dist/security/rbac/middleware.js +0 -51
  210. package/dist/security/rbac/resolver.d.ts +0 -5
  211. package/dist/security/rbac/resolver.js +0 -38
  212. package/dist/security/rbac/server.d.ts +0 -24
  213. package/dist/security/rbac/server.js +0 -42
  214. package/dist/security/rbac/types.d.ts +0 -22
  215. package/dist/security/rbac/types.js +0 -2
  216. package/dist/seed/conversations-seed-data.d.ts +0 -2
  217. package/dist/seed/conversations-seed-data.js +0 -292
  218. package/dist/utils/filter.helper.d.ts +0 -18
  219. package/dist/utils/filter.helper.js +0 -21
  220. package/dist/utils/pagination.helper.d.ts +0 -23
  221. package/dist/utils/pagination.helper.js +0 -24
  222. package/dist/utils/search-tokens.d.ts +0 -2
  223. package/dist/utils/search-tokens.js +0 -21
@@ -118,7 +118,7 @@ export const authored = {
118
118
  roles: ["buyer"],
119
119
  startPage: "/cart",
120
120
  steps: [
121
- "Sign in as tester@letitrip.in / TempPass123!, whose cart holds a won auction.",
121
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!, whose cart holds a won auction.",
122
122
  "Add two ordinary products to the cart.",
123
123
  "Open /cart and note the Won Auctions tab holds a line.",
124
124
  "Use 'Remove all' from the Cart tab and confirm it.",
@@ -330,26 +330,25 @@ export const authored = {
330
330
  },
331
331
  "checklist-buying-cart-group-picker-opens": {
332
332
  roles: ["guest"],
333
- startPage: "/products/product-tester-standard-1",
333
+ startPage: "/groups/group-beyblade-original-lineage",
334
334
  steps: [
335
- "Sign in as tester@letitrip.in / TempPass123! so sandbox content is visible.",
336
- "Open /products/product-tester-standard-1 and find the 'Part of' strip.",
337
- "Read what the strip names and what controls it offers.",
338
- "Click the 'Pick items' control.",
335
+ "Open /groups/group-beyblade-original-lineage in a private window with no session — the seeded grouped listing 'Original Series Lineage', whose members are product-beyblade-original-dranzer-s and product-beyblade-original-driger-v.",
336
+ "Read what the page names and what controls it offers.",
337
+ "Find the member picker.",
339
338
  "Read what opens and whether every member is listed.",
340
339
  "Check each member shows a thumbnail, a title, a unit price and a quantity control.",
341
340
  ],
342
- expectedBehaviour: "A product belonging to a group offers a picker from its own page. A group is pick-as-you-wish — unlike a bundle, which is all-or-nothing — so the picker exists to let the buyer choose members and quantities before adding anything.",
343
- expectedUiState: "The strip names the group and its control opens a picker listing every member with thumbnail, title, unit price and a stepper. A strip with no way into the picker is the failure.",
341
+ expectedBehaviour: "A grouped listing offers a picker on its own page. A group is pick-as-you-wish — unlike a bundle, which is all-or-nothing — so the picker exists to let the buyer choose members and quantities before adding anything.",
342
+ expectedUiState: "The page names the group and its picker lists both members with thumbnail, title, unit price and a stepper. A member list with no way to pick quantities is the failure.",
344
343
  endResult: "Close the picker without adding.",
345
344
  },
346
345
  "checklist-buying-cart-group-picker-running-total": {
347
346
  roles: ["buyer"],
348
- startPage: "/products/product-tester-standard-1",
347
+ startPage: "/groups/group-beyblade-original-lineage",
349
348
  steps: [
350
- "Sign in as tester@letitrip.in / TempPass123!.",
351
- "Open /products/product-tester-standard-1 and open the group picker.",
352
- "Read the running total shown.",
349
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
350
+ "Open /groups/group-beyblade-original-lineage and open the member picker.",
351
+ "Read the running total shown — Dranzer S is ₹1,499.00 and Driger V is ₹1,799.00.",
353
352
  "Raise one member's quantity by one and read the total again.",
354
353
  "Check it rose by exactly that member's unit price.",
355
354
  "Lower another member to zero and read the total and the item count.",
@@ -361,41 +360,42 @@ export const authored = {
361
360
  },
362
361
  "checklist-buying-cart-group-picker-stock-cap": {
363
362
  roles: ["buyer"],
364
- startPage: "/products/product-tester-standard-1",
363
+ startPage: "/groups/group-beyblade-original-lineage",
365
364
  steps: [
366
- "Sign in as tester@letitrip.in / TempPass123!.",
367
- "Open the group picker and find a member with limited stock.",
368
- "Read its available stock.",
365
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
366
+ "Open /groups/group-beyblade-original-lineage and open the member picker.",
367
+ "Read the available stock on product-beyblade-original-driger-v, seeded at 2.",
369
368
  "Raise its quantity repeatedly until the control stops.",
370
369
  "Compare the quantity reached against the stated stock.",
371
370
  "Check the control is disabled at the cap rather than silently ignoring presses.",
372
371
  ],
373
372
  expectedBehaviour: "Each member's stepper stops at that member's own stock. The cap is per member rather than per line, because a group line's members are independent products with independent inventory.",
374
- expectedUiState: "The quantity stops at the stated stock and the increase control becomes visibly disabled at that point. A control that accepts presses and does nothing is the failure — the buyer cannot tell it from an unresponsive page.",
373
+ expectedUiState: "The quantity stops at 2 for Driger V and at 4 for Dranzer S, and the increase control becomes visibly disabled at that point. A control that accepts presses and does nothing is the failure — the buyer cannot tell it from an unresponsive page.",
375
374
  endResult: "Close the picker without adding.",
376
375
  },
377
376
  "checklist-buying-cart-group-picker-blocked-member": {
378
377
  roles: ["buyer"],
379
- startPage: "/products/product-tester-standard-1",
378
+ startPage: "/groups/group-beyblade-local-meetup-picks",
380
379
  steps: [
381
- "Sign in as tester@letitrip.in / TempPass123!.",
382
- "Open the group picker and find product-tester-group-soldout among the members.",
380
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
381
+ "Open /groups/group-beyblade-local-meetup-picks \u2014 'Local Meetup Picks', whose three members are all classified listings and therefore cannot be added to a cart at all.",
382
+ "Find classified-beyblade-stadium-set among the members.",
383
383
  "Read what is shown in place of its quantity stepper.",
384
384
  "Check a reason is stated rather than the row being blank or absent.",
385
385
  "Try to include it in the selection.",
386
386
  "Read whether the running total counts it.",
387
387
  ],
388
- inputs: { blockedMember: "product-tester-group-soldout" },
389
- expectedBehaviour: "A member that cannot be bought shows WHY in place of its stepper. Hiding it entirely would misrepresent the group's contents, and showing an inert stepper would let the buyer build a selection that the server then refuses.",
390
- expectedUiState: "The sold-out member is listed with a reason chip instead of a stepper, cannot be selected, and does not contribute to the running total. A blank cell where the stepper would be is the failure.",
388
+ inputs: { blockedMember: "classified-beyblade-stadium-set" },
389
+ expectedBehaviour: "A member that cannot be bought shows WHY in place of its stepper. A classified listing's cart capability is blocked outright \u2014 it is a contact-the-seller listing, not a purchasable one \u2014 so every member of this group is in that state. Hiding them entirely would misrepresent the group's contents, and showing an inert stepper would let the buyer build a selection that the server then refuses.",
390
+ expectedUiState: "Each blocked member is listed with a reason chip instead of a stepper, cannot be selected, and does not contribute to the running total. A blank cell where the stepper would be is the failure, and so is a working stepper on a classified listing.",
391
391
  endResult: "Close the picker without adding.",
392
392
  },
393
393
  "checklist-buying-cart-group-picker-one-line": {
394
394
  roles: ["buyer"],
395
- startPage: "/products/product-tester-standard-1",
395
+ startPage: "/groups/group-beyblade-original-lineage",
396
396
  steps: [
397
- "Sign in as tester@letitrip.in / TempPass123!.",
398
- "Open the group picker and select TWO members with quantities.",
397
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
398
+ "Open /groups/group-beyblade-original-lineage and select BOTH members — Dranzer S at quantity 1 and Driger V at quantity 2.",
399
399
  "Note the running total.",
400
400
  "Add the selection to the cart.",
401
401
  "Open /cart and count the lines that appeared.",
@@ -408,10 +408,10 @@ export const authored = {
408
408
  },
409
409
  "checklist-buying-cart-group-picker-single-member-plain-line": {
410
410
  roles: ["buyer"],
411
- startPage: "/products/product-tester-standard-1",
411
+ startPage: "/groups/group-beyblade-original-lineage",
412
412
  steps: [
413
- "Sign in as tester@letitrip.in / TempPass123! with an empty cart.",
414
- "Open the group picker and select exactly ONE member with quantity 2.",
413
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! and empty the cart first.",
414
+ "Open /groups/group-beyblade-original-lineage and select exactly ONE member — product-beyblade-original-driger-v — at quantity 2.",
415
415
  "Add the selection to the cart.",
416
416
  "Open /cart and read the line.",
417
417
  "Check it has an ordinary line-level quantity stepper.",
@@ -421,31 +421,58 @@ export const authored = {
421
421
  expectedUiState: "The line looks like any other product line, with a working line-level stepper reading 2, and no member expansion.",
422
422
  endResult: "Empty the cart afterwards.",
423
423
  },
424
+ /*
425
+ * 🛑 THE CROSS-STORE GROUP HAS TO BE BUILT — there is no fixture to read.
426
+ *
427
+ * This case used to drive `product-tester-crossstore-a` / `-b`, two listings
428
+ * seeded in the banned shape on purpose so a buyer could open a group spanning
429
+ * two sellers and confirm the picker rendered read-only. They were
430
+ * tester-sandbox rows and went with the rest of them on 2026-09-14.
431
+ *
432
+ * The guard is NOT at save time for a grouped listing — that is the bundle
433
+ * rule. `POST /api/admin/grouped-listings` takes the group's own `storeId` and
434
+ * never checks that each member belongs to it, and the single-store refusal
435
+ * lives in the picker and in `addGroupLineToCart`. So the banned state is still
436
+ * reachable through a supported admin path, which is what keeps the BUYER-facing
437
+ * half of this guard testable at all: the case creates it, reads the refusal,
438
+ * and deletes it again.
439
+ *
440
+ * The one pairing the real catalogue allows is an Arena product plus a
441
+ * letitrip-official prize draw. Both could be refused for their own reasons, so
442
+ * the case turns on the refusal MESSAGE naming the seller conflict — a case
443
+ * that cannot tell its two failure modes apart would pass against the bug.
444
+ */
424
445
  "checklist-buying-cart-group-picker-cross-store": {
425
- roles: ["buyer"],
426
- startPage: "/products/product-tester-crossstore-a",
446
+ roles: ["admin", "buyer"],
447
+ startPage: "/admin/grouped-listings",
427
448
  steps: [
428
- "Sign in as tester@letitrip.in / TempPass123!.",
429
- "Open /products/product-tester-crossstore-a, whose group spans two sellers.",
430
- "Open its group picker.",
449
+ "Sign in as admin@letitrip.in / TempPass123!.",
450
+ "Open /admin/grouped-listings and create a group titled 'QA Group cross-store' with exactly two members: product-beyblade-original-dranzer-s (store-beyblade-arena) and prizedraw-beyblade-mystery-box (store-letitrip-official).",
451
+ "Save it and note its slug.",
452
+ "Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
453
+ "Open that group's public page at /groups/<the slug you noted>.",
431
454
  "Read whether quantity controls are offered.",
432
455
  "Read whether an add control is offered.",
433
456
  "Read what the picker says about why.",
434
- "Using DevTools, attempt to submit a cross-store selection anyway.",
435
- ],
436
- inputs: { productId: "product-tester-crossstore-a" },
437
- expectedBehaviour: "A cross-store group renders READ-ONLY, and the server refuses such a selection again. The store id is the order-splitting key and the key per-store shipping, coupons, add-ons and payouts hang off — a line spanning sellers would produce an order belonging to one seller containing another's products, with no notification, no shipping resolution and no payout for the second.",
438
- expectedUiState: "No quantity column and no add control, with a stated reason. The forced submission is refused server-side rather than accepted.",
457
+ "Using DevTools, POST the two member ids to /api/cart/group anyway and read the response.",
458
+ ],
459
+ inputs: {
460
+ groupTitle: "QA Group cross-store",
461
+ memberStoreA: "product-beyblade-original-dranzer-s",
462
+ memberStoreB: "prizedraw-beyblade-mystery-box",
463
+ },
464
+ expectedBehaviour: "A cross-store group renders READ-ONLY, and the server refuses such a selection again. The store id is the order-splitting key and the key per-store shipping, coupons, add-ons and payouts hang off \u2014 a line spanning sellers would produce an order belonging to one seller containing another's products, with no notification, no shipping resolution and no payout for the second. The group has to be BUILT here: the guard means a valid cross-store group cannot exist in the seed, so there is no fixture to read.",
465
+ expectedUiState: "No quantity column and no add control, with a stated reason. The forced POST is refused server-side with an error naming the second store rather than accepted.",
439
466
  expectedData: { addControlPresent: false },
440
- endResult: "Nothing is added. The fixtures exist in this banned shape precisely so both refusals are testable.",
467
+ endResult: "Nothing is added. Delete 'QA Group cross-store' afterwards \u2014 it exists in a shape the product forbids and must not be left in the catalogue.",
441
468
  },
442
469
  "checklist-buying-cart-group-picker-guest": {
443
470
  roles: ["guest"],
444
- startPage: "/products/product-tester-standard-1",
471
+ startPage: "/groups/group-beyblade-original-lineage",
445
472
  steps: [
446
- "Open /products/product-tester-standard-1 in a private window with no session.",
447
- "Open the group picker.",
448
- "Select two members and use the add control.",
473
+ "Open /groups/group-beyblade-original-lineage in a private window with no session.",
474
+ "Open the member picker.",
475
+ "Select both members and use the add control.",
449
476
  "Read what happens.",
450
477
  "Check a sign-in prompt appears rather than the selection being silently lost.",
451
478
  "Sign in from that prompt and read whether the selection survived.",
@@ -458,7 +485,7 @@ export const authored = {
458
485
  roles: ["buyer"],
459
486
  startPage: "/cart",
460
487
  steps: [
461
- "Sign in as tester@letitrip.in / TempPass123! with a grouped line in the cart.",
488
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a grouped line in the cart.",
462
489
  "Open /cart and find the grouped line.",
463
490
  "Expand it.",
464
491
  "Read every member listed — thumbnail, title, unit price and quantity.",
@@ -473,7 +500,7 @@ export const authored = {
473
500
  roles: ["buyer"],
474
501
  startPage: "/cart",
475
502
  steps: [
476
- "Sign in as tester@letitrip.in / TempPass123! with a grouped line in the cart.",
503
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a grouped line in the cart.",
477
504
  "Open /cart and look at the grouped line's header row.",
478
505
  "Check there is no line-level quantity stepper on it.",
479
506
  "Expand the line and check each MEMBER has its own stepper.",
@@ -489,7 +516,7 @@ export const authored = {
489
516
  roles: ["buyer"],
490
517
  startPage: "/cart",
491
518
  steps: [
492
- "Sign in as tester@letitrip.in / TempPass123! with a grouped line in the cart.",
519
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a grouped line in the cart.",
493
520
  "Open /cart, expand the grouped line, and note the line total, the seller subtotal and the summary total.",
494
521
  "Raise one member's quantity by one.",
495
522
  "Read all three figures again.",
@@ -504,7 +531,7 @@ export const authored = {
504
531
  roles: ["buyer"],
505
532
  startPage: "/cart",
506
533
  steps: [
507
- "Sign in as tester@letitrip.in / TempPass123! with a grouped line holding two members.",
534
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a grouped line holding two members.",
508
535
  "Open /cart and expand the line.",
509
536
  "Remove ONE member.",
510
537
  "Read the remaining member and the line total.",
@@ -520,7 +547,7 @@ export const authored = {
520
547
  roles: ["buyer"],
521
548
  startPage: "/cart",
522
549
  steps: [
523
- "Sign in as tester@letitrip.in / TempPass123!.",
550
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
524
551
  "Add a grouped selection and a bundle to the cart.",
525
552
  "Open /cart and click the grouped line's title.",
526
553
  "Read where it lands.",
@@ -535,27 +562,27 @@ export const authored = {
535
562
  },
536
563
  "checklist-buying-cart-bundle-copies-stepper": {
537
564
  roles: ["buyer"],
538
- startPage: "/bundles/bundle-tester-sandbox",
565
+ startPage: "/bundles/bundle-original-collectors-set",
539
566
  steps: [
540
- "Sign in as tester@letitrip.in / TempPass123!.",
541
- "Open /bundles/bundle-tester-sandbox and find the copies stepper.",
567
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
568
+ "Open /bundles/bundle-original-collectors-set and find the copies stepper.",
542
569
  "Read the price shown at one copy.",
543
570
  "Raise the copies to 2 and read the price.",
544
571
  "Check both 'Buy now' and 'Add to cart' are present.",
545
572
  "Use 'Add to cart' and read whether the browser stayed on the bundle page.",
546
573
  "Open /cart and read the line.",
547
574
  ],
548
- inputs: { bundleId: "bundle-tester-sandbox", copies: 2, bundlePrice: 199 },
575
+ inputs: { bundleId: "bundle-original-collectors-set", copies: 2, bundlePrice: 2999, memberTotal: 4597 },
549
576
  expectedBehaviour: "A bundle is all-or-nothing, so its stepper counts COPIES of the whole selection rather than members. Add to cart stays on the page — a buyer adding two copies may want a third — while Buy now proceeds to checkout.",
550
- expectedUiState: "The price doubles to ₹398.00 at two copies. Both controls are present. Add to cart keeps the buyer on the bundle page and the cart gains one line at two copies.",
551
- expectedData: { copies: 2, lineTotal: 398 },
577
+ expectedUiState: "The price doubles to ₹5,998.00 at two copies. Both controls are present. Add to cart keeps the buyer on the bundle page and the cart gains one line at two copies.",
578
+ expectedData: { copies: 2, lineTotal: 5998 },
552
579
  endResult: "The cart holds a bundle line at two copies.",
553
580
  },
554
581
  "checklist-buying-cart-bundle-line-in-cart": {
555
582
  roles: ["buyer"],
556
583
  startPage: "/cart",
557
584
  steps: [
558
- "Sign in as tester@letitrip.in / TempPass123! with a bundle line in the cart.",
585
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a bundle line in the cart.",
559
586
  "Open /cart and expand the bundle line.",
560
587
  "Read its members and check they are READ-ONLY — no per-member steppers.",
561
588
  "Read the line-level copies stepper.",
@@ -563,10 +590,10 @@ export const authored = {
563
590
  "Check it rose by the bundle price rather than by the members' summed price.",
564
591
  "RELOAD and confirm.",
565
592
  ],
566
- inputs: { bundlePrice: 199, memberTotal: 348 },
593
+ inputs: { bundleId: "bundle-original-collectors-set", bundlePrice: 2999, memberTotal: 4597 },
567
594
  expectedBehaviour: "A bundle's members are fixed and its copies vary — the exact inverse of a group line. The price rule's bundle branch must be evaluated BEFORE its members branch: a bundle line carries members too, and summing them would charge the undiscounted total and throw away the discount that is the entire point of a bundle.",
568
- expectedUiState: "Members are listed without steppers, the copies stepper is on the line, and raising it adds ₹199.00 per copy rather than ₹348.00. A total rising by the members' sum is the branch-order failure.",
569
- expectedData: { pricePerCopy: 199 },
595
+ expectedUiState: "The three members — Dranzer S, Driger V and Storm Pegasus — are listed without steppers, the copies stepper is on the line, and raising it adds ₹2,999.00 per copy rather than ₹4,597.00. A total rising by the members' sum is the branch-order failure.",
596
+ expectedData: { pricePerCopy: 2999 },
570
597
  endResult: "Empty the cart afterwards.",
571
598
  },
572
599
  "checklist-buying-cart-bundle-cross-store-rejected": {
@@ -587,25 +614,24 @@ export const authored = {
587
614
  },
588
615
  "checklist-buying-cart-grouped-listing-page-picker": {
589
616
  roles: ["buyer"],
590
- startPage: "/products/product-tester-standard-1",
617
+ startPage: "/products/product-beyblade-original-dranzer-s",
591
618
  steps: [
592
- "Sign in as tester@letitrip.in / TempPass123!.",
593
- "Open /products/product-tester-standard-1 and find the 'Part of' strip.",
594
- "Follow the link to the group's own public page.",
619
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
620
+ "Open /products/product-beyblade-original-dranzer-s and scroll to the themed grouped-listings carousel.",
621
+ "Follow the link for 'Original Series Lineage' to /groups/group-beyblade-original-lineage.",
595
622
  "Read the page — its title, description and member list.",
596
623
  "Find the picker on that page and open it.",
597
- "Compare it against the picker on the product page.",
598
- "Select members and add them, then check the cart line matches.",
624
+ "Select both members and add them, then check the cart line matches the running total.",
599
625
  ],
600
- expectedBehaviour: "A grouped listing has its own public page carrying the same picker, so the group is reachable and shareable in its own right rather than only as a strip on a member's page.",
601
- expectedUiState: "The group page renders with its members and the same picker. Adding from it produces the same single grouped cart line as adding from the product page.",
626
+ expectedBehaviour: "A grouped listing has its own public page carrying the picker, so the group is reachable and shareable in its own right rather than only as a carousel on a member's page.",
627
+ expectedUiState: "The group page renders with both members and a working picker. Adding from it produces ONE grouped cart line priced at the running total, not one line per member.",
602
628
  endResult: "Empty the cart afterwards.",
603
629
  },
604
630
  "checklist-buying-cart-group-lane-gate": {
605
631
  roles: ["buyer"],
606
632
  startPage: "/cart",
607
633
  steps: [
608
- "Sign in as tester@letitrip.in / TempPass123!, whose cart holds an unpaid won auction.",
634
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!, whose cart holds an unpaid won auction.",
609
635
  "Open /cart and confirm the Won Auctions tab holds a line.",
610
636
  "Open a group's picker, select two members, and try to add them.",
611
637
  "Read what happens and any message shown.",
@@ -654,7 +680,7 @@ export const authored = {
654
680
  roles: ["buyer"],
655
681
  startPage: "/cart",
656
682
  steps: [
657
- "Sign in as tester@letitrip.in / TempPass123!, whose cart holds an unpaid won auction, an accepted offer and ordinary items.",
683
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!, whose cart holds an unpaid won auction, an accepted offer and ordinary items.",
658
684
  "Open /cart and read the three tabs.",
659
685
  "Open the Cart tab and read its checkout button's state.",
660
686
  "Open the Accepted Offers tab and read its checkout button's state.",
@@ -684,7 +710,7 @@ export const authored = {
684
710
  roles: ["buyer"],
685
711
  startPage: "/cart",
686
712
  steps: [
687
- "Sign in as tester@letitrip.in / TempPass123! with a won auction in the cart.",
713
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a won auction in the cart.",
688
714
  "Open /cart and switch to the Won Auctions tab.",
689
715
  "Find the countdown beside the payment-required note.",
690
716
  "Read the time remaining.",
@@ -699,7 +725,7 @@ export const authored = {
699
725
  roles: ["buyer"],
700
726
  startPage: "/cart",
701
727
  steps: [
702
- "Sign in as tester@letitrip.in / TempPass123! with a won auction whose deadline has passed.",
728
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a won auction whose deadline has passed.",
703
729
  "Open /cart and read the Won Auctions tab.",
704
730
  "Check the line is gone.",
705
731
  "Open /user/bids and read that bid's status.",
@@ -714,7 +740,7 @@ export const authored = {
714
740
  roles: ["buyer"],
715
741
  startPage: "/cart",
716
742
  steps: [
717
- "Sign in as tester@letitrip.in / TempPass123! with items in all three lanes.",
743
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with items in all three lanes.",
718
744
  "Open /cart on the Cart tab and read the summary total.",
719
745
  "Add up the ordinary items yourself and compare.",
720
746
  "Switch to the Accepted Offers tab and read its total.",
@@ -730,7 +756,7 @@ export const authored = {
730
756
  roles: ["buyer"],
731
757
  startPage: "/cart",
732
758
  steps: [
733
- "Sign in as tester@letitrip.in / TempPass123! with items in more than one lane.",
759
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with items in more than one lane.",
734
760
  "Open /cart on the Won Auctions tab and note its items and total.",
735
761
  "Click its checkout control.",
736
762
  "Read the checkout page's items and total.",
@@ -746,7 +772,7 @@ export const authored = {
746
772
  roles: ["buyer"],
747
773
  startPage: "/cart",
748
774
  steps: [
749
- "Sign in as tester@letitrip.in / TempPass123! with items in more than one lane.",
775
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with items in more than one lane.",
750
776
  "Open /cart at 1280 pixels and note each tab's desktop summary total.",
751
777
  "Resize to 390 pixels and open /cart.",
752
778
  "On each tab, read the bottom bar's total and the lane it names.",
@@ -762,7 +788,7 @@ export const authored = {
762
788
  roles: ["buyer"],
763
789
  startPage: "/cart",
764
790
  steps: [
765
- "Sign in as tester@letitrip.in / TempPass123! with an unpaid won auction and ordinary items.",
791
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with an unpaid won auction and ordinary items.",
766
792
  "Resize to 390 pixels and open /cart.",
767
793
  "Switch to the Cart tab, which is not currently payable.",
768
794
  "Read the bottom bar's checkout button state.",
@@ -778,7 +804,7 @@ export const authored = {
778
804
  roles: ["buyer"],
779
805
  startPage: "/cart",
780
806
  steps: [
781
- "Sign in as tester@letitrip.in / TempPass123! with a payable non-standard lane.",
807
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with a payable non-standard lane.",
782
808
  "Resize to 390 pixels and open /cart.",
783
809
  "Switch to the Won Auctions or Accepted Offers tab.",
784
810
  "Tap the bottom bar's Checkout button.",
@@ -794,7 +820,7 @@ export const authored = {
794
820
  roles: ["buyer"],
795
821
  startPage: "/cart",
796
822
  steps: [
797
- "Sign in as tester@letitrip.in / TempPass123! with items in more than one lane.",
823
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with items in more than one lane.",
798
824
  "Open /cart on the Cart tab and read the 'Select all' control's count.",
799
825
  "Compare it against the number of items on that tab only.",
800
826
  "Switch to another tab and read the count there.",
@@ -872,7 +898,7 @@ export const authored = {
872
898
  roles: ["buyer"],
873
899
  startPage: "/cart",
874
900
  steps: [
875
- "Sign in as tester@letitrip.in / TempPass123! with items in the auction and offer lanes.",
901
+ "Sign in as rehan.sheikh@gmail.com / TempPass123! with items in the auction and offer lanes.",
876
902
  "Open /cart on the Cart tab and expand the breakdown, noting whether a coupon line can appear.",
877
903
  "Switch to the Won Auctions tab and expand the breakdown.",
878
904
  "Read whether any coupon-discount line is present.",
@@ -1062,7 +1088,7 @@ export const authored = {
1062
1088
  roles: ["buyer"],
1063
1089
  startPage: "/user/orders",
1064
1090
  steps: [
1065
- "Sign in as tester@letitrip.in / TempPass123!.",
1091
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
1066
1092
  "Open /user/orders and open a STANDARD order that had a coupon applied.",
1067
1093
  "Read the discount lines shown.",
1068
1094
  "Open an order that came from a won auction and read its discount area.",
@@ -28,18 +28,17 @@
28
28
  export const authored = {
29
29
  "checklist-buying-image-tile-layout-bundle-member-thumbnails": {
30
30
  roles: ["guest"],
31
- startPage: "/bundles/bundle-tester-sandbox",
31
+ startPage: "/bundles/bundle-original-collectors-set",
32
32
  steps: [
33
- "Sign in as tester@letitrip.in / TempPass123! so sandbox content is visible.",
34
- "Open /bundles/bundle-tester-sandbox.",
33
+ "Open /bundles/bundle-original-collectors-set in a private window with no session.",
35
34
  "Look at the member collage and count the tiles.",
36
35
  "Check each tile shows its member's photograph rather than an empty bordered box.",
37
36
  "Compare the tiles' widths against one another.",
38
37
  "Hard-reload with Ctrl+Shift+R and look again.",
39
38
  ],
40
- inputs: { bundleId: "bundle-tester-sandbox", memberCount: 2 },
39
+ inputs: { bundleId: "bundle-original-collectors-set", memberCount: 3 },
41
40
  expectedBehaviour: "Each member tile renders its image at its intended size. This collage is one of the twelve surfaces that collapsed at once when a wrapper element appeared between a button and its fill-style image — and it is the surface that stayed broken longest, because a bare display utility on the button voided the primitive's own fix from the call site.",
42
- expectedUiState: "Two tiles, each showing its member's photo, both the same width. An empty bordered box where a photo should be is the collapse; a tile at a fraction of its neighbour's width is the row-direction failure.",
41
+ expectedUiState: "Three tiles — Dranzer S, Driger V and Storm Pegasus — each showing its member's photo, all the same width. An empty bordered box where a photo should be is the collapse; a tile at a fraction of its neighbour's width is the row-direction failure.",
43
42
  expectedData: { blankTiles: 0 },
44
43
  endResult: "Read-only; nothing persists.",
45
44
  },
@@ -61,10 +60,9 @@ export const authored = {
61
60
  },
62
61
  "checklist-buying-image-tile-layout-bundle-tile-opens-lightbox": {
63
62
  roles: ["guest"],
64
- startPage: "/bundles/bundle-tester-sandbox",
63
+ startPage: "/bundles/bundle-original-collectors-set",
65
64
  steps: [
66
- "Sign in as tester@letitrip.in / TempPass123!.",
67
- "Open /bundles/bundle-tester-sandbox and click a member tile in the collage.",
65
+ "Open /bundles/bundle-original-collectors-set in a private window with no session and click a member tile in the collage.",
68
66
  "Read what opens.",
69
67
  "If a lightbox opens, use its next and previous controls and read what changes.",
70
68
  "Close it and check the page is unchanged behind it.",
@@ -30,7 +30,7 @@ export const authored = {
30
30
  roles: ["buyer"],
31
31
  startPage: "/user/orders",
32
32
  steps: [
33
- "Sign in as tester@letitrip.in / TempPass123!.",
33
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
34
34
  "Open /user/orders and read every row's primary label.",
35
35
  "Check each names the ITEM rather than only an order identifier.",
36
36
  "Find a multi-item order and read how its row summarises the contents.",
@@ -45,7 +45,7 @@ export const authored = {
45
45
  roles: ["buyer"],
46
46
  startPage: "/user/orders",
47
47
  steps: [
48
- "Sign in as tester@letitrip.in / TempPass123!.",
48
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
49
49
  "Open /user/orders and click a row's body away from any control.",
50
50
  "Read what opens.",
51
51
  "Go back and use the explicit view-details control on the same row.",
@@ -60,7 +60,7 @@ export const authored = {
60
60
  roles: ["buyer"],
61
61
  startPage: "/user/orders",
62
62
  steps: [
63
- "Sign in as tester@letitrip.in / TempPass123!.",
63
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
64
64
  "Open /user/orders and read every tab offered.",
65
65
  "Note the unfiltered order count on the All tab.",
66
66
  "Open the Auction wins tab and read the count and the rows.",
@@ -77,7 +77,7 @@ export const authored = {
77
77
  roles: ["buyer"],
78
78
  startPage: "/user/orders",
79
79
  steps: [
80
- "Sign in as tester@letitrip.in / TempPass123!.",
80
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
81
81
  "Open /user/orders on the All tab and note the total count.",
82
82
  "Note the count on the Auction wins and Offer wins tabs.",
83
83
  "Subtract those two from the total to get the expected Normal count.",
@@ -94,7 +94,7 @@ export const authored = {
94
94
  roles: ["buyer"],
95
95
  startPage: "/user",
96
96
  steps: [
97
- "Sign in as tester@letitrip.in / TempPass123!.",
97
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
98
98
  "Open /user and find the recent-orders area on the dashboard.",
99
99
  "Read each entry and check it names the item rather than only an identifier.",
100
100
  "Click one entry and read where it lands.",
@@ -109,7 +109,7 @@ export const authored = {
109
109
  roles: ["buyer"],
110
110
  startPage: "/user/orders",
111
111
  steps: [
112
- "Sign in as tester@letitrip.in / TempPass123!.",
112
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
113
113
  "Open /user/orders and look at every row's thumbnail.",
114
114
  "Check each shows a photograph rather than an empty box or a placeholder icon.",
115
115
  "Hard-reload with Ctrl+Shift+R and look again.",
@@ -125,7 +125,7 @@ export const authored = {
125
125
  roles: ["buyer"],
126
126
  startPage: "/user/orders",
127
127
  steps: [
128
- "Sign in as tester@letitrip.in / TempPass123!.",
128
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
129
129
  "Open /user/orders and note the unfiltered count.",
130
130
  "Read the scope tabs offered and select each, reading the counts.",
131
131
  "Read every status filter and select each, noting any that returns nothing.",
@@ -143,7 +143,7 @@ export const authored = {
143
143
  roles: ["buyer"],
144
144
  startPage: "/user/orders",
145
145
  steps: [
146
- "Sign in as tester@letitrip.in / TempPass123!.",
146
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
147
147
  "Open /user/orders and open a SHIPPED order.",
148
148
  "Open its tracking view.",
149
149
  "Read every step in the timeline and the date against each.",
@@ -159,7 +159,7 @@ export const authored = {
159
159
  roles: ["buyer"],
160
160
  startPage: "/user/orders",
161
161
  steps: [
162
- "Sign in as tester@letitrip.in / TempPass123!.",
162
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
163
163
  "Open /user/orders and open an order paid by cash or UPI awaiting payment.",
164
164
  "Read the order detail for a manual-payment panel.",
165
165
  "Check it names the payment method, the amount and the deadline.",
@@ -174,7 +174,7 @@ export const authored = {
174
174
  roles: ["buyer"],
175
175
  startPage: "/user/orders",
176
176
  steps: [
177
- "Sign in as tester@letitrip.in / TempPass123!.",
177
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
178
178
  "Open a manual-payment order and follow the control to its payment page.",
179
179
  "Read whether the page renders the upload form or tells you no manual payment is required.",
180
180
  "Read the UPI identifier displayed and the amount.",
@@ -191,7 +191,7 @@ export const authored = {
191
191
  roles: ["buyer"],
192
192
  startPage: "/user/orders",
193
193
  steps: [
194
- "Sign in as tester@letitrip.in / TempPass123!.",
194
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
195
195
  "Open a manual-payment order's payment page and upload public/test-media/sample-image.png as proof.",
196
196
  "Type QATXN552310 as the payment reference and submit.",
197
197
  "Read what the page shows immediately afterwards.",
@@ -209,7 +209,7 @@ export const authored = {
209
209
  startPage: "/user/orders",
210
210
  steps: [
211
211
  "Sign in as admin@letitrip.in / TempPass123! and request a proof re-upload on that order, with the note 'QA Note reupload — the reference is unreadable.'.",
212
- "Sign out and sign in as tester@letitrip.in / TempPass123!.",
212
+ "Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
213
213
  "Open /user/orders and read that order's row and its detail.",
214
214
  "Read whether the admin's note is shown to the buyer.",
215
215
  "Open the payment page and read whether the upload form is active again and what the deadline shows.",
@@ -226,7 +226,7 @@ export const authored = {
226
226
  roles: ["buyer"],
227
227
  startPage: "/user/orders",
228
228
  steps: [
229
- "Sign in as tester@letitrip.in / TempPass123!.",
229
+ "Sign in as rehan.sheikh@gmail.com / TempPass123!.",
230
230
  "Open /user/orders and find an order whose payment was rejected.",
231
231
  "Read its row and its detail.",
232
232
  "Check the rejection is stated plainly rather than the order simply reading as cancelled.",