@mohasinac/appkit 4.40.0 → 4.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/features/categories/repository/categories.repository.js +32 -14
- 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 +1 -1
- package/scripts/seed-cli.mjs +15 -20
|
@@ -16,30 +16,30 @@
|
|
|
16
16
|
export const authored = {
|
|
17
17
|
"checklist-buying-buying-checkout-add-to-cart": {
|
|
18
18
|
roles: ["buyer"],
|
|
19
|
-
startPage: "/products/product-
|
|
19
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
20
20
|
steps: [
|
|
21
21
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
22
|
-
"Open /products/product-
|
|
22
|
+
"Open /products/product-beyblade-burst-valkyrie.",
|
|
23
23
|
"Click 'Add to Cart'.",
|
|
24
24
|
"Open /cart.",
|
|
25
25
|
],
|
|
26
|
-
inputs: { productId: "product-
|
|
26
|
+
inputs: { productId: "product-beyblade-burst-valkyrie", quantity: 1, price: 999 },
|
|
27
27
|
expectedBehaviour: "The item is added to the buyer's cart and persists when the cart page is opened.",
|
|
28
|
-
expectedUiState: "The Cart tab on /cart shows '
|
|
29
|
-
expectedData: { cartLineQuantity: 1, cartLinePrice:
|
|
30
|
-
endResult: "After reloading /cart, '
|
|
28
|
+
expectedUiState: "The Cart tab on /cart shows 'Beyblade Burst B-01 Valkyrie' with quantity 1 and price ₹999.00. The cart item count badge in the header has increased.",
|
|
29
|
+
expectedData: { cartLineQuantity: 1, cartLinePrice: 999 },
|
|
30
|
+
endResult: "After reloading /cart, 'Beyblade Burst B-01 Valkyrie' is still listed in the Cart tab.",
|
|
31
31
|
},
|
|
32
32
|
"checklist-buying-buying-checkout-add-to-cart-max-quantity": {
|
|
33
33
|
roles: ["buyer"],
|
|
34
|
-
startPage: "/products/product-
|
|
34
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
35
35
|
steps: [
|
|
36
36
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
37
|
-
"Open /products/product-
|
|
37
|
+
"Open /products/product-beyblade-burst-valkyrie.",
|
|
38
38
|
"Click 'Add to Cart'.",
|
|
39
39
|
"Open /cart.",
|
|
40
|
-
"Click the '+' (Increase quantity) button for '
|
|
40
|
+
"Click the '+' (Increase quantity) button for 'Beyblade Burst B-01 Valkyrie' repeatedly until it stops incrementing.",
|
|
41
41
|
],
|
|
42
|
-
inputs: { productId: "product-
|
|
42
|
+
inputs: { productId: "product-beyblade-burst-valkyrie", stockQuantity: 10 },
|
|
43
43
|
expectedBehaviour: "The quantity control caps at the listing's available stock and does not allow the buyer to exceed it. A message or disabled state makes the limit clear.",
|
|
44
44
|
expectedUiState: "The '+' (Increase quantity) button becomes disabled or unresponsive once the quantity matches the available stock shown on the product page ('Only 10 left — order soon!'). A message indicating the cap is visible.",
|
|
45
45
|
expectedData: { maxSelectableQuantity: 10 },
|
|
@@ -62,7 +62,7 @@ export const authored = {
|
|
|
62
62
|
startPage: "/checkout",
|
|
63
63
|
steps: [
|
|
64
64
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
65
|
-
"Open /products/product-
|
|
65
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
66
66
|
"Open /cart and click 'Proceed to checkout'.",
|
|
67
67
|
"On Step 1, select the existing address and click 'Continue' to advance to Step 2.",
|
|
68
68
|
"Press the browser back button.",
|
|
@@ -81,7 +81,7 @@ export const authored = {
|
|
|
81
81
|
startPage: "/checkout",
|
|
82
82
|
steps: [
|
|
83
83
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
84
|
-
"Open /products/product-
|
|
84
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
85
85
|
"Complete Steps 1 and 2 of checkout.",
|
|
86
86
|
"On Step 3 (Payment), select 'UPI / Cash' (manual payment).",
|
|
87
87
|
"Check the consent checkbox.",
|
|
@@ -95,10 +95,10 @@ export const authored = {
|
|
|
95
95
|
},
|
|
96
96
|
"checklist-buying-buying-checkout-checkout-flow": {
|
|
97
97
|
roles: ["buyer"],
|
|
98
|
-
startPage: "/products/product-
|
|
98
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
99
99
|
steps: [
|
|
100
100
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
101
|
-
"Open /products/product-
|
|
101
|
+
"Open /products/product-beyblade-burst-valkyrie.",
|
|
102
102
|
"Click 'Add to Cart'.",
|
|
103
103
|
"Open /cart.",
|
|
104
104
|
"Click 'Proceed to checkout'.",
|
|
@@ -107,7 +107,7 @@ export const authored = {
|
|
|
107
107
|
"On Step 2 (Add-ons & fees), click 'Continue to payment'.",
|
|
108
108
|
"On Step 3 (Payment), select a payment method and complete the order.",
|
|
109
109
|
],
|
|
110
|
-
inputs: { productId: "product-
|
|
110
|
+
inputs: { productId: "product-beyblade-burst-valkyrie", price: 999 },
|
|
111
111
|
expectedBehaviour: "The three-step checkout flow (Address → Add-ons → Payment) completes without errors, an order is created, and the buyer lands on an order confirmation page.",
|
|
112
112
|
expectedUiState: "Each step advances in sequence: 'Step 1 of 3: Shipping Address', then 'Step 2 of 3: Extras & fees', then the payment step. After completing payment, an order confirmation page is shown with an order number.",
|
|
113
113
|
expectedData: { checkoutStepCount: 3 },
|
|
@@ -118,7 +118,7 @@ export const authored = {
|
|
|
118
118
|
startPage: "/checkout",
|
|
119
119
|
steps: [
|
|
120
120
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
121
|
-
"Open /products/product-
|
|
121
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
122
122
|
"Complete Steps 1 and 2 of checkout.",
|
|
123
123
|
"On Step 3 (Payment), select 'UPI / Cash' (manual payment).",
|
|
124
124
|
"Read the how-it-works guide that appears.",
|
|
@@ -137,7 +137,7 @@ export const authored = {
|
|
|
137
137
|
steps: [
|
|
138
138
|
"Resize the browser to a mobile viewport of 390×844 pixels.",
|
|
139
139
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
140
|
-
"Open /products/product-
|
|
140
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
141
141
|
"Open /cart.",
|
|
142
142
|
"Click 'Proceed to checkout'.",
|
|
143
143
|
"Complete Step 1 (address selection) on the mobile viewport.",
|
|
@@ -155,25 +155,28 @@ export const authored = {
|
|
|
155
155
|
startPage: "/cart",
|
|
156
156
|
steps: [
|
|
157
157
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
158
|
-
"Open /products/product-
|
|
159
|
-
"Open /
|
|
160
|
-
"Open /cart and confirm the Cart tab
|
|
158
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart' (store-beyblade-arena).",
|
|
159
|
+
"Open /prize-draws/prizedraw-beyblade-mystery-box and enter it once at ₹99 (store-letitrip-official) — this is the only second seller in the catalogue.",
|
|
160
|
+
"Open /cart and confirm the Cart tab groups the two lines under two named sellers, Beyblade Arena and LetItRip Official.",
|
|
161
161
|
"Click 'Proceed to checkout'.",
|
|
162
162
|
"Select the existing address and click 'Continue' through each step.",
|
|
163
163
|
"Complete the checkout.",
|
|
164
164
|
],
|
|
165
|
-
inputs: {
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
inputs: {
|
|
166
|
+
storeAProduct: "product-beyblade-burst-valkyrie",
|
|
167
|
+
storeBProduct: "prizedraw-beyblade-mystery-box",
|
|
168
|
+
},
|
|
169
|
+
expectedBehaviour: "The checkout splits items from different sellers into separate orders, because storeId is the order-splitting key and per-store shipping, add-ons and payouts hang off it. The buyer receives one order per seller rather than a single combined order.",
|
|
170
|
+
expectedUiState: "On the order confirmation page, two separate order entries are shown — one for store-beyblade-arena (Beyblade Burst B-01 Valkyrie, ₹999) and one for store-letitrip-official (Beyblade Mystery Box, ₹99 entry). Each subtotal matches only that seller's items. A single combined order, or two orders both attributed to the same seller, is the failure.",
|
|
168
171
|
expectedData: { orderCount: 2 },
|
|
169
|
-
endResult: "
|
|
172
|
+
endResult: "Two separate orders exist in /user/orders — one per seller — and both survive a reload.",
|
|
170
173
|
},
|
|
171
174
|
"checklist-buying-buying-checkout-checkout-order-review": {
|
|
172
175
|
roles: ["buyer"],
|
|
173
|
-
startPage: "/products/product-
|
|
176
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
174
177
|
steps: [
|
|
175
178
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
176
|
-
"Open /products/product-
|
|
179
|
+
"Open /products/product-beyblade-burst-valkyrie.",
|
|
177
180
|
"Click 'Add to Cart'.",
|
|
178
181
|
"Open /cart.",
|
|
179
182
|
"Click 'Proceed to checkout'.",
|
|
@@ -182,7 +185,7 @@ export const authored = {
|
|
|
182
185
|
"On Step 2 (Add-ons & fees), read the Order Summary panel before proceeding.",
|
|
183
186
|
],
|
|
184
187
|
expectedBehaviour: "The Order Summary panel during checkout accurately reflects the items in the cart, their quantities, the selected shipping address, and a correct total.",
|
|
185
|
-
expectedUiState: "The Order Summary panel shows: 'Shipping to Mock User 3, 123 Stadium Lane, Indore'; Subtotal with the correct item price(s); Platform fee; GST; and a correct Total. The item '
|
|
188
|
+
expectedUiState: "The Order Summary panel shows: 'Shipping to Mock User 3, 123 Stadium Lane, Indore'; Subtotal with the correct item price(s); Platform fee; GST; and a correct Total. The item 'Beyblade Burst B-01 Valkyrie' at ₹999.00 is included.",
|
|
186
189
|
endResult: "Nothing additional persists from this review step. The order is not placed until payment is completed.",
|
|
187
190
|
},
|
|
188
191
|
"checklist-buying-buying-checkout-checkout-order-summary-full-breakdown": {
|
|
@@ -190,7 +193,7 @@ export const authored = {
|
|
|
190
193
|
startPage: "/checkout",
|
|
191
194
|
steps: [
|
|
192
195
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
193
|
-
"Open /products/product-
|
|
196
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
194
197
|
"Complete Step 1 (address) and advance to Step 2 (Add-ons & fees).",
|
|
195
198
|
"Check the 'WhatsApp order updates (+₹10.00)' checkbox.",
|
|
196
199
|
"Check the 'Gift wrap (+₹49.00)' checkbox.",
|
|
@@ -291,11 +294,11 @@ export const authored = {
|
|
|
291
294
|
"Read the tenure options, the token amount and the surcharge.",
|
|
292
295
|
"Select a tenure and place the order.",
|
|
293
296
|
"Open /user/orders and open the order just created.",
|
|
294
|
-
"Open /cart in another tab, replace the item with product-
|
|
297
|
+
"Open /cart in another tab, replace the item with product-beyblade-burst-valkyrie (₹999), and reach the payment step again.",
|
|
295
298
|
],
|
|
296
|
-
inputs: { highValueItem: "live-golden-retriever-puppy", highValuePrice: 25000, lowValuePrice:
|
|
297
|
-
expectedBehaviour: "EMI is offered only above the eligibility threshold and only when the seller has opted in — the site-wide flag alone is not enough. A ₹
|
|
298
|
-
expectedUiState: "At ₹25,000 the payment step lists tenures with a per-instalment amount, a token amount and a surcharge for each. After placing the order its detail page shows the full instalment schedule. At ₹
|
|
299
|
+
inputs: { highValueItem: "live-golden-retriever-puppy", highValuePrice: 25000, lowValuePrice: 999 },
|
|
300
|
+
expectedBehaviour: "EMI is offered only above the eligibility threshold and only when the seller has opted in — the site-wide flag alone is not enough. A ₹999 cart must not offer it. The buyer is quoted from the buyer-facing settings, which exclude the platform-versus-seller surcharge split; that figure is server-side only and must never reach the payment step.",
|
|
301
|
+
expectedUiState: "At ₹25,000 the payment step lists tenures with a per-instalment amount, a token amount and a surcharge for each. After placing the order its detail page shows the full instalment schedule. At ₹999 no EMI option appears at all.",
|
|
299
302
|
expectedData: { emiOfferedHighValue: true, emiOfferedLowValue: false },
|
|
300
303
|
endResult: "The schedule survives a reload of the order page. The low-value half is the real check — an EMI badge on a ₹1,499 product was a live bug caused by reading only the site-wide flag, and a case that only ever tests a large cart passes straight over it.",
|
|
301
304
|
},
|
|
@@ -305,12 +308,12 @@ export const authored = {
|
|
|
305
308
|
steps: [
|
|
306
309
|
"Sign in as admin@letitrip.in / TempPass123! and verify that Site Settings → Tax → GST is enabled.",
|
|
307
310
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
308
|
-
"Open /products/product-
|
|
311
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
309
312
|
"Open /cart and click 'Proceed to checkout'.",
|
|
310
313
|
"On Step 1, select the existing address 'Home — 123 Stadium Lane, Vijay Nagar, Indore, Madhya Pradesh 452010' and click 'Continue'.",
|
|
311
314
|
"On Step 2, read the Order Summary panel.",
|
|
312
315
|
],
|
|
313
|
-
inputs: { productId: "product-
|
|
316
|
+
inputs: { productId: "product-beyblade-burst-valkyrie", price: 999 },
|
|
314
317
|
expectedBehaviour: "When GST is enabled, the Order Summary shows a GST line item. The breakdown is CGST+SGST when buyer and seller are in the same state, or IGST when they are in different states.",
|
|
315
318
|
expectedUiState: "The Order Summary panel shows a 'GST' line item (e.g. ₹1.80). The label or tooltip distinguishes CGST/SGST from IGST based on buyer vs seller state.",
|
|
316
319
|
endResult: "Nothing additional persists from viewing the GST breakdown.",
|
|
@@ -320,14 +323,14 @@ export const authored = {
|
|
|
320
323
|
startPage: "/checkout",
|
|
321
324
|
steps: [
|
|
322
325
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
323
|
-
"Open /products/product-
|
|
326
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
324
327
|
"Complete the full checkout flow (address → add-ons → payment).",
|
|
325
328
|
"Land on the order confirmation page.",
|
|
326
329
|
"Check the registered email (rehan.sheikh@gmail.com) for a confirmation email.",
|
|
327
330
|
],
|
|
328
|
-
inputs: { productId: "product-
|
|
331
|
+
inputs: { productId: "product-beyblade-burst-valkyrie", price: 999 },
|
|
329
332
|
expectedBehaviour: "The order confirmation page shows correct order details matching what was in the cart. A confirmation email is sent to the buyer's registered address with the same order details.",
|
|
330
|
-
expectedUiState: "The order confirmation page shows: an order number, the item '
|
|
333
|
+
expectedUiState: "The order confirmation page shows: an order number, the item 'Beyblade Burst B-01 Valkyrie' at ₹999.00, the shipping address '123 Stadium Lane, Vijay Nagar, Indore, Madhya Pradesh 452010', and a Total that matches the checkout summary.",
|
|
331
334
|
endResult: "After reloading the order confirmation URL, all details remain visible and the order is not cancelled.",
|
|
332
335
|
},
|
|
333
336
|
"checklist-buying-buying-checkout-out-of-stock-policy-cancel": {
|
|
@@ -336,11 +339,11 @@ export const authored = {
|
|
|
336
339
|
steps: [
|
|
337
340
|
"Sign in as admin@letitrip.in / TempPass123! and set Site Settings → Checkout → Out-of-stock policy to 'Cancel whole order'.",
|
|
338
341
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
339
|
-
"Add product-
|
|
340
|
-
"While on the checkout payment step (before submitting), have the admin or another session reduce product-
|
|
342
|
+
"Add product-beyblade-burst-valkyrie (₹999, stock 10) and product-beyblade-original-dranzer-s (₹149) to the cart.",
|
|
343
|
+
"While on the checkout payment step (before submitting), have the admin or another session reduce product-beyblade-burst-valkyrie's stock to 0.",
|
|
341
344
|
"Submit the checkout.",
|
|
342
345
|
],
|
|
343
|
-
inputs: { policy: "Cancel whole order", goesOutOfStock: "product-
|
|
346
|
+
inputs: { policy: "Cancel whole order", goesOutOfStock: "product-beyblade-burst-valkyrie" },
|
|
344
347
|
expectedBehaviour: "With the 'cancel whole order' policy, if any item in the batch goes out of stock mid-checkout, the entire checkout is rejected. No order is created and the buyer receives an error.",
|
|
345
348
|
expectedUiState: "After submitting, an error message is shown indicating that an item went out of stock and the entire order was cancelled. No order confirmation page is shown.",
|
|
346
349
|
expectedData: { ordersCreated: 0 },
|
|
@@ -352,22 +355,22 @@ export const authored = {
|
|
|
352
355
|
steps: [
|
|
353
356
|
"Sign in as admin@letitrip.in / TempPass123! and set Site Settings → Checkout → Out-of-stock policy to 'Skip unavailable items'.",
|
|
354
357
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
355
|
-
"Add product-
|
|
356
|
-
"While on the checkout payment step (before submitting), have the admin or another session reduce product-
|
|
358
|
+
"Add product-beyblade-burst-valkyrie (₹999, stock 10) and product-beyblade-original-dranzer-s (₹149) to the cart.",
|
|
359
|
+
"While on the checkout payment step (before submitting), have the admin or another session reduce product-beyblade-original-dranzer-s's stock to 0.",
|
|
357
360
|
"Submit the checkout.",
|
|
358
361
|
],
|
|
359
|
-
inputs: { policy: "Skip unavailable items", goesOutOfStock: "product-
|
|
362
|
+
inputs: { policy: "Skip unavailable items", goesOutOfStock: "product-beyblade-original-dranzer-s" },
|
|
360
363
|
expectedBehaviour: "With the 'skip unavailable items' policy, the out-of-stock item is silently dropped and an order is placed for only the still-available item(s). The buyer is informed which item was skipped.",
|
|
361
|
-
expectedUiState: "After submitting, the order confirmation page shows only product-
|
|
364
|
+
expectedUiState: "After submitting, the order confirmation page shows only product-beyblade-burst-valkyrie (₹999). A notice is shown indicating that product-beyblade-original-dranzer-s was unavailable and was removed from the order.",
|
|
362
365
|
expectedData: { orderLineCount: 1 },
|
|
363
|
-
endResult: "After reloading the order detail page, only product-
|
|
366
|
+
endResult: "After reloading the order detail page, only product-beyblade-burst-valkyrie is listed in the order. product-beyblade-original-dranzer-s is not included.",
|
|
364
367
|
},
|
|
365
368
|
"checklist-buying-buying-checkout-payment-auto-approve-dispute": {
|
|
366
369
|
roles: ["buyer"],
|
|
367
370
|
startPage: "/checkout",
|
|
368
371
|
steps: [
|
|
369
372
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
370
|
-
"Open /products/product-
|
|
373
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
371
374
|
"Complete checkout with UPI/Cash payment and upload a valid payment proof.",
|
|
372
375
|
"Wait 2 hours without the admin manually approving the order.",
|
|
373
376
|
"Reload the order detail page after 2 hours.",
|
|
@@ -383,7 +386,7 @@ export const authored = {
|
|
|
383
386
|
startPage: "/checkout",
|
|
384
387
|
steps: [
|
|
385
388
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
386
|
-
"Open /products/product-
|
|
389
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
387
390
|
"Open /cart and click 'Proceed to checkout'.",
|
|
388
391
|
"Select the existing address and click 'Continue' through Step 1 and Step 2.",
|
|
389
392
|
"On Step 3 (Payment), read the available payment methods.",
|
|
@@ -391,7 +394,7 @@ export const authored = {
|
|
|
391
394
|
"Select 'UPI / Cash' (manual payment) and observe the UI.",
|
|
392
395
|
"If Razorpay is listed, select it and observe the UI.",
|
|
393
396
|
],
|
|
394
|
-
inputs: { productId: "product-
|
|
397
|
+
inputs: { productId: "product-beyblade-burst-valkyrie" },
|
|
395
398
|
expectedBehaviour: "Each payment method option can be selected and the UI adapts accordingly — COD shows a COD confirmation, manual payment shows a how-it-works guide and consent checkbox, Razorpay (when enabled) offers to open the payment gateway.",
|
|
396
399
|
expectedUiState: "Step 3 lists the available payment methods as selectable options. Selecting each one changes the lower section of the form to show method-specific instructions or controls. At least COD and UPI/Cash are shown.",
|
|
397
400
|
endResult: "Nothing persists until payment is actually submitted.",
|
|
@@ -418,7 +421,7 @@ export const authored = {
|
|
|
418
421
|
startPage: "/checkout",
|
|
419
422
|
steps: [
|
|
420
423
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
421
|
-
"Open /products/product-
|
|
424
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
422
425
|
"Complete checkout with 'UPI / Cash' payment — check the consent checkbox and click 'Pay via UPI / Cash'.",
|
|
423
426
|
"On the payment proof page, upload a screenshot file as proof.",
|
|
424
427
|
"Enter a UTR number in the UTR field.",
|
|
@@ -435,7 +438,7 @@ export const authored = {
|
|
|
435
438
|
startPage: "/checkout",
|
|
436
439
|
steps: [
|
|
437
440
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
438
|
-
"Open /products/product-
|
|
441
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
439
442
|
"Open /cart and click 'Proceed to checkout'.",
|
|
440
443
|
"Complete Steps 1 and 2 of checkout.",
|
|
441
444
|
"On Step 3, select 'UPI / Cash' (manual payment).",
|
|
@@ -452,7 +455,7 @@ export const authored = {
|
|
|
452
455
|
startPage: "/checkout",
|
|
453
456
|
steps: [
|
|
454
457
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
455
|
-
"Open /products/product-
|
|
458
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
456
459
|
"Complete checkout with 'UPI / Cash' payment — check the consent checkbox and click 'Pay via UPI / Cash'.",
|
|
457
460
|
"Do not upload any payment proof.",
|
|
458
461
|
"Wait for the 15-minute payment window to expire (or ask the admin to manually expire it via the admin panel).",
|
|
@@ -462,14 +465,14 @@ export const authored = {
|
|
|
462
465
|
expectedBehaviour: "Once the 15-minute window expires with no proof submitted, the order is automatically cancelled and the item's stock is restored.",
|
|
463
466
|
expectedUiState: "The order detail page shows a cancelled status. The payment proof upload form is no longer available.",
|
|
464
467
|
expectedData: { orderCancelled: true },
|
|
465
|
-
endResult: "After reloading /products/product-
|
|
468
|
+
endResult: "After reloading /products/product-beyblade-burst-valkyrie, the stock count reflects the restored item (the stock is back to at least what it was before the order was placed).",
|
|
466
469
|
},
|
|
467
470
|
"checklist-buying-buying-checkout-shipping-address": {
|
|
468
471
|
roles: ["buyer"],
|
|
469
472
|
startPage: "/checkout",
|
|
470
473
|
steps: [
|
|
471
474
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
472
|
-
"Open /products/product-
|
|
475
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
473
476
|
"Open /cart and click 'Proceed to checkout'.",
|
|
474
477
|
"On Step 1 (Shipping Address), click the address card 'Home — 123 Stadium Lane, Vijay Nagar, Indore, Madhya Pradesh 452010' to select it.",
|
|
475
478
|
"Click 'Continue'.",
|
|
@@ -484,7 +487,7 @@ export const authored = {
|
|
|
484
487
|
startPage: "/checkout",
|
|
485
488
|
steps: [
|
|
486
489
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
487
|
-
"Open /products/product-
|
|
490
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
488
491
|
"Open /cart and click 'Proceed to checkout'.",
|
|
489
492
|
"On Step 1 (Shipping Address), locate the existing address and click its edit control.",
|
|
490
493
|
"Change the street field from its current value to 'QA Address buying-checkout-shipping-address-edit Updated Street'.",
|
|
@@ -501,7 +504,7 @@ export const authored = {
|
|
|
501
504
|
startPage: "/checkout",
|
|
502
505
|
steps: [
|
|
503
506
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
504
|
-
"Open /products/product-
|
|
507
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
505
508
|
"Open /cart and click 'Proceed to checkout'.",
|
|
506
509
|
"On Step 1 (Shipping Address), click '+ Add new address'.",
|
|
507
510
|
"Fill in the address form: Name 'QA Address buying-checkout-shipping-address-inline-add', Street '1 Test Street', City 'Mumbai', State 'Maharashtra', Pincode '400001'.",
|
|
@@ -519,7 +522,7 @@ export const authored = {
|
|
|
519
522
|
startPage: "/checkout",
|
|
520
523
|
steps: [
|
|
521
524
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
522
|
-
"Open /products/product-
|
|
525
|
+
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
523
526
|
"Open /cart and click 'Proceed to checkout'.",
|
|
524
527
|
"On Step 1, select the existing address 'Home — 123 Stadium Lane, Vijay Nagar, Indore, Madhya Pradesh 452010' and click 'Continue'.",
|
|
525
528
|
"On Step 2 (Add-ons & fees), if a shipping method selector is present, select a different shipping method and observe the shipping fee in the Order Summary.",
|
|
@@ -46,7 +46,7 @@ export const authored = {
|
|
|
46
46
|
roles: ["buyer"],
|
|
47
47
|
startPage: "/cart",
|
|
48
48
|
steps: [
|
|
49
|
-
"Sign in as
|
|
49
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!, whose seeded cart holds a locked won-auction line and a locked accepted-offer line alongside ordinary items.",
|
|
50
50
|
"Open /cart and click the 'Won Auctions' tab.",
|
|
51
51
|
"Click 'Proceed to checkout' from that tab.",
|
|
52
52
|
"Read the whole checkout page, looking for a coupon input and the 'How coupons work' panel.",
|
|
@@ -56,7 +56,7 @@ export const authored = {
|
|
|
56
56
|
],
|
|
57
57
|
expectedBehaviour: "In the auction and offer lanes the price was already agreed — by a winning bid or an accepted offer — so a coupon has nothing to discount and the input is not rendered at all. Rendering it and rejecting whatever is typed would be worse: it invites the buyer to hunt for a code that can never work.",
|
|
58
58
|
expectedUiState: "Neither lane shows a coupon input or a 'How coupons work' panel. Each shows an explanatory banner in the shape of 'You're paying for your Auction wins. The price is already agreed, so coupons don't apply and the rest of your cart stays where it is.'",
|
|
59
|
-
endResult: "Display-only; nothing persists. Requires the
|
|
59
|
+
endResult: "Display-only; nothing persists. Requires the account to hold a won auction and an accepted offer; the seeded cart for rehan.sheikh@gmail.com holds both.",
|
|
60
60
|
},
|
|
61
61
|
"checklist-buying-buying-coupons-coupon-category-restriction-accepts-matching-cart": {
|
|
62
62
|
roles: ["buyer"],
|
|
@@ -95,7 +95,7 @@ export const authored = {
|
|
|
95
95
|
startPage: "/cart",
|
|
96
96
|
steps: [
|
|
97
97
|
"Sign in as vivaan.kapoor@gmail.com / TempPass123! in window A.",
|
|
98
|
-
"Add product-beyblade-
|
|
98
|
+
"Add 2 × product-beyblade-original-driger-v (₹1,799 each, ₹3,598 total) to the cart — ARENAVIP needs a ₹2,000 minimum and a Beyblade Original or Metal category.",
|
|
99
99
|
"Open /checkout, complete the address and add-ons steps, type ARENA25 in the coupon field and click 'Apply'.",
|
|
100
100
|
"Read the ARENA25 discount amount and the order total, and leave the page open without reloading it.",
|
|
101
101
|
"In window B, sign in as admin@letitrip.in / TempPass123! and open /admin/coupons.",
|
|
@@ -114,7 +114,7 @@ export const authored = {
|
|
|
114
114
|
startPage: "/cart",
|
|
115
115
|
steps: [
|
|
116
116
|
"Sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
117
|
-
"Add product-beyblade-
|
|
117
|
+
"Add 2 × product-beyblade-original-driger-v (₹1,799 each, ₹3,598 total) to the cart — ARENAVIP needs a ₹2,000 minimum and a Beyblade Original or Metal category.",
|
|
118
118
|
"Open /cart and find the Order Summary panel.",
|
|
119
119
|
"Read the collapsed disclosure labelled 'How coupons work' with its 'Stacking rules' sub-label.",
|
|
120
120
|
"Click that disclosure header.",
|
|
@@ -129,7 +129,7 @@ export const authored = {
|
|
|
129
129
|
startPage: "/cart",
|
|
130
130
|
steps: [
|
|
131
131
|
"Sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
132
|
-
"Add product-beyblade-
|
|
132
|
+
"Add 2 × product-beyblade-original-driger-v (₹1,799 each, ₹3,598 total) to the cart — ARENAVIP needs a ₹2,000 minimum and a Beyblade Original or Metal category.",
|
|
133
133
|
"Open /checkout and complete the address and add-ons steps.",
|
|
134
134
|
"Find the coupon input and the 'How coupons work' panel beneath it.",
|
|
135
135
|
"Click the disclosure header.",
|
|
@@ -175,7 +175,7 @@ export const authored = {
|
|
|
175
175
|
startPage: "/cart",
|
|
176
176
|
steps: [
|
|
177
177
|
"Sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
178
|
-
"Add product-beyblade-
|
|
178
|
+
"Add 2 × product-beyblade-original-driger-v (₹1,799 each, ₹3,598 total) to the cart — ARENAVIP needs a ₹2,000 minimum and a Beyblade Original or Metal category.",
|
|
179
179
|
"Open /checkout and complete the address and add-ons steps.",
|
|
180
180
|
"Type ARENA25 in the coupon field and click 'Apply'.",
|
|
181
181
|
"Type FREESHIP499 in the coupon field and click 'Apply'.",
|
|
@@ -233,7 +233,7 @@ export const authored = {
|
|
|
233
233
|
startPage: "/cart",
|
|
234
234
|
steps: [
|
|
235
235
|
"Sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
236
|
-
"Add product-beyblade-
|
|
236
|
+
"Add 2 × product-beyblade-original-driger-v (₹1,799 each, ₹3,598 total) to the cart — ARENAVIP needs a ₹2,000 minimum and a Beyblade Original or Metal category.",
|
|
237
237
|
"Open /checkout and complete the address and add-ons steps.",
|
|
238
238
|
"Type ARENA25 in the coupon field and click 'Apply'.",
|
|
239
239
|
"Type ARENA25 in the coupon field again and click 'Apply'.",
|
|
@@ -346,17 +346,17 @@ export const authored = {
|
|
|
346
346
|
roles: ["admin", "buyer"],
|
|
347
347
|
startPage: "/admin/coupons",
|
|
348
348
|
steps: [
|
|
349
|
-
"Sign in as
|
|
350
|
-
"Open /admin/coupons, find
|
|
351
|
-
"Add product-beyblade-
|
|
352
|
-
"Open /checkout, complete the address and add-ons steps, type
|
|
353
|
-
"Open /admin/coupons and read
|
|
354
|
-
"Add product-beyblade-metal-storm-pegasus (₹1,299) to the cart.",
|
|
355
|
-
"Open /checkout, complete the address and add-ons steps, type
|
|
349
|
+
"Sign in as admin@letitrip.in / TempPass123!, which can read /admin/coupons and buy.",
|
|
350
|
+
"Open /admin/coupons, find ARENAVIP, and write down its current usage count.",
|
|
351
|
+
"Add 2 × product-beyblade-original-driger-v (₹1,799 each, ₹3,598 total) to the cart — ARENAVIP needs a ₹2,000 minimum and a Beyblade Original or Metal category.",
|
|
352
|
+
"Open /checkout, complete the address and add-ons steps, type ARENAVIP in the coupon field, click 'Apply', and place the order with Cash on Delivery.",
|
|
353
|
+
"Open /admin/coupons and read ARENAVIP's usage count again.",
|
|
354
|
+
"Add 2 × product-beyblade-metal-storm-pegasus (₹1,299 each, ₹2,598 total) to the cart.",
|
|
355
|
+
"Open /checkout, complete the address and add-ons steps, type ARENAVIP in the coupon field, and click 'Apply'.",
|
|
356
356
|
],
|
|
357
|
-
inputs: { coupon: "
|
|
358
|
-
expectedBehaviour: "Redemption is counted per user as well as globally, and the per-user count is written at checkout as a side effect of applying the coupon.
|
|
359
|
-
expectedUiState: "The usage count in /admin/coupons is exactly one higher after the order. The second apply, by the same account, is refused with a limit-reached message and
|
|
357
|
+
inputs: { coupon: "ARENAVIP", perUserLimit: 1, discountPercent: 15, maxDiscount: 750, minPurchase: 2000 },
|
|
358
|
+
expectedBehaviour: "Redemption is counted per user as well as globally, and the per-user count is written at checkout as a side effect of applying the coupon. ARENAVIP is perUserLimit 1 against a totalLimit of 50 with only 12 used, so this case is about per-user exhaustion rather than the coupon running out: the SAME buyer's second attempt is refused while the coupon itself stays live for everyone else.",
|
|
359
|
+
expectedUiState: "The usage count in /admin/coupons is exactly one higher after the order. The second apply, by the same account, is refused with a limit-reached message and ARENAVIP does not enter the applied list. The coupon still shows as active in the admin list — it is exhausted for this user, not withdrawn.",
|
|
360
360
|
expectedData: { perUserLimit: 1, usageIncrement: 1 },
|
|
361
361
|
endResult: "The incremented count persists in /admin/coupons after a reload. A count that does not move means the per-user usage write is fire-and-forget and failed silently.",
|
|
362
362
|
},
|
|
@@ -366,7 +366,7 @@ export const authored = {
|
|
|
366
366
|
steps: [
|
|
367
367
|
"Sign in as vivaan.kapoor@gmail.com / TempPass123!.",
|
|
368
368
|
"Open /promotions, click the 'Coupons' tab, and claim ARENA25.",
|
|
369
|
-
"Add product-beyblade-
|
|
369
|
+
"Add 2 × product-beyblade-original-driger-v (₹1,799 each, ₹3,598 total) to the cart — ARENAVIP needs a ₹2,000 minimum and a Beyblade Original or Metal category.",
|
|
370
370
|
"Open /user/coupons.",
|
|
371
371
|
"Click 'Use' on the ARENA25 row.",
|
|
372
372
|
"Read where the browser lands and what the coupon section shows.",
|