@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
|
@@ -144,7 +144,7 @@ export const authored = {
|
|
|
144
144
|
roles: ["buyer"],
|
|
145
145
|
startPage: "/user/offers",
|
|
146
146
|
steps: [
|
|
147
|
-
"Sign in as
|
|
147
|
+
"Sign in as vivaan.kapoor@gmail.com / TempPass123!, who holds the seeded accepted offer offer-kaiba-dranzer-s-accepted and the seeded expired one offer-kaiba-x-wizard-arrow-expired.",
|
|
148
148
|
"Open /user/offers and find an accepted offer past its checkout deadline.",
|
|
149
149
|
"Read its status and any deadline shown.",
|
|
150
150
|
"Open /cart and check the Accepted Offers tab for that line.",
|
|
@@ -552,7 +552,7 @@ export const authored = {
|
|
|
552
552
|
roles: ["buyer"],
|
|
553
553
|
startPage: "/user/bids",
|
|
554
554
|
steps: [
|
|
555
|
-
"Sign in as
|
|
555
|
+
"Sign in as vivaan.kapoor@gmail.com / TempPass123!, the buyer who holds seeded bids.",
|
|
556
556
|
"Open /user/bids and find a forfeited bid.",
|
|
557
557
|
"Open its detail and read its history.",
|
|
558
558
|
"Check an entry explains WHY it was forfeited rather than only that it was.",
|
|
@@ -777,7 +777,7 @@ export const authored = {
|
|
|
777
777
|
roles: ["buyer", "seller", "admin"],
|
|
778
778
|
startPage: "/user/bids",
|
|
779
779
|
steps: [
|
|
780
|
-
"Sign in as
|
|
780
|
+
"Sign in as vivaan.kapoor@gmail.com / TempPass123!, who holds the seeded winning bid on auction-beyblade-burst-spriggan-requiem-bought-out, and open /user/bids.",
|
|
781
781
|
"Click a bid row and read what opens.",
|
|
782
782
|
"Sign out and sign in as tyson@beybladearena.in / TempPass123!.",
|
|
783
783
|
"Open the store's bids listing and click a row, reading what opens.",
|
|
@@ -793,7 +793,7 @@ export const authored = {
|
|
|
793
793
|
roles: ["buyer", "seller", "admin"],
|
|
794
794
|
startPage: "/user/bids",
|
|
795
795
|
steps: [
|
|
796
|
-
"Sign in as
|
|
796
|
+
"Sign in as vivaan.kapoor@gmail.com / TempPass123! and open a bid detail from /user/bids.",
|
|
797
797
|
"Read every name and identifier shown, and search the page source for a bidder name.",
|
|
798
798
|
"Sign in as tyson@beybladearena.in / TempPass123! and open the same bid from the store's listing.",
|
|
799
799
|
"Read what identities are shown there.",
|
|
@@ -826,7 +826,7 @@ export const authored = {
|
|
|
826
826
|
roles: ["buyer", "guest"],
|
|
827
827
|
startPage: "/user/bids",
|
|
828
828
|
steps: [
|
|
829
|
-
"Sign in as
|
|
829
|
+
"Sign in as vivaan.kapoor@gmail.com / TempPass123! and open /user/bids.",
|
|
830
830
|
"Press Tab repeatedly and check each bid row receives focus with a visible ring.",
|
|
831
831
|
"Press Enter on a focused row and check it opens.",
|
|
832
832
|
"Open a public auction's bid history in a private window.",
|
|
@@ -858,7 +858,7 @@ export const authored = {
|
|
|
858
858
|
startPage: "/store/listing-templates",
|
|
859
859
|
steps: [
|
|
860
860
|
"Sign in as tyson@beybladearena.in / TempPass123! and create a template, copying its edit URL.",
|
|
861
|
-
"Sign out and sign in as
|
|
861
|
+
"Sign out and sign in as meera.blader@gmail.com / TempPass123!, who owns store-blader-bazaar — a different store.",
|
|
862
862
|
"Paste that edit URL and read what happens.",
|
|
863
863
|
"Check whether the template's contents are shown at any point.",
|
|
864
864
|
"Attempt to save from that page.",
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
* subroutes — cancel, return, track, invoice, payment — and before 2026-09-14
|
|
7
7
|
* exactly ONE case in the entire 1,188-case catalogue touched any of them.
|
|
8
8
|
*
|
|
9
|
-
* 🛑 NO SEEDED ORDER BELONGS TO
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* 🛑 NO SEEDED ORDER BELONGS TO karthik.new@gmail.com. Every seeded order belongs
|
|
10
|
+
* to user-yugi-muto, user-seto-kaiba or user-admin-letitrip. So a case that says
|
|
11
|
+
* "open one of your orders" while signed in as karthik has no order to open, and
|
|
12
|
+
* answers `null` forever. The positive cases below BUY first;
|
|
12
13
|
* the seeded ids belonging to other personas are used only as the ownership
|
|
13
14
|
* negatives — which is the dimension nothing tested at all, and the one where a
|
|
14
15
|
* mistake is an IDOR rather than a cosmetic bug.
|
|
@@ -25,7 +26,7 @@ export const authored = {
|
|
|
25
26
|
roles: ["buyer"],
|
|
26
27
|
startPage: "/products",
|
|
27
28
|
steps: [
|
|
28
|
-
"Sign in as
|
|
29
|
+
"Sign in as karthik.new@gmail.com / TempPass123!, a seeded buyer who owns no seeded orders.",
|
|
29
30
|
"Open /products, add any in-stock item to the cart, and complete checkout.",
|
|
30
31
|
"Open /user/orders and find the order you just placed. Write down its id from the row.",
|
|
31
32
|
"Open the order and use its Invoice action.",
|
|
@@ -40,7 +41,7 @@ export const authored = {
|
|
|
40
41
|
roles: ["buyer"],
|
|
41
42
|
startPage: "/user/orders",
|
|
42
43
|
steps: [
|
|
43
|
-
"Sign in as
|
|
44
|
+
"Sign in as karthik.new@gmail.com / TempPass123!, a seeded buyer who owns no seeded orders.",
|
|
44
45
|
"Navigate directly to /api/user/orders/order-1-20260721-11joon/invoice — a seeded order belonging to a different persona.",
|
|
45
46
|
"Read the response.",
|
|
46
47
|
"Now navigate to /user/orders/order-1-20260721-11joon.",
|
|
@@ -56,7 +57,7 @@ export const authored = {
|
|
|
56
57
|
roles: ["buyer"],
|
|
57
58
|
startPage: "/user/orders",
|
|
58
59
|
steps: [
|
|
59
|
-
"Sign in as
|
|
60
|
+
"Sign in as karthik.new@gmail.com / TempPass123!, a seeded buyer who owns no seeded orders.",
|
|
60
61
|
"Place an order, then open /user/orders and open that order.",
|
|
61
62
|
"Use the Cancel action and read what the page offers.",
|
|
62
63
|
"Complete the cancellation.",
|
|
@@ -106,7 +107,7 @@ export const authored = {
|
|
|
106
107
|
roles: ["buyer"],
|
|
107
108
|
startPage: "/user/orders",
|
|
108
109
|
steps: [
|
|
109
|
-
"Sign in as
|
|
110
|
+
"Sign in as karthik.new@gmail.com / TempPass123!, a seeded buyer who owns no seeded orders.",
|
|
110
111
|
"Navigate to /user/orders/order-1-20260721-11joon/track.",
|
|
111
112
|
"Navigate to /user/orders/order-1-20260721-11joon/invoice.",
|
|
112
113
|
"Navigate to /user/orders/order-1-20260721-11joon/return.",
|
|
@@ -20,23 +20,23 @@
|
|
|
20
20
|
export const authored = {
|
|
21
21
|
"checklist-buying-product-detail-auction-detail": {
|
|
22
22
|
roles: ["guest"],
|
|
23
|
-
startPage: "/auctions/auction-
|
|
23
|
+
startPage: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
24
24
|
steps: [
|
|
25
|
-
"Open /auctions/auction-
|
|
25
|
+
"Open /auctions/auction-beyblade-original-dragoon-storm.",
|
|
26
26
|
"Read the countdown beside the 'Place a bid' button.",
|
|
27
27
|
"Wait 3 seconds without touching anything.",
|
|
28
28
|
"Read the countdown again.",
|
|
29
29
|
],
|
|
30
30
|
expectedBehaviour: "The page renders a live auction whose countdown ticks client-side against the stored end date. Auction listings offer bidding, never Add to Cart — the capability is per listing type, not a styling choice. A signed-out visitor sees no bid figures at all: a current bid is a money amount like any other, and the bid panel is replaced rather than shown with the numbers blanked.",
|
|
31
|
-
expectedUiState: "BEFORE: 'Current bid ₹
|
|
31
|
+
expectedUiState: "BEFORE: 'Current bid ₹3,499.00' and 'minimum increment ₹200.00' were shown to anyone. AFTER: the current-bid line reads 'Sign in to see the current bid', the minimum-increment line is absent, and the bid panel reads 'Bidding is for members' with a 'Sign in to bid' link. The digits 3,499 and 200 appear nowhere on the page. The heading reads 'Beyblade Original — Dragoon Storm (Rare Sealed)'. A countdown in the shape '47m 06s' or 'Xd Xh Xm Xs' sits next to 'Place a bid', and its seconds figure is lower after the 3-second wait — a frozen countdown is a fail even though the number looks plausible. There is no 'Add to Cart' button anywhere on the page.",
|
|
32
32
|
endResult: "Nothing persists — bid state and end time are read from the server on each load. The seconds figure moving is the whole check.",
|
|
33
33
|
},
|
|
34
34
|
"checklist-buying-product-detail-auction-detail-bid-signed-in": {
|
|
35
35
|
roles: ["buyer"],
|
|
36
|
-
startPage: "/auctions/auction-
|
|
36
|
+
startPage: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
37
37
|
steps: [
|
|
38
38
|
"Sign in as a buyer.",
|
|
39
|
-
"Open /auctions/auction-
|
|
39
|
+
"Open /auctions/auction-beyblade-original-dragoon-storm.",
|
|
40
40
|
"Read the current bid, the minimum increment and the bid panel.",
|
|
41
41
|
],
|
|
42
42
|
expectedBehaviour: "The twin of the guest case above — the bid figures and the working bid form are exactly what the gate must not cost a signed-in buyer.",
|
|
@@ -46,21 +46,21 @@ export const authored = {
|
|
|
46
46
|
},
|
|
47
47
|
"checklist-buying-product-detail-bundle-purchase": {
|
|
48
48
|
roles: ["buyer"],
|
|
49
|
-
startPage: "/bundles/bundle-
|
|
49
|
+
startPage: "/bundles/bundle-original-collectors-set",
|
|
50
50
|
steps: [
|
|
51
51
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
52
|
-
"Open /bundles/bundle-
|
|
52
|
+
"Open /bundles/bundle-original-collectors-set.",
|
|
53
53
|
"Click 'Buy now'.",
|
|
54
54
|
"On the checkout address step, select the first saved address, or add one named 'QA Address bundle-purchase' if none exists.",
|
|
55
55
|
"Continue to the payment step and choose Cash on Delivery.",
|
|
56
56
|
"Place the order.",
|
|
57
57
|
"Open /user/orders and open the order just created.",
|
|
58
58
|
],
|
|
59
|
-
inputs: { bundleId: "bundle-
|
|
60
|
-
expectedBehaviour: "The bundle is charged at its own locked price of ₹
|
|
61
|
-
expectedUiState: "The order detail page shows ONE line reading '
|
|
62
|
-
expectedData: { orderLineCount: 1, lineTotal:
|
|
63
|
-
endResult: "Reloading the order still shows the single '
|
|
59
|
+
inputs: { bundleId: "bundle-original-collectors-set", bundlePrice: 2999, memberTotal: 4597, paymentMethod: "Cash on Delivery" },
|
|
60
|
+
expectedBehaviour: "The bundle is charged at its own locked price of ₹2,999, not the ₹4,597 sum of its three members, and the receipt collapses the members back into one line. A bundle is all-or-nothing: the buyer never chose which parts to include, so presenting them as separate purchasable lines would misrepresent what was bought.",
|
|
61
|
+
expectedUiState: "The order detail page shows ONE line reading 'Original Collector's Set' at ₹2,999.00. It does not show 'Beyblade Original — Dranzer S', 'Beyblade Original — Driger V' and 'Beyblade Metal Storm Pegasus' as three rows, and the total is not ₹4,597. A 'What's included' expander beneath the line is fine — that is detail, not a second line.",
|
|
62
|
+
expectedData: { orderLineCount: 1, lineTotal: 2999 },
|
|
63
|
+
endResult: "Reloading the order still shows the single 'Original Collector's Set' line at ₹2,999.00. A total of ₹4,597 means the bundle discount was thrown away at checkout.",
|
|
64
64
|
},
|
|
65
65
|
"checklist-buying-product-detail-classified-buy-request-pinned-to-price": {
|
|
66
66
|
roles: ["buyer"],
|
|
@@ -113,10 +113,10 @@ export const authored = {
|
|
|
113
113
|
},
|
|
114
114
|
"checklist-buying-product-detail-digitalcode-delivery": {
|
|
115
115
|
roles: ["buyer"],
|
|
116
|
-
startPage: "/digital-codes/digitalcode-
|
|
116
|
+
startPage: "/digital-codes/digitalcode-beyblade-x-app-starter-pack",
|
|
117
117
|
steps: [
|
|
118
118
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
119
|
-
"Open /digital-codes/digitalcode-
|
|
119
|
+
"Open /digital-codes/digitalcode-beyblade-x-app-starter-pack.",
|
|
120
120
|
"Click 'Buy Now'.",
|
|
121
121
|
"On the checkout address step, select the first saved address.",
|
|
122
122
|
"Continue to the payment step and choose Cash on Delivery.",
|
|
@@ -124,30 +124,30 @@ export const authored = {
|
|
|
124
124
|
"Open /user/orders and open the order just created.",
|
|
125
125
|
"Reload the order page.",
|
|
126
126
|
],
|
|
127
|
-
inputs: { productId: "digitalcode-
|
|
128
|
-
expectedBehaviour: "This fixture is auto-claim, so the code is allocated and delivered as soon as the order is confirmed, with no seller action in between. The pool's remaining count drops by one.",
|
|
127
|
+
inputs: { productId: "digitalcode-beyblade-x-app-starter-pack", price: 199, codesAvailable: 25, paymentMethod: "Cash on Delivery" },
|
|
128
|
+
expectedBehaviour: "This fixture is auto-claim, so the code is allocated and delivered as soon as the order is confirmed, with no seller action in between. The pool's remaining count drops by one. The listing advertises 25 codes on the product document, but the codes themselves live in a subcollection the seed does not write — so the pool must be stocked first from the seller's Digital Content pool manager on /store/products, or the purchase completes and delivers nothing, which is the exact defect this case exists to catch.",
|
|
129
129
|
expectedUiState: "The order page shows a digital-code panel containing an actual code string that can be selected and copied. It does not read 'Pending delivery' or 'Waiting for seller' — for an auto-claim listing those states mean the delivery never fired.",
|
|
130
130
|
expectedData: { codeDelivered: true },
|
|
131
131
|
endResult: "Reloading the order still shows the same delivered code. A code that appears once and is blank after reload was never persisted against the order.",
|
|
132
132
|
},
|
|
133
133
|
"checklist-buying-product-detail-grouped-listings-carousel-on-detail": {
|
|
134
134
|
roles: ["guest"],
|
|
135
|
-
startPage: "/products/product-
|
|
135
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
136
136
|
steps: [
|
|
137
|
-
"Open /products/product-
|
|
137
|
+
"Open /products/product-beyblade-burst-valkyrie.",
|
|
138
138
|
"Scroll past the description tab and past the 'More in this category' and 'More by' carousels.",
|
|
139
139
|
"Read the heading of the themed carousel below them.",
|
|
140
140
|
"Click the first card in that carousel.",
|
|
141
141
|
],
|
|
142
142
|
expectedBehaviour: "The grouped-listings carousel is a distinct section from the four related-items carousels — it is fed by the groupedListings collection, not by category/brand/tag/store similarity — and each card links to its own detail page.",
|
|
143
|
-
expectedUiState: "A carousel with a theme heading
|
|
143
|
+
expectedUiState: "A carousel with a theme heading — the group's own name, such as 'Burst & X Attackers You Might Like' — sits below the related-items sections. Every card shows a real title and a rendered image tile, not a placeholder or a spinner. Clicking the first card lands on another member's detail page — /products/product-beyblade-burst-regalia-genesis, /products/product-beyblade-x-wizard-arrow or /products/product-beyblade-x-knife-shinobi — not back on the current page.",
|
|
144
144
|
endResult: "Nothing persists — read-only navigation.",
|
|
145
145
|
},
|
|
146
146
|
"checklist-buying-product-detail-image-gallery": {
|
|
147
147
|
roles: ["guest"],
|
|
148
|
-
startPage: "/auctions/auction-
|
|
148
|
+
startPage: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
149
149
|
steps: [
|
|
150
|
-
"Open /auctions/auction-
|
|
150
|
+
"Open /auctions/auction-beyblade-original-dragoon-storm.",
|
|
151
151
|
"Look at every thumbnail in the strip below the main image.",
|
|
152
152
|
"Hard-reload with Ctrl+Shift+R and look at the strip again.",
|
|
153
153
|
"Hard-reload twice more, looking at the strip each time.",
|
|
@@ -176,9 +176,9 @@ export const authored = {
|
|
|
176
176
|
},
|
|
177
177
|
"checklist-buying-product-detail-live-item-detail": {
|
|
178
178
|
roles: ["guest"],
|
|
179
|
-
startPage: "/live/live-
|
|
179
|
+
startPage: "/live/live-golden-retriever-puppy",
|
|
180
180
|
steps: [
|
|
181
|
-
"Open /live/live-
|
|
181
|
+
"Open /live/live-golden-retriever-puppy.",
|
|
182
182
|
"Read the heading, the species line, the price area and the delivery restrictions.",
|
|
183
183
|
"Look at the gallery thumbnail strip.",
|
|
184
184
|
],
|
|
@@ -214,9 +214,9 @@ export const authored = {
|
|
|
214
214
|
},
|
|
215
215
|
"checklist-buying-product-detail-preorder-detail": {
|
|
216
216
|
roles: ["guest"],
|
|
217
|
-
startPage: "/pre-orders/preorder-
|
|
217
|
+
startPage: "/pre-orders/preorder-beyblade-x-bx-08-wave",
|
|
218
218
|
steps: [
|
|
219
|
-
"Open /pre-orders/preorder-
|
|
219
|
+
"Open /pre-orders/preorder-beyblade-x-bx-08-wave.",
|
|
220
220
|
"Read the heading, the price area, the status badge and the delivery line.",
|
|
221
221
|
"Read the note beside the 'Reserve Now' button.",
|
|
222
222
|
],
|
|
@@ -226,10 +226,10 @@ export const authored = {
|
|
|
226
226
|
},
|
|
227
227
|
"checklist-buying-product-detail-prizedraw-buy-reveal": {
|
|
228
228
|
roles: ["buyer"],
|
|
229
|
-
startPage: "/prize-draws/prizedraw-
|
|
229
|
+
startPage: "/prize-draws/prizedraw-beyblade-mystery-box",
|
|
230
230
|
steps: [
|
|
231
231
|
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
232
|
-
"Open /prize-draws/prizedraw-
|
|
232
|
+
"Open /prize-draws/prizedraw-beyblade-mystery-box.",
|
|
233
233
|
"Click 'Buy now'.",
|
|
234
234
|
"On the checkout address step, select the first saved address.",
|
|
235
235
|
"Continue to the payment step and choose Cash on Delivery.",
|
|
@@ -237,28 +237,33 @@ export const authored = {
|
|
|
237
237
|
"Open /user/orders and open the order just created.",
|
|
238
238
|
"Reload the page.",
|
|
239
239
|
],
|
|
240
|
-
inputs: { productId: "prizedraw-
|
|
240
|
+
inputs: { productId: "prizedraw-beyblade-mystery-box", entries: 1, pricePerEntry: 99, slotsRemaining: 4 },
|
|
241
241
|
expectedBehaviour: "This fixture is instant-reveal, so the prize is drawn and assigned at confirmation rather than held until a scheduled close. The draw's remaining entry count drops by one.",
|
|
242
242
|
expectedUiState: "The order page names the prize assigned to this entry. It does not show a pending spinner or a 'draw not yet closed' message — those belong to prizedraw-beyblade-scheduled-demo, not to this fixture, and seeing them here means the mode was ignored.",
|
|
243
243
|
expectedData: { entriesPurchased: 1, revealed: true },
|
|
244
244
|
endResult: "Reloading the order shows the same prize. A prize that changes on reload was never persisted and was being drawn per render.",
|
|
245
245
|
},
|
|
246
246
|
"checklist-buying-product-detail-product-group-set-widget": {
|
|
247
|
-
roles: ["guest"],
|
|
248
|
-
startPage: "/products
|
|
247
|
+
roles: ["seller", "guest"],
|
|
248
|
+
startPage: "/store/products",
|
|
249
249
|
steps: [
|
|
250
|
-
"
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
"
|
|
250
|
+
"Sign in as tyson@beybladearena.in / TempPass123!, the owner of store-beyblade-arena.",
|
|
251
|
+
"Open /store/products and edit product-beyblade-burst-valkyrie.",
|
|
252
|
+
"In the group settings panel, make it a group parent titled 'QA Set valkyrie-lineage' and add product-beyblade-burst-regalia-genesis as a member, then save.",
|
|
253
|
+
"Open /products/product-beyblade-burst-valkyrie and scroll to the 'Part of / Parts in this group' panel.",
|
|
254
|
+
"Click its expand control and read the member list.",
|
|
254
255
|
"Click 'View whole group'.",
|
|
255
|
-
"Close what opens, then open /products/product-
|
|
256
|
-
"Open /products/group-tester-sandbox-bundle and expand the same panel.",
|
|
256
|
+
"Close what opens, then open /products/product-beyblade-burst-regalia-genesis and expand the same panel.",
|
|
257
257
|
],
|
|
258
|
-
|
|
259
|
-
|
|
258
|
+
inputs: {
|
|
259
|
+
parent: "product-beyblade-burst-valkyrie",
|
|
260
|
+
child: "product-beyblade-burst-regalia-genesis",
|
|
261
|
+
groupTitle: "QA Set valkyrie-lineage",
|
|
262
|
+
},
|
|
263
|
+
expectedBehaviour: "The group panel appears on the parent and on the child, because membership is symmetric — a child knows its groupId and the parent knows its child slugs. A panel that renders only on the parent means the children's side of the link was never written. The group is BUILT by this case rather than read from the seed: no seeded product carries groupId, isGroupParent or groupChildSlugs, so there is no fixture to read.",
|
|
264
|
+
expectedUiState: "The panel is present on both pages. Its expand control renders as a real triangle or chevron glyph, not a literal character like '▸' rendered at font-fallback size and not a missing box. Expanded, it lists 'Beyblade Burst B-01 Valkyrie' and 'Beyblade Burst B-135 Regalia Genesis' with image tiles. 'View whole group' opens a modal or drawer showing both members.",
|
|
260
265
|
expectedData: { groupMemberCount: 2 },
|
|
261
|
-
endResult: "
|
|
266
|
+
endResult: "Clear the group settings on both listings afterwards so the seeded catalogue is left as it was. A panel that survives on the parent but never appeared on the child is the failure.",
|
|
262
267
|
},
|
|
263
268
|
"checklist-buying-product-detail-related-listings-sections": {
|
|
264
269
|
roles: ["guest"],
|
|
@@ -287,59 +292,60 @@ export const authored = {
|
|
|
287
292
|
},
|
|
288
293
|
"checklist-buying-product-detail-standard-detail": {
|
|
289
294
|
roles: ["guest"],
|
|
290
|
-
startPage: "/products/product-
|
|
295
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
291
296
|
steps: [
|
|
292
|
-
"Open /products/product-
|
|
297
|
+
"Open /products/product-beyblade-burst-valkyrie in a private window with no session.",
|
|
293
298
|
"Read the heading, the price area, the stock badge and the description.",
|
|
294
299
|
"Read the category and brand links below the heading.",
|
|
295
300
|
"Read the seller line at the bottom of the info panel.",
|
|
296
301
|
],
|
|
297
302
|
expectedBehaviour: "A standard listing renders every panel a buyer needs to decide, and the purchase actions are present but inert for a signed-out visitor rather than absent — a missing button reads as a broken page, a disabled one reads as a prompt to sign in. The PRICE is not shown to a signed-out visitor at all: the catalogue must not be readable at scale without an account.",
|
|
298
|
-
expectedUiState: "BEFORE: the price area read '₹
|
|
303
|
+
expectedUiState: "BEFORE: the price area read '₹999.00'. AFTER: it reads 'Sign in to see price' and is a link to /auth/login; the digits 999 appear nowhere on the page. Heading 'Beyblade Burst B-01 Valkyrie'. Stock badge in the shape '✓ In Stock — only 10 left' (stock is not an amount and is still shown). 'Buy Now', 'Add to Cart' and 'Add to Wishlist' are visible and disabled. Category link 'Superking' and brand link 'Beyblade' appear below the heading. A description paragraph is present. 'Sold by Beyblade Arena' with a 'Visit Store →' link is shown.",
|
|
299
304
|
expectedData: { stockQuantity: 10 },
|
|
300
305
|
endResult: "Nothing persists — read-only for a guest.",
|
|
301
306
|
},
|
|
302
307
|
"checklist-buying-product-detail-price-does-not-flash-sign-in-prompt-on-hard-reload": {
|
|
303
308
|
roles: ["buyer"],
|
|
304
|
-
startPage: "/products/product-
|
|
309
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
305
310
|
steps: [
|
|
306
311
|
"Sign in as a buyer.",
|
|
307
|
-
"Open /products/product-
|
|
312
|
+
"Open /products/product-beyblade-burst-valkyrie and confirm the price reads ₹999.00.",
|
|
308
313
|
"Press Ctrl+Shift+R (hard reload) and watch the price area continuously from the moment the page starts painting.",
|
|
309
314
|
"Repeat the hard reload twice more, watching the same area.",
|
|
310
315
|
"Throttle the network to 'Slow 3G' in the browser's network panel and hard-reload once more, watching the price area throughout.",
|
|
311
316
|
],
|
|
312
317
|
expectedBehaviour: "While the session is still resolving the price area shows a neutral placeholder, never the sign-in prompt. The prompt means 'you are signed out', and the session provider starts every hard load with no user and resolves asynchronously — so a two-state gate tells a signed-in buyer they are signed out on every single page load. The throttled reload is the real test: at full speed the window can be too short to see.",
|
|
313
|
-
expectedUiState: "Across all four reloads the price area goes from blank-or-placeholder straight to '₹
|
|
318
|
+
expectedUiState: "Across all four reloads the price area goes from blank-or-placeholder straight to '₹999.00'. The text 'Sign in to see price' NEVER appears, not even for one frame, and most visibly not on the throttled load. A flash of the prompt before the price settles is the failure — the end state being correct does not pass this case.",
|
|
314
319
|
expectedData: { promptFlashes: 0 },
|
|
315
320
|
endResult: "Read-only; restore the network throttle to 'No throttling' afterwards.",
|
|
316
321
|
},
|
|
317
322
|
"checklist-buying-product-detail-standard-detail-price-signed-in": {
|
|
318
323
|
roles: ["buyer"],
|
|
319
|
-
startPage: "/products/product-
|
|
324
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
320
325
|
steps: [
|
|
321
326
|
"Sign in as a buyer.",
|
|
322
|
-
"Open /products/product-
|
|
327
|
+
"Open /products/product-beyblade-burst-valkyrie.",
|
|
323
328
|
"Read the price area.",
|
|
324
329
|
],
|
|
325
330
|
expectedBehaviour: "The twin of the guest case above. Gating the price must not lose coverage of the price itself — a signed-in buyer sees the real amount, formatted as currency, with no sign-in prompt anywhere on the page.",
|
|
326
|
-
expectedUiState: "The price area reads '₹
|
|
327
|
-
expectedData: { price:
|
|
331
|
+
expectedUiState: "The price area reads '₹999.00'. The text 'Sign in to see price' appears nowhere on the page.",
|
|
332
|
+
expectedData: { price: 999 },
|
|
328
333
|
endResult: "Nothing persists — read-only.",
|
|
329
334
|
},
|
|
330
335
|
"checklist-buying-product-detail-tester-fixtures-hidden-from-the-public": {
|
|
331
|
-
roles: ["guest", "
|
|
336
|
+
roles: ["guest", "admin"],
|
|
332
337
|
startPage: "/products",
|
|
333
338
|
steps: [
|
|
334
339
|
"Open a private/incognito window with no session and open /products.",
|
|
335
|
-
"Read every card title on the grid and every card's URL slug, looking for the word 'Tester' or 'tester'.",
|
|
340
|
+
"Read every card title on the grid and every card's URL slug, looking for the word 'Probe', 'probe', 'Tester' or 'tester'.",
|
|
336
341
|
"Page through the grid to the end, reading titles the same way.",
|
|
337
|
-
"
|
|
338
|
-
"
|
|
342
|
+
"Do the same on /auctions, paging to the end.",
|
|
343
|
+
"In a normal window, sign in as admin@letitrip.in / TempPass123!.",
|
|
344
|
+
"Open /admin/products, filter by title for 'Probe', and read how many rows come back.",
|
|
339
345
|
],
|
|
340
|
-
expectedBehaviour: "
|
|
341
|
-
expectedUiState: "Private window: not one card title
|
|
342
|
-
endResult: "Nothing persists — the rule is applied per request. Reading only the first page is not enough; a leak on page three is still a leak.",
|
|
346
|
+
expectedBehaviour: "Rows carrying isTestData are filtered out of every public read in the application layer, not by a Firestore query — an inequality on isTestData would exclude every document that lacks the field, which is all the real content, and the page would show ONLY test data. The admin half is the control: it proves such rows EXIST while the run is in progress, so their absence from the public grid is a filter doing work rather than an empty collection.",
|
|
347
|
+
expectedUiState: "Private window: not one card title or slug on any page of /products or /auctions carries 'Probe' or 'Tester'. Signed in as admin on /admin/products: the per-batch probe rows seeded for this run ARE listed. A zero count on both sides proves nothing and must be answered null.",
|
|
348
|
+
endResult: "Nothing persists — the rule is applied per request. Reading only the first page is not enough; a leak on page three is still a leak. The permanent sandbox catalogue was removed, so the only isTestData rows are the per-batch fixtures a run creates while it is running.",
|
|
343
349
|
},
|
|
344
350
|
"checklist-buying-product-detail-unreachable-image-degrades-to-placeholder": {
|
|
345
351
|
roles: ["guest"],
|
|
@@ -29,7 +29,7 @@ export const authored = {
|
|
|
29
29
|
roles: ["buyer"],
|
|
30
30
|
startPage: "/user/orders",
|
|
31
31
|
steps: [
|
|
32
|
-
"Sign in as
|
|
32
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
33
33
|
"Open /user/orders and open a DELIVERED order and read whether a return control is offered.",
|
|
34
34
|
"Open a PENDING order and read whether one is offered.",
|
|
35
35
|
"Open a SHIPPED order and read the same.",
|
|
@@ -46,7 +46,7 @@ export const authored = {
|
|
|
46
46
|
roles: ["buyer"],
|
|
47
47
|
startPage: "/user/orders",
|
|
48
48
|
steps: [
|
|
49
|
-
"Sign in as
|
|
49
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
50
50
|
"Open /user/orders and find a delivered order whose item was marked final sale.",
|
|
51
51
|
"Confirm the order or its item shows the final-sale term.",
|
|
52
52
|
"Open the return control and read every reason it offers.",
|
|
@@ -64,7 +64,7 @@ export const authored = {
|
|
|
64
64
|
roles: ["buyer"],
|
|
65
65
|
startPage: "/user/orders",
|
|
66
66
|
steps: [
|
|
67
|
-
"Sign in as
|
|
67
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
68
68
|
"Open /user/orders and find a different delivered final-sale order.",
|
|
69
69
|
"Open the return control and read every reason offered.",
|
|
70
70
|
"Select the change-of-mind reason.",
|
|
@@ -81,7 +81,7 @@ export const authored = {
|
|
|
81
81
|
roles: ["buyer", "admin"],
|
|
82
82
|
startPage: "/user/orders",
|
|
83
83
|
steps: [
|
|
84
|
-
"Sign in as
|
|
84
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
85
85
|
"Open a delivered order and open the return control.",
|
|
86
86
|
"Select a reason and type 'QA Return reason-persisted — item arrived damaged in transit.' as the note.",
|
|
87
87
|
"Submit and RELOAD the order.",
|
|
@@ -99,7 +99,7 @@ export const authored = {
|
|
|
99
99
|
roles: ["buyer"],
|
|
100
100
|
startPage: "/user/orders",
|
|
101
101
|
steps: [
|
|
102
|
-
"Sign in as
|
|
102
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
103
103
|
"Open /user/orders and open a delivered order containing several items.",
|
|
104
104
|
"Open the return control and read whether individual lines can be selected.",
|
|
105
105
|
"Select ONE line and leave the others unselected.",
|
|
@@ -116,7 +116,7 @@ export const authored = {
|
|
|
116
116
|
roles: ["buyer"],
|
|
117
117
|
startPage: "/user/orders",
|
|
118
118
|
steps: [
|
|
119
|
-
"Sign in as
|
|
119
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
120
120
|
"Open /user/orders and open a delivered prize-draw order.",
|
|
121
121
|
"Read whether a return control is offered at all.",
|
|
122
122
|
"If one is offered, open it and read every reason available.",
|
|
@@ -226,14 +226,14 @@ export const authored = {
|
|
|
226
226
|
},
|
|
227
227
|
"checklist-buying-reviews-pagination-empty-state": {
|
|
228
228
|
roles: ["guest"],
|
|
229
|
-
startPage: "/products/product-
|
|
229
|
+
startPage: "/products/product-beyblade-burst-spryzen-video-demo",
|
|
230
230
|
steps: [
|
|
231
|
-
"
|
|
232
|
-
"Open
|
|
231
|
+
"Open /products/product-beyblade-burst-spryzen-video-demo in a private window with no session — this listing carries no seeded reviews.",
|
|
232
|
+
"Open its reviews tab.",
|
|
233
233
|
"Read what is shown.",
|
|
234
234
|
"Check whether a pager, filters or a sort control are rendered over the empty list.",
|
|
235
235
|
"Read the rating summary and check it reads as no reviews rather than zero out of five.",
|
|
236
|
-
"
|
|
236
|
+
"Open /products/product-beyblade-original-dranzer-s, which carries 14 seeded reviews, apply a rating filter that matches nothing, and compare the two empty states.",
|
|
237
237
|
],
|
|
238
238
|
expectedBehaviour: "A product with no reviews shows a named empty state, and controls that cannot act on anything are not rendered over it. The two empty states are different facts — 'no reviews yet' invites the buyer to write one, 'no reviews match this filter' invites them to clear it — and one message cannot say both.",
|
|
239
239
|
expectedUiState: "The no-reviews product shows a message inviting a review, with no pager. The filtered-to-nothing case shows a message about the filter. A rating summary reading '0 out of 5' where there are no reviews is the failure — that is a rating, and no rating exists.",
|
|
@@ -24,7 +24,7 @@ export const authored = {
|
|
|
24
24
|
roles: ["buyer"],
|
|
25
25
|
startPage: "/user/orders",
|
|
26
26
|
steps: [
|
|
27
|
-
"Sign in as
|
|
27
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
28
28
|
"Open /user/orders and open a delivered order.",
|
|
29
29
|
"Use the control that leaves a review on one of its items.",
|
|
30
30
|
"Submit with no rating and no text, and read where the errors appear.",
|
|
@@ -92,7 +92,7 @@ export const authored = {
|
|
|
92
92
|
roles: ["buyer"],
|
|
93
93
|
startPage: "/user/prize-draws",
|
|
94
94
|
steps: [
|
|
95
|
-
"Sign in as
|
|
95
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
96
96
|
"Open the buyer's prize-draws surface and read every row.",
|
|
97
97
|
"Check each names the draw, the number of entries bought and the outcome.",
|
|
98
98
|
"Find an entry in a REVEALED draw and read the prize it names.",
|
|
@@ -108,7 +108,7 @@ export const authored = {
|
|
|
108
108
|
roles: ["buyer"],
|
|
109
109
|
startPage: "/user/digital-codes",
|
|
110
110
|
steps: [
|
|
111
|
-
"Sign in as
|
|
111
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
112
112
|
"Open the buyer's digital-codes surface and read every row.",
|
|
113
113
|
"Check each names the listing it came from and shows its code or its delivery state.",
|
|
114
114
|
"Find an auto-claim purchase and read whether its code is present.",
|
|
@@ -140,7 +140,7 @@ export const authored = {
|
|
|
140
140
|
roles: ["buyer"],
|
|
141
141
|
startPage: "/user/orders",
|
|
142
142
|
steps: [
|
|
143
|
-
"Sign in as
|
|
143
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
144
144
|
"Open /user/orders and open an order that has moved through several statuses.",
|
|
145
145
|
"Open its timeline and read every step in order.",
|
|
146
146
|
"Read the date and time against each step.",
|
|
@@ -156,7 +156,7 @@ export const authored = {
|
|
|
156
156
|
roles: ["buyer"],
|
|
157
157
|
startPage: "/user/orders",
|
|
158
158
|
steps: [
|
|
159
|
-
"Sign in as
|
|
159
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
160
160
|
"Open /user/orders and find an order that received a partial refund.",
|
|
161
161
|
"Open its timeline and look for an entry describing the refund.",
|
|
162
162
|
"Read whether the entry states the amount refunded.",
|
|
@@ -171,7 +171,7 @@ export const authored = {
|
|
|
171
171
|
roles: ["buyer"],
|
|
172
172
|
startPage: "/user/orders",
|
|
173
173
|
steps: [
|
|
174
|
-
"Sign in as
|
|
174
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
175
175
|
"Open /user/orders and switch to the Auction wins tab.",
|
|
176
176
|
"Open an order that came from a WON auction and read what it says about how it was won.",
|
|
177
177
|
"Read whether it shows the winning bid and the number of competing bids.",
|
|
@@ -202,7 +202,7 @@ export const authored = {
|
|
|
202
202
|
roles: ["buyer"],
|
|
203
203
|
startPage: "/user/orders",
|
|
204
204
|
steps: [
|
|
205
|
-
"Sign in as
|
|
205
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
206
206
|
"Open an order that had coupons applied and add-ons selected.",
|
|
207
207
|
"Open its timeline and read every entry.",
|
|
208
208
|
"Look for entries describing coupons being applied or removed, or add-on fees changing.",
|
|
@@ -218,7 +218,7 @@ export const authored = {
|
|
|
218
218
|
roles: ["buyer"],
|
|
219
219
|
startPage: "/user/orders",
|
|
220
220
|
steps: [
|
|
221
|
-
"Sign in as
|
|
221
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
222
222
|
"Open an order and open its timeline.",
|
|
223
223
|
"Read every entry for a name, an email address or a phone number.",
|
|
224
224
|
"Read how the actor of each change is identified.",
|
|
@@ -234,7 +234,7 @@ export const authored = {
|
|
|
234
234
|
roles: ["buyer"],
|
|
235
235
|
startPage: "/user/returns",
|
|
236
236
|
steps: [
|
|
237
|
-
"Sign in as
|
|
237
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
238
238
|
"Open the buyer's returns surface and read every row.",
|
|
239
239
|
"Check each names the item, the order and the reason given.",
|
|
240
240
|
"Read every status filter offered and select each.",
|
package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js
CHANGED
|
@@ -120,7 +120,7 @@ export const authored = {
|
|
|
120
120
|
steps: [
|
|
121
121
|
"Open /categories in a private window with no session.",
|
|
122
122
|
"Write down the counts on the first four category tiles.",
|
|
123
|
-
"Sign in as the
|
|
123
|
+
"Sign in as the buyer rehan.sheikh@gmail.com / TempPass123!.",
|
|
124
124
|
"Open /categories again and read the same four tiles.",
|
|
125
125
|
],
|
|
126
126
|
expectedBehaviour: "A category count is a fact about the catalogue, not about the viewer. If the two differ, something viewer-scoped is leaking into a shared number — the likeliest candidate being a filter that hides test fixtures from one audience but is counted for the other.",
|