@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.
- package/dist/features/categories/repository/categories.repository.js +2 -2
- package/dist/features/shell/SectionForm.js +44 -5
- package/dist/features/tester/seed-data/_money-flows.js +65 -49
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +6 -4
- package/dist/features/tester/seed-data/authored/admin__coupons.js +14 -13
- package/dist/features/tester/seed-data/authored/buying__bidding.js +154 -140
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +4 -4
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +59 -56
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +18 -18
- package/dist/features/tester/seed-data/authored/buying__cart.js +105 -79
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +6 -8
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +13 -13
- package/dist/features/tester/seed-data/authored/buying__offers.js +6 -6
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +8 -7
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +62 -56
- package/dist/features/tester/seed-data/authored/buying__return-request.js +6 -6
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +4 -4
- package/dist/features/tester/seed-data/authored/buying__reviews.js +1 -1
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +8 -8
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +1 -1
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +29 -16
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +9 -9
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +69 -36
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +1 -1
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +2 -2
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +2 -2
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +1 -1
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +1 -1
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +3 -3
- package/dist/features/tester/seed-data/authored/index.js +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +2 -2
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +6 -4
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +2 -2
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +1 -1
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +8 -10
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +2 -2
- package/dist/features/tester/seed-data/authored/seo__og-images.js +3 -4
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +6 -8
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +5 -5
- package/dist/features/tester/seed-data/index.d.ts +0 -10
- package/dist/features/tester/seed-data/index.js +0 -10
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +75 -89
- package/dist/features/tester/seed-data/tester-responses-seed-data.js +5 -5
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -21
- package/dist/seed/addresses-seed-data.js +0 -34
- package/dist/seed/index.d.ts +1 -1
- package/dist/seed/index.js +4 -3
- package/dist/seed/manifest.js +11 -12
- package/dist/seed/notifications-seed-data.js +4 -4
- package/dist/seed/stores-seed-data.js +7 -52
- package/dist/seed/users-seed-data.js +3 -83
- package/package.json +2 -2
- package/scripts/seed-cli.mjs +15 -20
- package/dist/_internal/server/features/classified/actions.d.ts +0 -12
- package/dist/_internal/server/features/classified/actions.js +0 -33
- package/dist/_internal/server/features/digital-code/actions.d.ts +0 -12
- package/dist/_internal/server/features/digital-code/actions.js +0 -33
- package/dist/_internal/server/features/homepage/data.d.ts +0 -18
- package/dist/_internal/server/features/homepage/data.js +0 -70
- package/dist/_internal/server/features/live/actions.d.ts +0 -6
- package/dist/_internal/server/features/live/actions.js +0 -27
- package/dist/_internal/server/features/messages/actions.d.ts +0 -6
- package/dist/_internal/server/features/messages/actions.js +0 -6
- package/dist/_internal/server/features/messages/data.d.ts +0 -10
- package/dist/_internal/server/features/messages/data.js +0 -24
- package/dist/_internal/server/features/messages/index.d.ts +0 -2
- package/dist/_internal/server/features/messages/index.js +0 -2
- package/dist/_internal/server/jobs/core/testerSandboxRefresh.d.ts +0 -12
- package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +0 -112
- package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.d.ts +0 -2
- package/dist/_internal/server/jobs/handlers/testerSandboxRefresh.js +0 -2
- package/dist/_internal/shared/features/homepage/section-gate.d.ts +0 -14
- package/dist/_internal/shared/features/homepage/section-gate.js +0 -51
- package/dist/_internal/shared/features/lottery/config-form.d.ts +0 -58
- package/dist/_internal/shared/features/lottery/config-form.js +0 -71
- package/dist/client/api/useFeatureFlags.d.ts +0 -22
- package/dist/client/api/useFeatureFlags.js +0 -27
- package/dist/features/account/address-validation.d.ts +0 -20
- package/dist/features/account/address-validation.js +0 -35
- package/dist/features/account/components/ChatList.d.ts +0 -14
- package/dist/features/account/components/ChatList.js +0 -9
- package/dist/features/account/components/ChatWindow.d.ts +0 -17
- package/dist/features/account/components/ChatWindow.js +0 -6
- package/dist/features/account/components/MessagesView.d.ts +0 -16
- package/dist/features/account/components/MessagesView.js +0 -5
- package/dist/features/account/components/UserOffersView.d.ts +0 -10
- package/dist/features/account/components/UserOffersView.js +0 -5
- package/dist/features/account/constants/addresses.d.ts +0 -13
- package/dist/features/account/constants/addresses.js +0 -43
- package/dist/features/account/hooks/useAddressForm.d.ts +0 -24
- package/dist/features/account/hooks/useAddressForm.js +0 -58
- package/dist/features/admin/actions/chat-actions.d.ts +0 -29
- package/dist/features/admin/actions/chat-actions.js +0 -101
- package/dist/features/admin/components/AdminFeatureFlagsView.d.ts +0 -9
- package/dist/features/admin/components/AdminFeatureFlagsView.js +0 -109
- package/dist/features/admin/components/AdminSiteView.d.ts +0 -10
- package/dist/features/admin/components/AdminSiteView.js +0 -52
- package/dist/features/admin/hooks/useChat.d.ts +0 -24
- package/dist/features/admin/hooks/useChat.js +0 -100
- package/dist/features/admin/permission-map.d.ts +0 -3
- package/dist/features/admin/permission-map.js +0 -26
- package/dist/features/admin/repository/chat.repository.d.ts +0 -50
- package/dist/features/admin/repository/chat.repository.js +0 -223
- package/dist/features/auth/actions/password-change-otp-actions.d.ts +0 -18
- package/dist/features/auth/actions/password-change-otp-actions.js +0 -88
- package/dist/features/auth/actions/realtime-token-actions.d.ts +0 -11
- package/dist/features/auth/actions/realtime-token-actions.js +0 -38
- package/dist/features/auth/password-change-otp.d.ts +0 -34
- package/dist/features/auth/password-change-otp.js +0 -56
- package/dist/features/classified/components/ClassifiedContactSellerPanel.d.ts +0 -12
- package/dist/features/classified/components/ClassifiedContactSellerPanel.js +0 -49
- package/dist/features/events/api/route.d.ts +0 -12
- package/dist/features/events/api/route.js +0 -90
- package/dist/features/faq/api/route.d.ts +0 -11
- package/dist/features/faq/api/route.js +0 -52
- package/dist/features/faq/hooks/useFAQs.d.ts +0 -22
- package/dist/features/faq/hooks/useFAQs.js +0 -41
- package/dist/features/media/upload/video-poster.test.d.ts +0 -1
- package/dist/features/media/upload/video-poster.test.js +0 -42
- package/dist/features/messages/actions/index.d.ts +0 -2
- package/dist/features/messages/actions/index.js +0 -2
- package/dist/features/messages/actions/messages-actions.d.ts +0 -15
- package/dist/features/messages/actions/messages-actions.js +0 -33
- package/dist/features/messages/actions/ping-rtdb.d.ts +0 -2
- package/dist/features/messages/actions/ping-rtdb.js +0 -26
- package/dist/features/messages/hooks/useConversation.d.ts +0 -22
- package/dist/features/messages/hooks/useConversation.js +0 -155
- package/dist/features/messages/hooks/useConversations.d.ts +0 -15
- package/dist/features/messages/hooks/useConversations.js +0 -104
- package/dist/features/messages/index.d.ts +0 -6
- package/dist/features/messages/index.js +0 -4
- package/dist/features/messages/realtime.d.ts +0 -32
- package/dist/features/messages/realtime.js +0 -39
- package/dist/features/messages/repository/conversations.repository.d.ts +0 -71
- package/dist/features/messages/repository/conversations.repository.js +0 -284
- package/dist/features/messages/schemas/firestore.d.ts +0 -34
- package/dist/features/messages/schemas/firestore.js +0 -16
- package/dist/features/messages/schemas/index.d.ts +0 -177
- package/dist/features/messages/schemas/index.js +0 -35
- package/dist/features/messages/server.d.ts +0 -6
- package/dist/features/messages/server.js +0 -6
- package/dist/features/products/components/MakeOfferForm.d.ts +0 -20
- package/dist/features/products/components/MakeOfferForm.js +0 -9
- package/dist/features/reviews/api/route.d.ts +0 -21
- package/dist/features/reviews/api/route.js +0 -174
- package/dist/features/seller/api/offers/route.d.ts +0 -17
- package/dist/features/seller/api/offers/route.js +0 -63
- package/dist/features/seller/components/SellerAuctionsView.d.ts +0 -9
- package/dist/features/seller/components/SellerAuctionsView.js +0 -113
- package/dist/features/seller/components/SellerOffersPanel.d.ts +0 -21
- package/dist/features/seller/components/SellerOffersPanel.js +0 -160
- package/dist/features/seller/components/SellerPreOrdersView.d.ts +0 -6
- package/dist/features/seller/components/SellerPreOrdersView.js +0 -148
- package/dist/features/seller/components/SellerPrizeDrawsView.d.ts +0 -6
- package/dist/features/seller/components/SellerPrizeDrawsView.js +0 -152
- package/dist/features/seller/permission-map.d.ts +0 -5
- package/dist/features/seller/permission-map.js +0 -17
- package/dist/features/shell/StepForm.d.ts +0 -80
- package/dist/features/shell/StepForm.js +0 -136
- package/dist/features/stores/api/route.d.ts +0 -12
- package/dist/features/stores/api/route.js +0 -110
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +0 -33
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +0 -138
- package/dist/features/tester/seed-data/bids-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/bids-tester-seed-data.js +0 -37
- package/dist/features/tester/seed-data/blog-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/blog-tester-seed-data.js +0 -40
- package/dist/features/tester/seed-data/carts-tester-seed-data.d.ts +0 -3
- package/dist/features/tester/seed-data/carts-tester-seed-data.js +0 -70
- package/dist/features/tester/seed-data/categories-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/categories-tester-seed-data.js +0 -218
- package/dist/features/tester/seed-data/coupons-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/coupons-tester-seed-data.js +0 -76
- package/dist/features/tester/seed-data/events-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/events-tester-seed-data.js +0 -193
- package/dist/features/tester/seed-data/offers-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +0 -191
- package/dist/features/tester/seed-data/orders-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +0 -329
- package/dist/features/tester/seed-data/products-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/products-tester-seed-data.js +0 -815
- package/dist/features/tester/seed-data/stores-tester-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/stores-tester-seed-data.js +0 -79
- package/dist/features/wishlist/components/WishlistToggleButton.d.ts +0 -12
- package/dist/features/wishlist/components/WishlistToggleButton.js +0 -36
- package/dist/monitoring/analytics.d.ts +0 -80
- package/dist/monitoring/analytics.js +0 -176
- package/dist/next/middleware/pii-redactor.d.ts +0 -32
- package/dist/next/middleware/pii-redactor.js +0 -84
- package/dist/providers/db-firebase/realtime.d.ts +0 -42
- package/dist/providers/db-firebase/realtime.js +0 -138
- package/dist/security/rbac/Can.d.ts +0 -31
- package/dist/security/rbac/Can.js +0 -22
- package/dist/security/rbac/default-roles.d.ts +0 -2
- package/dist/security/rbac/default-roles.js +0 -83
- package/dist/security/rbac/hook.d.ts +0 -20
- package/dist/security/rbac/hook.js +0 -30
- package/dist/security/rbac/index.d.ts +0 -8
- package/dist/security/rbac/index.js +0 -6
- package/dist/security/rbac/middleware.d.ts +0 -51
- package/dist/security/rbac/middleware.js +0 -51
- package/dist/security/rbac/resolver.d.ts +0 -5
- package/dist/security/rbac/resolver.js +0 -38
- package/dist/security/rbac/server.d.ts +0 -24
- package/dist/security/rbac/server.js +0 -42
- package/dist/security/rbac/types.d.ts +0 -22
- package/dist/security/rbac/types.js +0 -2
- package/dist/seed/conversations-seed-data.d.ts +0 -2
- package/dist/seed/conversations-seed-data.js +0 -292
- package/dist/utils/filter.helper.d.ts +0 -18
- package/dist/utils/filter.helper.js +0 -21
- package/dist/utils/pagination.helper.d.ts +0 -23
- package/dist/utils/pagination.helper.js +0 -24
- package/dist/utils/search-tokens.d.ts +0 -2
- package/dist/utils/search-tokens.js +0 -21
|
@@ -6,16 +6,28 @@
|
|
|
6
6
|
* generator: the authoring scripts were deleted once it was clear they were
|
|
7
7
|
* scaffolding around work that is simply writing.
|
|
8
8
|
*
|
|
9
|
-
* 🛑
|
|
10
|
-
* user-
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* 🛑 EVERY SEEDED AUCTION BELONGS TO store-beyblade-arena, WHOSE OWNER IS
|
|
10
|
+
* user-tyson-blader. A seller-side step therefore signs in as
|
|
11
|
+
* tyson@beybladearena.in. Signing in as admin@letitrip.in reaches the admin
|
|
12
|
+
* surfaces but NOT the seller editor for someone else's store, and the 403 that
|
|
13
|
+
* produces reads like a permissions bug and is not one.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* therefore
|
|
18
|
-
*
|
|
15
|
+
* 🛑 NO SEEDED AUCTION STARTS EMPTY EXCEPT auction-beyblade-x-shark-edge
|
|
16
|
+
* (bidCount 0, starting bid ₹799). Every case below whose premise is "the first
|
|
17
|
+
* bid" therefore uses that one auction, and each says so in its endResult —
|
|
18
|
+
* whichever of them runs first gets the true zero-bid state and the rest must
|
|
19
|
+
* read the modal's own 'Minimum' preset rather than the literal in this file.
|
|
20
|
+
*
|
|
21
|
+
* Bids live in the CASCADE tier, so a run wipes and re-seeds them and every
|
|
22
|
+
* auction returns to its seeded current bid. Cases that depend on a starting
|
|
23
|
+
* price — the tiered-increment ones especially — are therefore reliable at the
|
|
24
|
+
* START of a run and drift as later cases bid the price up. Where order matters
|
|
25
|
+
* the case says so, and every such case also names the fallback: take the amount
|
|
26
|
+
* from the modal's 'Minimum' preset instead of typing the literal.
|
|
27
|
+
*
|
|
28
|
+
* The increment is TIERED from the current bid, not per-auction: ≤₹100 → ₹10,
|
|
29
|
+
* ≤₹1,000 → ₹100, ≤₹5,000 → ₹200, ≤₹10,000 → ₹500, above → ₹1,000. Every figure
|
|
30
|
+
* below is derived from that table against the auction's seeded current bid.
|
|
19
31
|
*
|
|
20
32
|
* @tag domain:tester
|
|
21
33
|
* @tag layer:seed
|
|
@@ -44,90 +56,90 @@ export const authored = {
|
|
|
44
56
|
roles: ["buyer"],
|
|
45
57
|
startPage: "/user/bids",
|
|
46
58
|
steps: [
|
|
47
|
-
"Sign in as
|
|
48
|
-
"Open /user/bids and read the row for '
|
|
59
|
+
"Sign in as vivaan.kapoor@gmail.com / TempPass123!, the buyer who holds the seeded winning bid.",
|
|
60
|
+
"Open /user/bids and read the row for 'Beyblade Burst B-128 Spriggan Requiem (Ended — Bought Out)', noting whether it offers a 'Pay now' link and what deadline sits beside it.",
|
|
49
61
|
"Leave the win unpaid until the checkout deadline passes.",
|
|
50
62
|
"Open /user/bids again.",
|
|
51
63
|
"Open /cart and switch to the 'Won Auctions' tab.",
|
|
52
64
|
"Open the notification bell.",
|
|
53
65
|
],
|
|
54
|
-
inputs: { auctionId: "auction-
|
|
66
|
+
inputs: { auctionId: "auction-beyblade-burst-spriggan-requiem-bought-out", winningBid: 4999 },
|
|
55
67
|
expectedBehaviour: "Once the checkout deadline passes, the expiry sweep marks the bid forfeited, clears the locked cart line and notifies the buyer. Clearing the line matters beyond tidiness: a leftover locked line keeps the buyer's auction lane non-empty, and that lane outranks the standard one, so their entire cart stays blocked.",
|
|
56
68
|
expectedUiState: "The /user/bids row no longer offers 'Pay now' and reads as forfeited or expired. The Won Auctions tab in the cart is empty. A notification about the lapsed win is present.",
|
|
57
69
|
expectedData: { payNowLinkPresent: false },
|
|
58
70
|
endResult: "The forfeited state survives a reload and the cart is unblocked. The seller is NOT notified — nothing was sold.",
|
|
59
71
|
needsReview: true,
|
|
60
|
-
reviewNote: "The 48-hour checkout deadline is set by the settlement job, not by seed data, so tester-window.ts cannot shorten it and the case cannot run inside a session. It needs a won-auction fixture carrying an already-past checkoutDeadline — logged in tester/.tester-runs/fixture-requests.jsonl. Until that exists, answer null rather than waiting two days.",
|
|
72
|
+
reviewNote: "The 48-hour checkout deadline is set by the settlement job, not by seed data, so tester-window.ts cannot shorten it and the case cannot run inside a session. The seeded win on auction-beyblade-burst-spriggan-requiem-bought-out is also already settled rather than pending, so the unpaid state this case needs does not exist in the seed either. It needs a won-auction fixture carrying an already-past checkoutDeadline — logged in tester/.tester-runs/fixture-requests.jsonl. Until that exists, answer null rather than waiting two days.",
|
|
61
73
|
},
|
|
62
74
|
"checklist-buying-bidding-bid-below-current-plus-increment-rejected": {
|
|
63
75
|
roles: ["buyer"],
|
|
64
|
-
startPage: "/auctions/auction-
|
|
76
|
+
startPage: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
65
77
|
steps: [
|
|
66
78
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
67
|
-
"Open /auctions/auction-
|
|
68
|
-
"
|
|
69
|
-
"Type
|
|
79
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles and read the current bid — seeded at ₹1,650.00 — and the min increment beside it.",
|
|
80
|
+
"Click 'Place a bid' and select 'Custom' in the preset row.",
|
|
81
|
+
"Type 1700 in the amount field.",
|
|
70
82
|
"Click 'Place Bid'.",
|
|
71
|
-
"Clear the field and type
|
|
83
|
+
"Clear the field and type 1600.",
|
|
72
84
|
"Click 'Place Bid'.",
|
|
73
85
|
],
|
|
74
|
-
inputs: { currentBid:
|
|
75
|
-
expectedBehaviour: "₹
|
|
76
|
-
expectedUiState: "₹
|
|
86
|
+
inputs: { currentBid: 1650, increment: 200, tooSmall: 1700, tooLow: 1600 },
|
|
87
|
+
expectedBehaviour: "₹1,700 clears the current bid but not the ₹200 increment, and ₹1,600 does not even clear the current bid. Both are refused, and with DIFFERENT messages — collapsing them into one generic error tells the bidder nothing about which rule they broke.",
|
|
88
|
+
expectedUiState: "₹1,700 produces an inline error under the amount field naming the increment, in the shape 'Minimum increment is ₹200.00'. ₹1,600 produces a distinct inline error about exceeding the current winning bid. Both appear on the field itself, not as a toast, and neither submit silently does nothing.",
|
|
77
89
|
expectedData: { bidsPlaced: 0 },
|
|
78
|
-
endResult: "No bid was recorded: the current bid and bid count are unchanged after a reload.",
|
|
90
|
+
endResult: "No bid was recorded: the current bid and bid count are unchanged after a reload. If an earlier case has already bid this auction above ₹1,650, read the current bid off the page and type one rupee above it and one rupee below it instead — the two refusals are the assertion, not the literals.",
|
|
79
91
|
},
|
|
80
92
|
"checklist-buying-bidding-bid-count-increments-by-one": {
|
|
81
93
|
roles: ["buyer"],
|
|
82
|
-
startPage: "/auctions/auction-
|
|
94
|
+
startPage: "/auctions/auction-beyblade-x-shark-edge",
|
|
83
95
|
steps: [
|
|
84
96
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
85
|
-
"Open /auctions/auction-
|
|
86
|
-
"Click 'Place a bid', select 'Custom', type
|
|
97
|
+
"Open /auctions/auction-beyblade-x-shark-edge and read the bid count — seeded at 0, with a starting bid of ₹799.00.",
|
|
98
|
+
"Click 'Place a bid', select 'Custom', type 1250, and click 'Place Bid'.",
|
|
87
99
|
"Read the bid count and current bid.",
|
|
88
100
|
"Sign out and sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
89
|
-
"Open /auctions/auction-
|
|
90
|
-
"Click 'Place a bid', select 'Custom', type
|
|
101
|
+
"Open /auctions/auction-beyblade-x-shark-edge.",
|
|
102
|
+
"Click 'Place a bid', select 'Custom', type 1000, and click 'Place Bid'.",
|
|
91
103
|
"Read the bid count and current bid.",
|
|
92
104
|
"Click 'Bid History'.",
|
|
93
105
|
],
|
|
94
|
-
inputs: { proxyMax:
|
|
106
|
+
inputs: { startingBid: 799, proxyMax: 1250, challengerBid: 1000 },
|
|
95
107
|
expectedBehaviour: "Each submitted bid adds exactly one row. A proxy auction is the case where a naive implementation double-counts: the challenger's bid plus the automatic counter-bid it triggers can both be recorded, so the count jumps by two for one user action.",
|
|
96
|
-
expectedUiState: "After the first bid: '1 bid' and a current bid of ₹
|
|
97
|
-
expectedData: { bidCount: 2, currentBid:
|
|
98
|
-
endResult: "On reload: 2 bids and ₹
|
|
108
|
+
expectedUiState: "After the first bid: '1 bid' and a current bid of ₹799.00 — the starting price, not ₹1,250, because a proxy maximum is not the visible price. After the second: '2 bids', NOT 3, and a current bid of ₹1,100.00 — the challenger's ₹1,000 plus one ₹100 increment. Bid History shows the ₹1,000 row marked outbid.",
|
|
109
|
+
expectedData: { bidCount: 2, currentBid: 1100 },
|
|
110
|
+
endResult: "On reload: 2 bids and ₹1,100.00. A count of 3 means the proxy counter-bid was recorded as a separate user bid. This is the only seeded auction that starts with no bids, so run it before any other zero-bid case; if it already has bids, the count rising by exactly one per submitted bid is still the assertion.",
|
|
99
111
|
},
|
|
100
112
|
"checklist-buying-bidding-bid-custom-need-not-be-exact-multiple": {
|
|
101
113
|
roles: ["buyer"],
|
|
102
|
-
startPage: "/auctions/auction-
|
|
114
|
+
startPage: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
103
115
|
steps: [
|
|
104
116
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
105
|
-
"Open /auctions/auction-
|
|
117
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles and click 'Place a bid'.",
|
|
106
118
|
"Select 'Custom' in the preset row.",
|
|
107
|
-
"Type
|
|
119
|
+
"Type 1937 in the amount field.",
|
|
108
120
|
"Read the helper text under the field.",
|
|
109
121
|
"Click 'Place Bid'.",
|
|
110
122
|
],
|
|
111
|
-
inputs: { bidAmount:
|
|
112
|
-
expectedBehaviour: "The increment is a FLOOR, not a grid. ₹
|
|
113
|
-
expectedUiState: "The modal closes with a success state. No error mentioning multiples of the increment appears. The helper text says any amount at or above the minimum is allowed rather than implying a step. Current bid becomes ₹
|
|
114
|
-
expectedData: { currentBid:
|
|
115
|
-
endResult: "On reload the current bid still reads ₹
|
|
123
|
+
inputs: { currentBid: 1650, minimumNextBid: 1850, bidAmount: 1937, increment: 200 },
|
|
124
|
+
expectedBehaviour: "The increment is a FLOOR, not a grid. ₹1,937 clears the ₹1,850 minimum and is accepted even though it is not a multiple of ₹200. Rejecting it would quietly force every bidder onto round numbers the rules never required.",
|
|
125
|
+
expectedUiState: "The modal closes with a success state. No error mentioning multiples of the increment appears. The helper text says any amount at or above the minimum is allowed rather than implying a step. Current bid becomes ₹1,937.00 — not ₹1,850 and not ₹2,050.",
|
|
126
|
+
expectedData: { currentBid: 1937 },
|
|
127
|
+
endResult: "On reload the current bid still reads ₹1,937.00. If an earlier case moved this auction past ₹1,850, read the 'Minimum' preset and type a deliberately non-round amount just above it instead — that the amount is not a multiple of the increment is the assertion, not the literal ₹1,937.",
|
|
116
128
|
},
|
|
117
129
|
"checklist-buying-bidding-bid-history": {
|
|
118
130
|
roles: ["buyer"],
|
|
119
131
|
startPage: "/user/bids",
|
|
120
132
|
steps: [
|
|
121
133
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
122
|
-
"Open /auctions/auction-
|
|
134
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles, click 'Place a bid', select the 'Minimum' preset — ₹1,850.00 against the seeded current bid of ₹1,650.00 — and click 'Place Bid'.",
|
|
123
135
|
"Open /user/bids.",
|
|
124
136
|
"Read the rows from the top.",
|
|
125
137
|
"Reload the page and read them again.",
|
|
126
138
|
],
|
|
127
|
-
inputs: { bidAmount:
|
|
139
|
+
inputs: { bidAmount: 1850 },
|
|
128
140
|
expectedBehaviour: "My Bids lists every auction this buyer has bid on, newest first, and each row is reachable — a row offering only status with no way to open the auction is a dead end.",
|
|
129
|
-
expectedUiState: "The row for
|
|
130
|
-
endResult: "After reload the same rows appear in the same order. An empty list here immediately after placing a bid means the bid was written without a buyer reference.",
|
|
141
|
+
expectedUiState: "The row for 'Beyblade Burst B-100 Cho-Z Achilles' is at the top, carrying its amount, the auction title and its current status. Clicking the row or its title opens the auction.",
|
|
142
|
+
endResult: "After reload the same rows appear in the same order. An empty list here immediately after placing a bid means the bid was written without a buyer reference. rehan.sheikh@gmail.com has NO seeded bids, so before this case /user/bids is legitimately empty — that is the starting state, not a failure.",
|
|
131
143
|
},
|
|
132
144
|
"checklist-buying-bidding-bid-history-auction-detail-pagination": {
|
|
133
145
|
roles: ["buyer"],
|
|
@@ -156,8 +168,8 @@ export const authored = {
|
|
|
156
168
|
"Read the bidder identity, amount and timestamp on every visible row.",
|
|
157
169
|
],
|
|
158
170
|
expectedBehaviour: "Bidder names are masked on the way out of the server, not hidden in the renderer. The masking helper for bids once returned its input unchanged while being named as though it masked — every bidder's real name was in the public payload and nothing displayed it, so the leak was invisible from the screen. Displaying the masked name is what makes that checkable by eye.",
|
|
159
|
-
expectedUiState: "Each row reads in the shape '₹3,199.00 · M***
|
|
160
|
-
endResult: "The same masked names and timestamps appear after reload. A real full name anywhere in these rows is a PII leak and fails the case outright.",
|
|
171
|
+
expectedUiState: "Each row reads in the shape '₹3,199.00 · M*** B*** · 4 Sept, 17:06'. The name is genuinely masked — asterisks in the middle — and is not a full readable name, and not a placeholder like 'Bidder'. The timestamp carries both a date and a clock time, not a date alone.",
|
|
172
|
+
endResult: "The same masked names and timestamps appear after reload. A real full name — 'Meera Bey', 'Rohit Collector' or 'Ananya Collector', the three seeded bidders on this auction — anywhere in these rows is a PII leak and fails the case outright.",
|
|
161
173
|
},
|
|
162
174
|
"checklist-buying-bidding-bid-increment-live-tier-change": {
|
|
163
175
|
roles: ["buyer"],
|
|
@@ -176,24 +188,24 @@ export const authored = {
|
|
|
176
188
|
endResult: "Reloading window A confirms ₹500. Run this early in a session: bids are wiped and re-seeded per run, so L-Drago starts at ₹3,199, but a later case that bids it up moves it out of the ₹200 band and this case can no longer cross the boundary.",
|
|
177
189
|
},
|
|
178
190
|
"checklist-buying-bidding-bid-increment-override-floor-raising": {
|
|
179
|
-
roles: ["buyer", "
|
|
180
|
-
startPage: "/auctions/auction-
|
|
191
|
+
roles: ["buyer", "seller"],
|
|
192
|
+
startPage: "/auctions/auction-beyblade-original-seaborg",
|
|
181
193
|
steps: [
|
|
182
|
-
"Sign in as
|
|
183
|
-
"Open the seller editor for auction-
|
|
194
|
+
"Sign in as tyson@beybladearena.in / TempPass123!, the owner of store-beyblade-arena, which owns every seeded auction.",
|
|
195
|
+
"Open the seller editor for auction-beyblade-original-seaborg and set 'Minimum Bid Increment' to 1, then save.",
|
|
184
196
|
"Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
185
|
-
"Open /auctions/auction-
|
|
186
|
-
"Clear the field, type
|
|
187
|
-
"Sign out, sign in as
|
|
197
|
+
"Open /auctions/auction-beyblade-original-seaborg — seeded current bid ₹2,200.00 — click 'Place a bid', select 'Custom', type 2300, and click 'Place Bid'.",
|
|
198
|
+
"Clear the field, type 2400, and click 'Place Bid'.",
|
|
199
|
+
"Sign out, sign in as tyson@beybladearena.in / TempPass123!, and set the same auction's 'Minimum Bid Increment' to 2000, then save.",
|
|
188
200
|
"Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
189
|
-
"Open the auction, click 'Place a bid', select 'Custom', type
|
|
190
|
-
"Clear the field, type
|
|
201
|
+
"Open the auction, click 'Place a bid', select 'Custom', type 3000, and click 'Place Bid'.",
|
|
202
|
+
"Clear the field, type 4400, and click 'Place Bid'.",
|
|
191
203
|
],
|
|
192
|
-
inputs: { overrideBelowTier: 1, overrideAboveTier: 2000, tierIncrement:
|
|
193
|
-
expectedBehaviour: "The per-listing override can only RAISE the floor, never lower it. With the override at ₹1 the ₹
|
|
194
|
-
expectedUiState: "Both refusals are inline errors on the amount field naming the effective minimum — ₹
|
|
195
|
-
expectedData: { effectiveIncrementFirstHalf:
|
|
196
|
-
endResult: "The current bid reflects only the two accepted bids. Set the increment back to
|
|
204
|
+
inputs: { currentBid: 2200, overrideBelowTier: 1, overrideAboveTier: 2000, tierIncrement: 200 },
|
|
205
|
+
expectedBehaviour: "The per-listing override can only RAISE the floor, never lower it. With the override at ₹1 the ₹200 tier still governs, so ₹2,300 is refused and ₹2,400 accepted. With the override at ₹2,000 the override governs, so ₹3,000 is refused and ₹4,400 accepted. A seller must not be able to undercut the platform's own increment band.",
|
|
206
|
+
expectedUiState: "Both refusals are inline errors on the amount field naming the effective minimum — ₹200 in the first half, ₹2,000 in the second. Both accepted bids close the modal and raise the current bid.",
|
|
207
|
+
expectedData: { effectiveIncrementFirstHalf: 200, effectiveIncrementSecondHalf: 2000 },
|
|
208
|
+
endResult: "The current bid reflects only the two accepted bids, ending at ₹4,400.00. Set the increment back to empty afterwards — this auction is seeded with no override. Every seeded auction lives in store-beyblade-arena and its owner is tyson@beybladearena.in; signing in as any other seller gives a 403 that reads like a permissions bug and is not one.",
|
|
197
209
|
},
|
|
198
210
|
"checklist-buying-bidding-bid-increment-tiered": {
|
|
199
211
|
roles: ["buyer"],
|
|
@@ -213,206 +225,208 @@ export const authored = {
|
|
|
213
225
|
},
|
|
214
226
|
"checklist-buying-bidding-bid-preset-follows-live-price": {
|
|
215
227
|
roles: ["buyer"],
|
|
216
|
-
startPage: "/auctions/auction-
|
|
228
|
+
startPage: "/auctions/auction-beyblade-x-wizard-fafnir",
|
|
217
229
|
steps: [
|
|
218
|
-
"In window A, sign in as rehan.sheikh@gmail.com / TempPass123! and open /auctions/auction-
|
|
219
|
-
"Click 'Place a bid' and select the 'Minimum' preset at ₹
|
|
230
|
+
"In window A, sign in as rehan.sheikh@gmail.com / TempPass123! and open /auctions/auction-beyblade-x-wizard-fafnir — seeded current bid ₹1,450.00.",
|
|
231
|
+
"Click 'Place a bid' and select the 'Minimum' preset at ₹1,650.00, without clicking 'Place Bid'.",
|
|
220
232
|
"In window B, sign in as vivaan.kapoor@gmail.com / TempPass123! and open the same auction.",
|
|
221
|
-
"In window B click 'Place a bid', select 'Custom', type
|
|
233
|
+
"In window B click 'Place a bid', select 'Custom', type 1850, and click 'Place Bid'.",
|
|
222
234
|
"Switch to window A and wait up to 10 seconds without clicking anything.",
|
|
223
235
|
"Read the preset labels, the helper text and the number in the amount field.",
|
|
224
236
|
],
|
|
225
|
-
inputs: { staleAmount:
|
|
237
|
+
inputs: { currentBid: 1450, staleAmount: 1650, competingBid: 1850, newMinimum: 2050 },
|
|
226
238
|
expectedBehaviour: "An open bid modal re-prices itself from the live feed. Otherwise the tester submits a figure that was valid when the modal opened, gets a rejection they cannot explain, and the real cause — someone else bid — is invisible.",
|
|
227
|
-
expectedUiState: "Window A's amount field now reads
|
|
228
|
-
expectedData: { refreshedMinimum:
|
|
229
|
-
endResult: "Nothing persists until submitted. Clicking 'Place Bid' with the refreshed amount succeeds; a modal still showing ₹
|
|
239
|
+
expectedUiState: "Window A's amount field now reads 2050, the first preset reads 'Minimum / ₹2,050.00', and the helper text names the new minimum. The stale 1650 is gone from the field rather than sitting there next to updated labels.",
|
|
240
|
+
expectedData: { refreshedMinimum: 2050 },
|
|
241
|
+
endResult: "Nothing persists in window A until submitted. Clicking 'Place Bid' with the refreshed amount succeeds; a modal still showing ₹1,650 would fail. If this auction has already been bid up, take both figures from the modal itself — that window A's preset MOVES without a reload is the assertion.",
|
|
230
242
|
},
|
|
231
243
|
"checklist-buying-bidding-bid-presets-are-increment-multiples": {
|
|
232
244
|
roles: ["buyer"],
|
|
233
|
-
startPage: "/auctions/auction-
|
|
245
|
+
startPage: "/auctions/auction-beyblade-x-shark-edge",
|
|
234
246
|
steps: [
|
|
235
247
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
236
|
-
"Open /auctions/auction-
|
|
248
|
+
"Open /auctions/auction-beyblade-x-shark-edge and read the starting bid, ₹799.00, the bid count, seeded at 0, and the min increment.",
|
|
237
249
|
"Click 'Place a bid'.",
|
|
238
250
|
"Read the three preset buttons beside 'Custom'.",
|
|
239
251
|
],
|
|
240
|
-
inputs: {
|
|
241
|
-
expectedBehaviour: "Presets are 1×, 5× and 10× the EFFECTIVE increment, computed from the minimum next bid. Deriving them from the raw multipliers instead would offer '+₹1', '+₹5' and '+₹10' on a ₹
|
|
242
|
-
expectedUiState: "The row reads 'Minimum / ₹
|
|
252
|
+
inputs: { startingBid: 799, increment: 100 },
|
|
253
|
+
expectedBehaviour: "Presets are 1×, 5× and 10× the EFFECTIVE increment, computed from the minimum next bid. Deriving them from the raw multipliers instead would offer '+₹1', '+₹5' and '+₹10' on a ₹799 auction — every one of them below the minimum and therefore guaranteed to be rejected.",
|
|
254
|
+
expectedUiState: "The row reads 'Minimum / ₹799.00', '+₹400.00 / ₹1,199.00', '+₹900.00 / ₹1,699.00', 'Custom'. On a zero-bid auction the first is labelled 'Minimum', not '+₹0'. No preset offers a one-, five- or ten-rupee step.",
|
|
243
255
|
expectedData: { presetCount: 3 },
|
|
244
|
-
endResult: "Read-only inspection of the modal; nothing is submitted and nothing persists.",
|
|
256
|
+
endResult: "Read-only inspection of the modal; nothing is submitted and nothing persists. If an earlier case has already bid this auction, the labels shift accordingly — that no preset is a bare ₹1 / ₹5 / ₹10 step, and that the first is a real minimum, is the assertion.",
|
|
245
257
|
},
|
|
246
258
|
"checklist-buying-bidding-bid-succeeds-and-outbids-previous-winner": {
|
|
247
259
|
roles: ["buyer"],
|
|
248
|
-
startPage: "/auctions/auction-
|
|
260
|
+
startPage: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
249
261
|
steps: [
|
|
250
262
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
251
|
-
"Open /auctions/auction-
|
|
263
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles, read the bid count, click 'Place a bid', select the 'Minimum' preset at ₹1,850.00, and click 'Place Bid'.",
|
|
252
264
|
"Read the current bid and bid count.",
|
|
253
265
|
"Sign out and sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
254
|
-
"Open the same auction, click 'Place a bid', select 'Custom', type
|
|
266
|
+
"Open the same auction, click 'Place a bid', select 'Custom', type 2050, and click 'Place Bid'.",
|
|
255
267
|
"Read the whole modal for error text before it closes.",
|
|
256
268
|
"Click 'Bid History'.",
|
|
257
269
|
],
|
|
258
|
-
inputs: { firstBid:
|
|
270
|
+
inputs: { currentBid: 1650, firstBid: 1850, secondBid: 2050 },
|
|
259
271
|
expectedBehaviour: "The higher bid is written and the previous leader's row is flipped to outbid in the same batch. The batch write is the fragile part: it once resolved its Firestore module through a relative runtime require that broke only in production, so every bid failed with a module-not-found error while every local test passed.",
|
|
260
|
-
expectedUiState: "Current bid ₹
|
|
261
|
-
expectedData: { currentBid:
|
|
262
|
-
endResult: "On reload the current bid and count persist at ₹
|
|
272
|
+
expectedUiState: "Current bid ₹2,050.00, and the bid count has risen by exactly 2 from what it read at the start — 4 against the seeded 2. The ₹1,850 row in Bid History is marked outbid. No text containing a file path, 'Cannot find module', 'Require stack' or 'Batch write failed' appears anywhere in the modal or as a toast.",
|
|
273
|
+
expectedData: { currentBid: 2050, bidCountDelta: 2 },
|
|
274
|
+
endResult: "On reload the current bid and count persist at ₹2,050.00 and the raised count.",
|
|
263
275
|
},
|
|
264
276
|
"checklist-buying-bidding-first-bid-can-equal-starting-bid": {
|
|
265
277
|
roles: ["buyer"],
|
|
266
|
-
startPage: "/auctions/auction-
|
|
278
|
+
startPage: "/auctions/auction-beyblade-x-shark-edge",
|
|
267
279
|
steps: [
|
|
268
280
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
269
|
-
"Open /auctions/auction-
|
|
281
|
+
"Open /auctions/auction-beyblade-x-shark-edge while it still shows 0 bids.",
|
|
270
282
|
"Click 'Place a bid' and read the minimum shown in the modal.",
|
|
271
283
|
"Select the 'Minimum' preset and click 'Place Bid'.",
|
|
272
284
|
"Sign out and sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
273
|
-
"Open the same auction, click 'Place a bid', select 'Custom', type
|
|
285
|
+
"Open the same auction, click 'Place a bid', select 'Custom', type 850, and click 'Place Bid'.",
|
|
274
286
|
],
|
|
275
|
-
inputs: { startingBid:
|
|
276
|
-
expectedBehaviour: "The FIRST bid may equal the starting price exactly — there is nothing to outbid yet. Only from the second bid onwards does current-plus-increment apply, which is why ₹
|
|
277
|
-
expectedUiState: "The modal's minimum equals the starting bid, ₹
|
|
278
|
-
expectedData: { currentBid:
|
|
279
|
-
endResult: "On reload: ₹
|
|
287
|
+
inputs: { startingBid: 799, secondBid: 850, increment: 100 },
|
|
288
|
+
expectedBehaviour: "The FIRST bid may equal the starting price exactly — there is nothing to outbid yet. Only from the second bid onwards does current-plus-increment apply, which is why ₹850 is then refused.",
|
|
289
|
+
expectedUiState: "The modal's minimum equals the starting bid, ₹799.00, and its first preset is labelled 'Minimum' rather than '+₹0'. The first bid is accepted: 1 bid at ₹799.00. The second bidder's ₹850 draws an inline increment error naming ₹100.",
|
|
290
|
+
expectedData: { currentBid: 799, bidCount: 1 },
|
|
291
|
+
endResult: "On reload: ₹799.00 and 1 bid. A refusal of the first bid for being 'not above the current bid' is the failure this case catches. auction-beyblade-x-shark-edge is the ONLY seeded auction with no bids, so this case must run before any other case bids on it; if it already shows bids, answer null rather than testing something else.",
|
|
280
292
|
},
|
|
281
293
|
"checklist-buying-bidding-first-bid-displays-at-starting-price": {
|
|
282
294
|
roles: ["buyer"],
|
|
283
|
-
startPage: "/auctions/auction-
|
|
295
|
+
startPage: "/auctions/auction-beyblade-x-shark-edge",
|
|
284
296
|
steps: [
|
|
285
297
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
286
|
-
"Open /auctions/auction-
|
|
287
|
-
"Click 'Place a bid', select 'Custom', type
|
|
298
|
+
"Open /auctions/auction-beyblade-x-shark-edge while it still shows 0 bids.",
|
|
299
|
+
"Click 'Place a bid', select 'Custom', type 1250, and click 'Place Bid'.",
|
|
288
300
|
"Close the modal and read the current bid on the page.",
|
|
289
301
|
"Sign out and sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
290
|
-
"Open the same auction, click 'Place a bid', select 'Custom', type
|
|
302
|
+
"Open the same auction, click 'Place a bid', select 'Custom', type 1000, and click 'Place Bid'.",
|
|
291
303
|
"Read the current bid and who is leading.",
|
|
292
304
|
],
|
|
293
|
-
inputs: { startingBid:
|
|
294
|
-
expectedBehaviour: "A custom amount is a proxy MAXIMUM, not the price. Bidding ₹
|
|
295
|
-
expectedUiState: "After the proxy bid the current bid reads ₹
|
|
296
|
-
expectedData: { currentBidAfterProxy:
|
|
297
|
-
endResult: "On reload: ₹
|
|
305
|
+
inputs: { startingBid: 799, proxyMax: 1250, challengerBid: 1000 },
|
|
306
|
+
expectedBehaviour: "A custom amount is a proxy MAXIMUM, not the price. Bidding ₹1,250 into an empty auction shows ₹799 — the starting price — because there is no one to outbid. When a challenger bids ₹1,000 the proxy answers with exactly one increment above it, ₹1,100, and stops there rather than jumping to the maximum.",
|
|
307
|
+
expectedUiState: "After the proxy bid the current bid reads ₹799.00, not ₹899 and not ₹1,250. After the challenger's bid it reads ₹1,100.00 and rehan.sheikh@gmail.com is still shown as leading. A visible ₹1,250 would publish the buyer's maximum to every competitor.",
|
|
308
|
+
expectedData: { currentBidAfterProxy: 799, currentBidAfterChallenge: 1100 },
|
|
309
|
+
endResult: "On reload: ₹1,100.00 with the proxy bidder leading. This is the only seeded auction with no bids — run it before any other zero-bid case, or answer null if it already carries bids.",
|
|
298
310
|
},
|
|
299
311
|
"checklist-buying-bidding-outbid-notification": {
|
|
300
312
|
roles: ["buyer"],
|
|
301
|
-
startPage: "/auctions/auction-
|
|
313
|
+
startPage: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
302
314
|
steps: [
|
|
303
315
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
304
|
-
"Open /auctions/auction-
|
|
316
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles, click 'Place a bid', select the 'Minimum' preset at ₹1,850.00, and click 'Place Bid'.",
|
|
305
317
|
"Sign out and sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
306
|
-
"Open the same auction, click 'Place a bid', select 'Custom', type
|
|
318
|
+
"Open the same auction, click 'Place a bid', select 'Custom', type 2050, and click 'Place Bid'.",
|
|
307
319
|
"Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
308
320
|
"Open the notification bell in the header.",
|
|
309
321
|
"Open /user/notifications.",
|
|
310
322
|
"Click the outbid notification.",
|
|
311
323
|
],
|
|
312
|
-
inputs: { firstBid:
|
|
324
|
+
inputs: { firstBid: 1850, outbiddingBid: 2050 },
|
|
313
325
|
expectedBehaviour: "Losing the lead notifies the bidder who lost it, and the notification links somewhere real — a bid has no per-record page in any role, so the correct destination is the bids list rather than a fabricated per-bid URL that would 404.",
|
|
314
|
-
expectedUiState: "The bell shows an unread count and the list holds an outbid entry naming
|
|
315
|
-
endResult: "The notification survives a reload of /user/notifications. No notification at all means the outbid hook never fired.",
|
|
326
|
+
expectedUiState: "The bell shows an unread count and the list holds an outbid entry naming 'Beyblade Burst B-100 Cho-Z Achilles'. Clicking it lands on a real page, not a 404.",
|
|
327
|
+
endResult: "The notification survives a reload of /user/notifications. No notification at all means the outbid hook never fired. If the auction has been bid past ₹1,850 by an earlier case, take both amounts from the 'Minimum' preset instead.",
|
|
316
328
|
},
|
|
317
329
|
"checklist-buying-bidding-outbid-notification-goes-to-outbid-user": {
|
|
318
330
|
roles: ["buyer"],
|
|
319
|
-
startPage: "/auctions/auction-
|
|
331
|
+
startPage: "/auctions/auction-beyblade-x-wizard-fafnir",
|
|
320
332
|
steps: [
|
|
321
333
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
322
|
-
"Open /auctions/auction-
|
|
334
|
+
"Open /auctions/auction-beyblade-x-wizard-fafnir — seeded current bid ₹1,450.00 — click 'Place a bid', select 'Custom', type 2400, and click 'Place Bid'.",
|
|
323
335
|
"Sign out and sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
324
|
-
"Open the same auction, click 'Place a bid', select 'Custom', type
|
|
336
|
+
"Open the same auction, click 'Place a bid', select 'Custom', type 1900, and click 'Place Bid'.",
|
|
325
337
|
"Open /user/notifications as vivaan.kapoor@gmail.com.",
|
|
326
338
|
"Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
327
339
|
"Open /user/notifications as rehan.sheikh@gmail.com.",
|
|
328
340
|
],
|
|
329
|
-
inputs: { proxyMax:
|
|
341
|
+
inputs: { currentBid: 1450, proxyMax: 2400, losingBid: 1900 },
|
|
330
342
|
expectedBehaviour: "The notification goes to whoever LOST the lead. Here the challenger is outbid the instant they bid, by the standing proxy, so the challenger is notified and the proxy holder — who never lost the lead — is not. Notifying the leader instead, or notifying both, is the inversion this case catches.",
|
|
331
|
-
expectedUiState: "vivaan.kapoor@gmail.com has a new outbid notification
|
|
343
|
+
expectedUiState: "vivaan.kapoor@gmail.com has a new outbid notification naming 'Beyblade X BX-06 Wizard Fafnir (Long-Running Auction)'. rehan.sheikh@gmail.com has NO new outbid notification, only whatever was there before.",
|
|
332
344
|
expectedData: { challengerNotified: true, leaderNotified: false },
|
|
333
345
|
endResult: "Both inboxes still read that way after a reload. The leader receiving an outbid notice while still leading is a fail even though a notification did fire.",
|
|
334
346
|
},
|
|
335
347
|
"checklist-buying-bidding-place-bid": {
|
|
336
348
|
roles: ["buyer"],
|
|
337
|
-
startPage: "/auctions/auction-
|
|
349
|
+
startPage: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
338
350
|
steps: [
|
|
339
351
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
340
|
-
"Open /auctions/auction-
|
|
341
|
-
"Read the current bid and bid count.",
|
|
352
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles.",
|
|
353
|
+
"Read the current bid, seeded at ₹1,650.00, and the bid count, seeded at 2.",
|
|
342
354
|
"Click 'Place a bid'.",
|
|
343
|
-
"Select the 'Minimum' preset at ₹
|
|
355
|
+
"Select the 'Minimum' preset at ₹1,850.00.",
|
|
344
356
|
"Click 'Place Bid'.",
|
|
345
357
|
"Open /user/bids.",
|
|
346
358
|
],
|
|
347
|
-
inputs: { bidAmount:
|
|
359
|
+
inputs: { currentBid: 1650, bidAmount: 1850 },
|
|
348
360
|
expectedBehaviour: "The bid is written, the auction's current bid and count move, and the bid appears in the buyer's own list. All three must happen: a bid recorded against the auction but missing from /user/bids means the buyer reference was not stored.",
|
|
349
|
-
expectedUiState: "The modal closes with a success state. The auction reads ₹
|
|
350
|
-
expectedData: { currentBid:
|
|
351
|
-
endResult: "Reloading the auction still shows
|
|
361
|
+
expectedUiState: "The modal closes with a success state. The auction reads ₹1,850.00 and its bid count has risen by exactly one. No stack trace, file path or 'Cannot find module' text appears anywhere. /user/bids has a row for this auction.",
|
|
362
|
+
expectedData: { currentBid: 1850, bidCountDelta: 1 },
|
|
363
|
+
endResult: "Reloading the auction still shows the raised bid and count, and the row is still on /user/bids. If an earlier case already moved this auction, use the 'Minimum' preset figure the modal offers rather than the literal ₹1,850.",
|
|
352
364
|
},
|
|
353
365
|
"checklist-buying-bidding-place-bid-live-other-viewer": {
|
|
354
366
|
roles: ["buyer"],
|
|
355
|
-
startPage: "/auctions/auction-
|
|
367
|
+
startPage: "/auctions/auction-beyblade-x-wizard-fafnir",
|
|
356
368
|
steps: [
|
|
357
|
-
"In window A, sign in as rehan.sheikh@gmail.com / TempPass123! and open /auctions/auction-
|
|
369
|
+
"In window A, sign in as rehan.sheikh@gmail.com / TempPass123! and open /auctions/auction-beyblade-x-wizard-fafnir.",
|
|
358
370
|
"In window B, sign in as a DIFFERENT buyer (vivaan.kapoor@gmail.com / TempPass123!) and open the same auction; read the current bid and bid count.",
|
|
359
|
-
"In window A, click 'Place a bid', select the 'Minimum' preset at ₹
|
|
371
|
+
"In window A, click 'Place a bid', select the 'Minimum' preset at ₹1,650.00, and click 'Place Bid'.",
|
|
360
372
|
"Switch to window B and watch for up to 10 seconds without reloading.",
|
|
361
373
|
],
|
|
362
|
-
inputs: { bidAmount:
|
|
374
|
+
inputs: { currentBid: 1450, bidAmount: 1650 },
|
|
363
375
|
expectedBehaviour: "Bid updates are relayed over SSE from the server — the underlying realtime node is not client-readable, so the browser never reads it directly. Window B is a SECOND SIGNED-IN BUYER, not a signed-out visitor: bid figures are now hidden from guests, so a signed-out window B would show 'Sign in to see the current bid' before and after and could never demonstrate the stream at all.",
|
|
364
|
-
expectedUiState: "Window B moves to 'Current bid ₹
|
|
365
|
-
expectedData: { currentBid:
|
|
376
|
+
expectedUiState: "Window B moves to 'Current bid ₹1,650.00' and a bid count one higher than it showed, within about 10 seconds, with no reload and no interaction. Figures that only change on refresh mean the stream is not connected.",
|
|
377
|
+
expectedData: { currentBid: 1650, bidCountDelta: 1 },
|
|
366
378
|
endResult: "Reloading window B shows the same figures it had already updated to.",
|
|
367
379
|
},
|
|
368
380
|
"checklist-buying-bidding-place-bid-live-self": {
|
|
369
381
|
roles: ["buyer"],
|
|
370
|
-
startPage: "/auctions/auction-
|
|
382
|
+
startPage: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
371
383
|
steps: [
|
|
372
384
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
373
|
-
"Open /auctions/auction-
|
|
385
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles and read the current bid and bid count.",
|
|
374
386
|
"Click 'Place a bid', select the 'Minimum' preset, and click 'Place Bid'.",
|
|
375
387
|
"Watch the page for 10 seconds without reloading it.",
|
|
376
388
|
],
|
|
377
|
-
inputs: { bidAmount:
|
|
389
|
+
inputs: { currentBid: 1650, bidAmount: 1850 },
|
|
378
390
|
expectedBehaviour: "The bidder's own page updates in place from the same stream, so the figure they just moved is the figure they see. A page that requires a manual refresh after your own successful bid reads as though the bid failed.",
|
|
379
391
|
expectedUiState: "The current bid and count both update without the tester refreshing. The page does not navigate, and no full-page loading state appears.",
|
|
380
|
-
expectedData: { currentBid:
|
|
381
|
-
endResult: "On reload the same values persist.",
|
|
392
|
+
expectedData: { currentBid: 1850, bidCountDelta: 1 },
|
|
393
|
+
endResult: "On reload the same values persist. The 'Minimum' preset is used rather than a typed literal precisely so this case still runs after an earlier one has moved the price.",
|
|
382
394
|
},
|
|
383
395
|
"checklist-buying-bidding-server-error-copy-is-never-raw": {
|
|
384
396
|
roles: ["buyer", "admin"],
|
|
385
|
-
startPage: "/auctions/auction-
|
|
397
|
+
startPage: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
386
398
|
steps: [
|
|
387
399
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
388
|
-
"Open /auctions/auction-
|
|
400
|
+
"Open /auctions/auction-beyblade-burst-cho-z-achilles, click 'Place a bid', select 'Custom', type 1850, and click 'Place Bid'.",
|
|
389
401
|
"Read every word of any error shown in the modal or as a toast.",
|
|
390
|
-
"
|
|
402
|
+
"Type 1850 again and click 'Place Bid' a second time to force a rejection.",
|
|
391
403
|
"Sign out and sign in as admin@letitrip.in / TempPass123!.",
|
|
392
404
|
"Open /admin/maintenance/server-errors.",
|
|
393
405
|
],
|
|
394
|
-
inputs: { bidAmount:
|
|
406
|
+
inputs: { bidAmount: 1850 },
|
|
395
407
|
expectedBehaviour: "Any 5xx message is scrubbed before it reaches the browser and the real one is kept server-side for the error recorder. This modal is the exact place a Node module-not-found error, complete with a /var/task path and a full require stack, was once rendered to buyers inside 'Place your bid'.",
|
|
396
408
|
expectedUiState: "Nothing containing '/var/task/', 'Require stack', 'Cannot find module' or any filesystem path appears in the modal, in a toast, or in the page body — only plain English. If an error did occur, /admin/maintenance/server-errors holds the full detail with a reference that matches what the user was shown.",
|
|
397
|
-
endResult: "The admin error list keeps its entries across a reload. Readable user copy with nothing recorded server-side is only half a pass — the detail has to land somewhere.",
|
|
409
|
+
endResult: "The admin error list keeps its entries across a reload. Readable user copy with nothing recorded server-side is only half a pass — the detail has to land somewhere. The repeated ₹1,850 is refused whether or not the first was accepted, which is all this case needs.",
|
|
398
410
|
},
|
|
399
411
|
"checklist-buying-bidding-win-auction": {
|
|
400
412
|
roles: ["buyer"],
|
|
401
|
-
startPage: "/
|
|
413
|
+
startPage: "/cart",
|
|
402
414
|
steps: [
|
|
403
|
-
"Sign in as
|
|
404
|
-
"Open /
|
|
405
|
-
"Open /user/bids and find the row for 'Test Auction — Already Won'.",
|
|
406
|
-
"Click 'Pay now' on that row.",
|
|
415
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!, whose seeded cart already holds the LOCKED won-auction line for auction-beyblade-original-dragoon-storm.",
|
|
416
|
+
"Open /user/bids and read whether a won row with a 'Pay now' link is offered.",
|
|
407
417
|
"Open /cart and switch to the 'Won Auctions' tab.",
|
|
418
|
+
"Read the line and confirm it names 'Beyblade Original — Dragoon Storm (Rare Sealed)'.",
|
|
408
419
|
"Try to change the quantity and try to remove the line.",
|
|
409
420
|
"Click through checkout, selecting the first saved address and Cash on Delivery, and place the order.",
|
|
410
421
|
"Open /user/orders and switch to the 'Auction wins' tab.",
|
|
411
422
|
],
|
|
412
|
-
inputs: {
|
|
423
|
+
inputs: {
|
|
424
|
+
auctionId: "auction-beyblade-original-dragoon-storm",
|
|
425
|
+
paymentMethod: "Cash on Delivery",
|
|
426
|
+
},
|
|
413
427
|
expectedBehaviour: "A win becomes a LOCKED cart line and is paid for through the ordinary checkout, which is the only flow that knows how to collect an address, take payment, split by store and produce a real order. Settlement used to write an order document directly in a shape no orders list could render and no checkout could accept, so a winner had no way to pay at all.",
|
|
414
|
-
expectedUiState: "
|
|
428
|
+
expectedUiState: "In the Won Auctions cart tab the line has no remove control and its quantity cannot be changed. After placing the order it appears under the 'Auction wins' tab of /user/orders with the item title and amount.",
|
|
415
429
|
expectedData: { orderType: "auction" },
|
|
416
|
-
endResult: "The order survives a reload under 'Auction wins'. The
|
|
430
|
+
endResult: "The order survives a reload under 'Auction wins'. The cart's Won Auctions tab is empty afterwards, which also unblocks the buyer's standard lane. The /user/bids row is the weaker half of this case — the seed gives rehan.sheikh@gmail.com the locked cart line but no matching won BID document, so an empty /user/bids there is a seed gap, not a product failure; judge the case on the cart, checkout and order.",
|
|
417
431
|
},
|
|
418
432
|
};
|
|
@@ -616,19 +616,19 @@ export const authored = {
|
|
|
616
616
|
steps: [
|
|
617
617
|
"Open /products.",
|
|
618
618
|
"Click the 'Sold & Ended' tab.",
|
|
619
|
-
"Scan the grid for '
|
|
619
|
+
"Scan the grid for 'Beyblade X BX-34 Dran Buster (Sold Out)' (product-beyblade-x-dran-buster-sold-out).",
|
|
620
620
|
"Click the 'Available' tab.",
|
|
621
621
|
"Open /auctions.",
|
|
622
622
|
"Click the 'Ended' tab.",
|
|
623
|
-
"Scan the grid for '
|
|
623
|
+
"Scan the grid for 'Beyblade Burst B-128 Spriggan Requiem (Ended — Bought Out)' (auction-beyblade-burst-spriggan-requiem-bought-out).",
|
|
624
624
|
"Click the 'Live' tab.",
|
|
625
625
|
"Open /prize-draws.",
|
|
626
626
|
"Click the 'Closed' tab.",
|
|
627
|
-
"Scan the grid for '
|
|
627
|
+
"Scan the grid for 'Metal Fight Mystery Draw — Ended (Revealed)' (prizedraw-beyblade-metal-closed-revealed).",
|
|
628
628
|
"Click the 'Open' tab.",
|
|
629
629
|
],
|
|
630
630
|
expectedBehaviour: "The 'Available' / 'Live' / 'Open' tab hides sold-out, ended, and closed items by default. The 'Sold & Ended' / 'Ended' / 'Closed' tab reveals them.",
|
|
631
|
-
expectedUiState: "'
|
|
631
|
+
expectedUiState: "'Beyblade X BX-34 Dran Buster (Sold Out)' appears on the 'Sold & Ended' tab and is absent on 'Available'. 'Beyblade Burst B-128 Spriggan Requiem (Ended — Bought Out)' appears on 'Ended' and is absent on 'Live'. 'Metal Fight Mystery Draw — Ended (Revealed)' appears on 'Closed' and is absent on 'Open'.",
|
|
632
632
|
endResult: "Nothing is persisted. Tab state is URL state only.",
|
|
633
633
|
},
|
|
634
634
|
"checklist-buying-browsing-search-sort-options-per-listing-type": {
|