@mohasinac/appkit 4.0.3 → 4.1.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/_internal/client/features/layout/useSidebarSearch.d.ts +19 -0
- package/dist/_internal/client/features/layout/useSidebarSearch.js +21 -0
- package/dist/_internal/server/features/auth/permissions.d.ts +2 -0
- package/dist/_internal/server/features/auth/permissions.js +4 -2
- package/dist/_internal/server/features/seo/sitemap.js +3 -2
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/features/about/components/FAQPageView.d.ts +4 -1
- package/dist/features/about/components/FAQPageView.js +17 -7
- package/dist/features/account/components/UserSidebar.js +15 -9
- package/dist/features/admin/components/AdminSidebar.js +15 -9
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +4 -1
- package/dist/features/admin/components/AdminUserEditorView.d.ts +3 -1
- package/dist/features/admin/components/AdminUserEditorView.js +10 -2
- package/dist/features/admin/components/AdminUsersView.js +1 -1
- package/dist/features/auth/role-predicates.d.ts +14 -0
- package/dist/features/auth/role-predicates.js +1 -0
- package/dist/features/auth/schemas/firestore.d.ts +2 -0
- package/dist/features/auth/schemas/firestore.js +1 -0
- package/dist/features/events/actions/event-actions.js +15 -8
- package/dist/features/events/repository/events.repository.d.ts +2 -0
- package/dist/features/events/repository/events.repository.js +9 -0
- package/dist/features/events/schemas/firestore.d.ts +1 -0
- package/dist/features/events/schemas/firestore.js +1 -0
- package/dist/features/faq/components/FAQSearchableList.d.ts +11 -0
- package/dist/features/faq/components/FAQSearchableList.js +21 -0
- package/dist/features/homepage/components/BeforeAfterCard.js +2 -1
- package/dist/features/homepage/components/BrandsSection.js +2 -1
- package/dist/features/homepage/components/CharacterHotspot.js +2 -1
- package/dist/features/homepage/components/CharacterHotspotForm.js +4 -3
- package/dist/features/homepage/components/HeroBanner.js +2 -1
- package/dist/features/homepage/components/PromoGrid.js +2 -1
- package/dist/features/homepage/components/ShopByCategorySection.js +2 -1
- package/dist/features/seller/components/SellerSidebar.js +15 -9
- package/dist/features/tester/actions/checklist-item-actions.d.ts +6 -0
- package/dist/features/tester/actions/checklist-item-actions.js +2 -0
- package/dist/features/tester/components/TesterHubView.js +5 -4
- package/dist/features/tester/schemas/firestore.d.ts +3 -1
- package/dist/features/tester/schemas/firestore.js +2 -0
- package/dist/features/tester/seed-data/bids-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/bids-tester-seed-data.js +37 -0
- package/dist/features/tester/seed-data/coupons-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/coupons-tester-seed-data.js +76 -0
- package/dist/features/tester/seed-data/events-tester-seed-data.js +50 -2
- package/dist/features/tester/seed-data/index.d.ts +3 -0
- package/dist/features/tester/seed-data/index.js +3 -0
- package/dist/features/tester/seed-data/orders-tester-seed-data.d.ts +2 -0
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +265 -0
- package/dist/features/tester/seed-data/products-tester-seed-data.js +213 -8
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +421 -9
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/next/api/routeHandler.js +22 -4
- package/dist/react/contexts/SessionContext.d.ts +2 -0
- package/dist/react/contexts/SessionContext.js +2 -0
- package/dist/seed/index.d.ts +1 -1
- package/dist/seed/index.js +1 -1
- package/dist/seed/manifest.js +4 -4
- package/dist/seed/orders-seed-data.js +4 -0
- package/dist/seed/products-classifieds-seed-data.js +48 -5
- package/dist/seed/products-digital-codes-seed-data.js +48 -5
- package/dist/seed/products-live-items-seed-data.js +6 -1
- package/dist/seed/products-prize-draws-seed-data.js +58 -5
- package/dist/styles.css +1 -1
- package/dist/tailwind-utilities.css +1 -1
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +10 -4
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* WHY: Seeds the initial tester QA checklist catalog — DB-backed, admin-manageable (mirrors faq-seed-data.ts).
|
|
3
|
-
* WHAT:
|
|
4
|
-
* Community & Support, Design & UX). Admins add/edit
|
|
5
|
-
* this array is a starting point, not the source of
|
|
3
|
+
* WHAT: Default test cases across 8 groups (Account & Auth, Buying, Selling, Content & Discovery,
|
|
4
|
+
* Community & Support, Design & UX, Public & Marketing Pages, Admin (Testing)). Admins add/edit
|
|
5
|
+
* further cases via /admin/tester-checklist — this array is a starting point, not the source of
|
|
6
|
+
* truth. Every case is searchable by title or route in the Tester Hub (/user/tester), which any
|
|
7
|
+
* isTester account OR admin can open. Items in the "admin" group carry adminOnly:true — only
|
|
8
|
+
* visible to a tester with canTestAdmin (or a real admin); see `group()`'s `opts.adminOnly`.
|
|
6
9
|
*
|
|
7
10
|
* EXPORTS:
|
|
8
11
|
* testerChecklistSeedData — Array of Partial<TesterChecklistItemDocument> for seed runner
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
* @tag consumers:seed/index.ts,seed/runner.ts
|
|
15
18
|
* @tag sideEffects:none
|
|
16
19
|
*/
|
|
17
|
-
function group(groupKey, groupLabel, pages) {
|
|
20
|
+
function group(groupKey, groupLabel, pages, opts) {
|
|
18
21
|
const items = [];
|
|
19
22
|
pages.forEach((page, pageIdx) => {
|
|
20
23
|
page.cases.forEach((c, caseIdx) => {
|
|
@@ -27,8 +30,9 @@ function group(groupKey, groupLabel, pages) {
|
|
|
27
30
|
label: c.label,
|
|
28
31
|
description: c.description,
|
|
29
32
|
href: c.href,
|
|
30
|
-
order: pageIdx * 10 + caseIdx,
|
|
33
|
+
order: (opts?.orderOffset ?? 0) + pageIdx * 10 + caseIdx,
|
|
31
34
|
isActive: true,
|
|
35
|
+
adminOnly: opts?.adminOnly ?? false,
|
|
32
36
|
});
|
|
33
37
|
});
|
|
34
38
|
});
|
|
@@ -42,6 +46,8 @@ export const testerChecklistSeedData = [
|
|
|
42
46
|
cases: [
|
|
43
47
|
{ key: "email-signup", label: "Sign up with email works", href: "/register" },
|
|
44
48
|
{ key: "google-oauth", label: "Sign up / log in with Google works", href: "/login" },
|
|
49
|
+
{ key: "google-link-existing", label: "Linking Google sign-in to an existing email/password account works" },
|
|
50
|
+
{ key: "google-popup-blocked-fallback", label: "If the Google sign-in popup is blocked, the fallback (RTDB signal + postMessage) still completes sign-in" },
|
|
45
51
|
{ key: "login", label: "Log in with email + password works", href: "/login" },
|
|
46
52
|
{ key: "logout", label: "Log out works and clears the session" },
|
|
47
53
|
{ key: "email-verify", label: "Email verification link works" },
|
|
@@ -58,6 +64,17 @@ export const testerChecklistSeedData = [
|
|
|
58
64
|
{ key: "public-profile-toggle", label: "Public profile visibility toggle works" },
|
|
59
65
|
],
|
|
60
66
|
},
|
|
67
|
+
{
|
|
68
|
+
pageKey: "testing-program",
|
|
69
|
+
pageLabel: "Tester Hub",
|
|
70
|
+
cases: [
|
|
71
|
+
{ key: "tester-hub-loads", label: "Tester Hub loads the full checklist grouped by section", href: "/user/tester" },
|
|
72
|
+
{ key: "tester-hub-search", label: "Tester Hub search finds test cases by typing part of the title or the route (e.g. \"/store/payouts\")", href: "/user/tester" },
|
|
73
|
+
{ key: "tester-hub-answer-saves", label: "Answering Yes/No and adding a comment on a test case saves without reloading" },
|
|
74
|
+
{ key: "admin-tester-access", label: "Signed-in admin accounts can open the Tester Hub and see the same checklist as testers", href: "/user/tester" },
|
|
75
|
+
{ key: "admin-testing-section", label: "Admin dashboard's Testing section shows both the Tester Checklist and Tester Feedback (results) links", href: "/admin/tester-feedback" },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
61
78
|
]),
|
|
62
79
|
...group("buying", "Buying", [
|
|
63
80
|
{
|
|
@@ -79,6 +96,11 @@ export const testerChecklistSeedData = [
|
|
|
79
96
|
{ key: "preorder-detail", label: "Pre-order detail page shows expected ship date correctly" },
|
|
80
97
|
{ key: "image-gallery", label: "Product image gallery / zoom works" },
|
|
81
98
|
{ key: "video-playback", label: "Product video (YouTube embed) plays correctly" },
|
|
99
|
+
{ key: "prizedraw-buy-reveal", label: "Buying a prize-draw entry, then the reveal, correctly shows win/lose and auto-refunds non-winners" },
|
|
100
|
+
{ key: "bundle-purchase", label: "Purchasing a bundle/grouped-listing works and shows all included items in the order" },
|
|
101
|
+
{ key: "classified-contact-flow", label: "A classified listing shows a contact-seller flow with deliberately no checkout/buy button" },
|
|
102
|
+
{ key: "digitalcode-delivery", label: "Purchasing a digital-code listing delivers the code to the buyer post-purchase" },
|
|
103
|
+
{ key: "live-item-detail", label: "A live-item listing's detail page shows the livestream link correctly" },
|
|
82
104
|
],
|
|
83
105
|
},
|
|
84
106
|
{
|
|
@@ -86,14 +108,29 @@ export const testerChecklistSeedData = [
|
|
|
86
108
|
pageLabel: "Buying & Checkout",
|
|
87
109
|
cases: [
|
|
88
110
|
{ key: "add-to-cart", label: "Add to cart works from the product page" },
|
|
111
|
+
{ key: "add-to-cart-out-of-stock", label: "Add to cart is disabled/blocked once a listing's stock reaches zero" },
|
|
112
|
+
{ key: "add-to-cart-max-quantity", label: "Increasing quantity in the cart is capped at the listing's available stock, with a clear message" },
|
|
89
113
|
{ key: "checkout-flow", label: "Checkout flow completes without errors", href: "/cart" },
|
|
114
|
+
{ key: "checkout-order-review", label: "The order-review step before payment shows correct items, quantities, addresses, and totals" },
|
|
115
|
+
{ key: "checkout-multi-seller-split", label: "A cart with items from multiple sellers correctly splits into separate orders at checkout" },
|
|
90
116
|
{ key: "shipping-address", label: "Selecting/adding a shipping address works" },
|
|
117
|
+
{ key: "shipping-address-inline-add", label: "Adding a new address inline during checkout (without leaving the flow) works and the new address is selectable immediately" },
|
|
118
|
+
{ key: "shipping-address-edit", label: "Editing an existing shipping address from checkout works" },
|
|
119
|
+
{ key: "shipping-method-selection", label: "Selecting a shipping method/provider at checkout recalculates the shipping fee correctly" },
|
|
120
|
+
{ key: "gst-breakdown-display", label: "When GST is enabled in Site Settings, checkout shows the correct CGST/SGST or IGST breakdown based on buyer vs seller state" },
|
|
91
121
|
{ key: "checkout-otp-highvalue", label: "Carts ≥ the OTP threshold prompt for email verification before placing the order (except COD)" },
|
|
122
|
+
{ key: "payment-method-selection", label: "Choosing between COD, UPI/manual, and Razorpay (when enabled) at checkout works" },
|
|
92
123
|
{ key: "payment-window-countdown", label: "Manual-payment orders show a 15-minute countdown timer on the payment page" },
|
|
93
124
|
{ key: "payment-proof-upload", label: "Uploading manual payment proof (screenshot, UTR, mark-as-paid + agreement checkboxes) works" },
|
|
125
|
+
{ key: "payment-proof-reupload", label: "Requesting a proof re-upload extends the buyer's payment window and the buyer can successfully re-submit" },
|
|
94
126
|
{ key: "payment-window-expiry", label: "An order whose 15-minute payment window expires with no proof auto-cancels and the item returns to stock" },
|
|
127
|
+
{ key: "emi-checkout-flow", label: "Choosing EMI at checkout (when enabled) shows the correct tenure options, token amount, and surcharge, and creates the installment schedule" },
|
|
128
|
+
{ key: "out-of-stock-policy-cancel", label: "With the \"cancel whole order\" out-of-stock policy, checkout correctly rejects the entire batch if any item goes out of stock mid-checkout" },
|
|
129
|
+
{ key: "out-of-stock-policy-skip", label: "With the \"skip unavailable items\" policy, checkout proceeds with only the still-available items" },
|
|
95
130
|
{ key: "order-confirmation", label: "Order confirmation page/email shows correct order details" },
|
|
96
131
|
{ key: "payment-auto-approve-dispute", label: "An auto-approved order (2h, no admin review) shows the badge, and \"Raise a dispute\" submits successfully" },
|
|
132
|
+
{ key: "checkout-mobile-responsive", label: "The full checkout flow (cart → address → payment → confirmation) is usable and correctly laid out on a mobile viewport" },
|
|
133
|
+
{ key: "checkout-back-navigation", label: "Using the browser back button mid-checkout does not lose cart state or double-submit the order" },
|
|
97
134
|
],
|
|
98
135
|
},
|
|
99
136
|
{
|
|
@@ -110,9 +147,21 @@ export const testerChecklistSeedData = [
|
|
|
110
147
|
pageKey: "wishlist-history",
|
|
111
148
|
pageLabel: "Wishlist & History",
|
|
112
149
|
cases: [
|
|
113
|
-
{ key: "add-wishlist", label: "Adding a product to the wishlist works", href: "/user/wishlist" },
|
|
150
|
+
{ key: "add-wishlist-pdp", label: "Adding a product to the wishlist from the product detail page works", href: "/user/wishlist" },
|
|
151
|
+
{ key: "add-wishlist-card", label: "Adding a product to the wishlist from a listing card (checkbox/long-press) works on both listing and search pages" },
|
|
114
152
|
{ key: "remove-wishlist", label: "Removing a product from the wishlist works" },
|
|
115
|
-
{ key: "
|
|
153
|
+
{ key: "wishlist-persists-guest-to-login", label: "Wishlist items added as a guest are preserved after logging in" },
|
|
154
|
+
{ key: "wishlist-idempotent-readd", label: "Re-adding a product already on the wishlist is a no-op and doesn't create a duplicate entry" },
|
|
155
|
+
{ key: "wishlist-cap-enforced", label: "Adding a 21st item to the wishlist is blocked with a clear \"wishlist full\" message (20-item cap)" },
|
|
156
|
+
{ key: "wishlist-across-listing-types", label: "Auctions and pre-orders (not just standard products) can be added to and viewed correctly in the wishlist" },
|
|
157
|
+
{ key: "wishlist-price-drop-accuracy", label: "A wishlist item's displayed price matches the product's current price, not a stale snapshot" },
|
|
158
|
+
{ key: "wishlist-sold-out-item", label: "A wishlist item whose product later sells out or is removed still displays gracefully (no crash) with an appropriate indicator" },
|
|
159
|
+
{ key: "wishlist-empty-state", label: "The empty-wishlist state renders correctly with no items", href: "/user/wishlist" },
|
|
160
|
+
{ key: "wishlist-add-to-cart-from-list", label: "Adding a wishlist item directly to the cart from the wishlist page works" },
|
|
161
|
+
{ key: "view-history", label: "Recently viewed history shows accurate items in most-recent-first order", href: "/user/history" },
|
|
162
|
+
{ key: "history-revisit-reorders", label: "Re-visiting a product already in history removes the old entry and moves it to the front, rather than duplicating it" },
|
|
163
|
+
{ key: "history-fifo-cap", label: "History silently evicts the oldest entry once more than 50 items have been viewed (no error shown to the user)" },
|
|
164
|
+
{ key: "history-guest-merge-on-login", label: "Guest browsing history (localStorage) merges correctly with the account's history after login, deduplicated by product" },
|
|
116
165
|
],
|
|
117
166
|
},
|
|
118
167
|
{
|
|
@@ -121,7 +170,12 @@ export const testerChecklistSeedData = [
|
|
|
121
170
|
cases: [
|
|
122
171
|
{ key: "update-qty", label: "Updating item quantity in cart recalculates the total" },
|
|
123
172
|
{ key: "apply-coupon", label: "Applying a coupon code at checkout works" },
|
|
173
|
+
{ key: "remove-coupon", label: "Removing an already-applied coupon from the cart recalculates the total back down" },
|
|
124
174
|
{ key: "remove-item", label: "Removing an item from the cart works" },
|
|
175
|
+
{ key: "cart-empty-state", label: "The empty-cart state renders correctly with a clear call to action" },
|
|
176
|
+
{ key: "cart-persists-across-session", label: "Cart contents persist across a page reload and across login/logout for the same account" },
|
|
177
|
+
{ key: "cart-guest-to-login-merge", label: "A guest cart's items merge correctly into the account's cart after logging in" },
|
|
178
|
+
{ key: "cart-price-revalidated", label: "If a product's price changes after it was added to the cart, checkout uses the current price and shows the buyer the updated total" },
|
|
125
179
|
],
|
|
126
180
|
},
|
|
127
181
|
{
|
|
@@ -139,6 +193,36 @@ export const testerChecklistSeedData = [
|
|
|
139
193
|
cases: [
|
|
140
194
|
{ key: "start-conversation", label: "Starting a conversation with a seller works" },
|
|
141
195
|
{ key: "receive-reply", label: "Receiving and reading a seller's reply works" },
|
|
196
|
+
{ key: "message-realtime-update", label: "A new message appears in the recipient's thread without a manual page refresh (realtime ping-channel)", href: "/user/messages" },
|
|
197
|
+
{ key: "messages-list-thread", label: "The messages list and individual thread view both load correctly", href: "/user/messages" },
|
|
198
|
+
],
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
pageKey: "user-dashboard-extras",
|
|
202
|
+
pageLabel: "User Dashboard — Addresses, Catalogue, Settings, My Orders-by-Type",
|
|
203
|
+
cases: [
|
|
204
|
+
{ key: "addresses-crud", label: "Adding, editing, and listing delivery addresses works", href: "/user/addresses" },
|
|
205
|
+
{ key: "catalogue-crud", label: "Adding, editing, and deleting a personal catalogue item works", href: "/user/catalogue" },
|
|
206
|
+
{ key: "settings-page", label: "The user settings page loads and saves correctly", href: "/user/settings" },
|
|
207
|
+
{ key: "my-prize-draws", label: "\"My Prize Draw Entries\" shows accurate entries and outcomes", href: "/user/prize-draws" },
|
|
208
|
+
{ key: "my-digital-codes", label: "\"My Digital Codes\" shows purchased codes correctly", href: "/user/digital-codes" },
|
|
209
|
+
{ key: "my-offers", label: "\"My Offers\" list shows accurate offer history", href: "/user/offers" },
|
|
210
|
+
{ key: "my-returns", label: "Requesting and viewing a return works", href: "/user/returns" },
|
|
211
|
+
{ key: "my-reviews", label: "\"My Reviews\" shows reviews the user has left", href: "/user/reviews" },
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
pageKey: "user-dashboard-navigation",
|
|
216
|
+
pageLabel: "User Dashboard Navigation",
|
|
217
|
+
cases: [
|
|
218
|
+
{ key: "sidebar-all-links-work", label: "Every item in the user dashboard sidebar navigates to its page without a 404 or broken layout", href: "/user" },
|
|
219
|
+
{ key: "sidebar-active-highlight", label: "The sidebar correctly highlights the currently active section as you navigate between pages" },
|
|
220
|
+
{ key: "sidebar-mobile-collapse", label: "The user dashboard sidebar collapses into a mobile-friendly menu/bottom bar on small screens" },
|
|
221
|
+
{ key: "deep-link-direct-load", label: "Directly loading a deep user dashboard URL (e.g. /user/orders/view/[id]) works without first visiting the dashboard home" },
|
|
222
|
+
{ key: "become-seller-crossnav", label: "\"Become a Seller\" (buyer) vs \"Go to my Store\" (seller) shows the correct one based on account state and navigates correctly" },
|
|
223
|
+
{ key: "browser-back-forward", label: "Browser back/forward buttons move correctly between dashboard sub-pages without breaking the layout" },
|
|
224
|
+
{ key: "logged-out-redirect", label: "Opening a user dashboard URL while logged out redirects to login, then returns to the originally requested page after signing in" },
|
|
225
|
+
{ key: "breadcrumbs-accurate", label: "Breadcrumbs (where present) on nested user dashboard pages accurately reflect the current location" },
|
|
142
226
|
],
|
|
143
227
|
},
|
|
144
228
|
]),
|
|
@@ -182,6 +266,84 @@ export const testerChecklistSeedData = [
|
|
|
182
266
|
cases: [
|
|
183
267
|
{ key: "view-analytics", label: "Seller analytics dashboard shows accurate sales data", href: "/store/analytics" },
|
|
184
268
|
{ key: "view-payouts", label: "Seller payouts list shows accurate payout history", href: "/store/payouts" },
|
|
269
|
+
{ key: "payouts-checkbox-select", label: "Selecting payouts with the row checkboxes shows a working bulk action bar (Export Selected)", href: "/store/payouts" },
|
|
270
|
+
{ key: "payouts-detail-panel", label: "Opening \"View Details\" on a payout shows a side panel with status progress, transaction ID, and expected payout date" },
|
|
271
|
+
{ key: "payouts-reminder-toggle", label: "Toggling the payout reminder flag in the detail panel saves correctly" },
|
|
272
|
+
],
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
pageKey: "seller-shipping-payouts-setup",
|
|
276
|
+
pageLabel: "Seller Shipping & Payout Setup",
|
|
277
|
+
cases: [
|
|
278
|
+
{ key: "shipping-page", label: "Store shipping settings page saves correctly", href: "/store/shipping" },
|
|
279
|
+
{ key: "shipping-configs-crud", label: "Creating, editing, and listing shipping configs works", href: "/store/shipping-configs" },
|
|
280
|
+
{ key: "payout-methods-crud", label: "Adding, editing, and listing payout methods works", href: "/store/payout-methods" },
|
|
281
|
+
{ key: "payout-settings-page", label: "Payout settings page saves correctly", href: "/store/payout-settings" },
|
|
282
|
+
],
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
pageKey: "seller-listing-types",
|
|
286
|
+
pageLabel: "Seller — All Listing Types (Coupons, Bundles, Classifieds, Digital Codes, Live, Prize Draws, Art, Stickers)",
|
|
287
|
+
cases: [
|
|
288
|
+
{ key: "seller-coupons-crud", label: "Seller can create, edit, and list their own coupons", href: "/store/coupons" },
|
|
289
|
+
{ key: "seller-bundles-crud", label: "Seller can create, edit, and list bundles/grouped listings", href: "/store/bundles" },
|
|
290
|
+
{ key: "seller-classified-crud", label: "Seller can create, edit, and list classified listings", href: "/store/classified" },
|
|
291
|
+
{ key: "seller-digitalcodes-crud", label: "Seller can create, edit, and list digital-code listings", href: "/store/digital-codes" },
|
|
292
|
+
{ key: "seller-live-crud", label: "Seller can create, edit, and list live-item listings", href: "/store/live" },
|
|
293
|
+
{ key: "seller-prizedraws-crud", label: "Seller can create, edit, and list prize-draw listings, and view entries", href: "/store/prize-draws" },
|
|
294
|
+
{ key: "seller-art-stickers-crud", label: "Seller can create, edit, and list art and sticker listings", href: "/store/art" },
|
|
295
|
+
],
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
pageKey: "seller-catalog-org",
|
|
299
|
+
pageLabel: "Seller Categories, Sublisting Categories & Listing Templates",
|
|
300
|
+
cases: [
|
|
301
|
+
{ key: "seller-categories-crud", label: "Seller can create and edit their own categories", href: "/store/categories" },
|
|
302
|
+
{ key: "seller-sublisting-categories-crud", label: "Seller can create and edit sublisting categories", href: "/store/sublisting-categories" },
|
|
303
|
+
{ key: "seller-listing-templates-crud", label: "Seller can create, edit, and reuse listing templates when creating a new product", href: "/store/listing-templates" },
|
|
304
|
+
],
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
pageKey: "seller-ops-comms",
|
|
308
|
+
pageLabel: "Seller Addresses, Messages, Fulfillment & Print",
|
|
309
|
+
cases: [
|
|
310
|
+
{ key: "seller-addresses-crud", label: "Seller can add and edit store addresses", href: "/store/addresses" },
|
|
311
|
+
{ key: "seller-messages", label: "Seller messages list and thread view both work", href: "/store/messages" },
|
|
312
|
+
{ key: "seller-fulfillment-queue", label: "Seller fulfillment queue shows accurate pending items", href: "/store/fulfillment" },
|
|
313
|
+
{ key: "seller-print-center", label: "Seller print-center generates labels/invoices correctly", href: "/store/print-center" },
|
|
314
|
+
{ key: "seller-inventory-print", label: "Seller inventory print view works", href: "/store/inventory/print" },
|
|
315
|
+
],
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
pageKey: "seller-marketing-extras",
|
|
319
|
+
pageLabel: "Seller Offers, Features, Google Reviews & WhatsApp Catalog",
|
|
320
|
+
cases: [
|
|
321
|
+
{ key: "seller-offers-list", label: "Seller offers list shows accurate buyer offers", href: "/store/offers" },
|
|
322
|
+
{ key: "seller-features-crud", label: "Seller can create and edit product features", href: "/store/features" },
|
|
323
|
+
{ key: "seller-google-reviews-sync", label: "Google Reviews sync pulls in real reviews correctly", href: "/store/google-reviews" },
|
|
324
|
+
{ key: "seller-whatsapp-catalog", label: "WhatsApp catalog import/push works", href: "/store/whatsapp" },
|
|
325
|
+
{ key: "seller-reviews-response", label: "Seller can view and respond to product reviews", href: "/store/reviews" },
|
|
326
|
+
],
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
pageKey: "seller-guide",
|
|
330
|
+
pageLabel: "Seller Guide Pages",
|
|
331
|
+
cases: [
|
|
332
|
+
{ key: "seller-guide-pages", label: "The 5 seller guide pages (overview, capabilities, finance, listings, orders, settings) all load correctly", href: "/store/guide" },
|
|
333
|
+
],
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
pageKey: "store-dashboard-navigation",
|
|
337
|
+
pageLabel: "Store Dashboard Navigation",
|
|
338
|
+
cases: [
|
|
339
|
+
{ key: "store-sidebar-all-links-work", label: "Every item in the store/seller dashboard sidebar navigates to its page without a 404 or broken layout", href: "/store" },
|
|
340
|
+
{ key: "store-sidebar-active-highlight", label: "The store sidebar correctly highlights the currently active section as you navigate between pages" },
|
|
341
|
+
{ key: "store-sidebar-mobile-collapse", label: "The store dashboard sidebar collapses into a mobile-friendly menu/bottom bar on small screens" },
|
|
342
|
+
{ key: "store-deep-link-direct-load", label: "Directly loading a deep store dashboard URL (e.g. /store/products/[id]/edit) works without first visiting the dashboard home" },
|
|
343
|
+
{ key: "store-user-crossnav", label: "The store dashboard's cross-nav link back to the buyer dashboard works and lands on the correct page" },
|
|
344
|
+
{ key: "store-browser-back-forward", label: "Browser back/forward buttons move correctly between store dashboard sub-pages without breaking the layout" },
|
|
345
|
+
{ key: "store-logged-out-redirect", label: "Opening a store dashboard URL while logged out (or as a non-seller) redirects appropriately instead of erroring" },
|
|
346
|
+
{ key: "store-nav-listing-type-groups", label: "The seller nav correctly groups/labels each listing-type management area (standard, auctions, pre-orders, prize draws, bundles, classifieds, digital codes, live, art, stickers)" },
|
|
185
347
|
],
|
|
186
348
|
},
|
|
187
349
|
]),
|
|
@@ -199,8 +361,11 @@ export const testerChecklistSeedData = [
|
|
|
199
361
|
pageLabel: "Events, Raffles & Spin Wheel",
|
|
200
362
|
cases: [
|
|
201
363
|
{ key: "view-event", label: "Viewing an event detail page works", href: "/user/events" },
|
|
202
|
-
{ key: "raffle-entry", label: "Entering
|
|
203
|
-
{ key: "
|
|
364
|
+
{ key: "raffle-entry", label: "Entering an open_raffle event works" },
|
|
365
|
+
{ key: "raffle-entry-top-n-scorers", label: "Entering a top_n_scorers raffle event works and the leaderboard reflects entries" },
|
|
366
|
+
{ key: "raffle-entry-top-n-participants", label: "Entering a top_n_participants raffle event works" },
|
|
367
|
+
{ key: "spin-wheel", label: "Spinning the spin-wheel event works and shows the prize immediately (realtime)" },
|
|
368
|
+
{ key: "spin-wheel-window-blocked", label: "A second spin attempt within the same spinWindow is blocked with a clear message" },
|
|
204
369
|
],
|
|
205
370
|
},
|
|
206
371
|
{
|
|
@@ -209,6 +374,10 @@ export const testerChecklistSeedData = [
|
|
|
209
374
|
cases: [
|
|
210
375
|
{ key: "view-claimed-coupons", label: "Claimed coupons list shows accurate coupons", href: "/user/coupons" },
|
|
211
376
|
{ key: "coupon-discount-applied", label: "Coupon discount is correctly reflected in the order total" },
|
|
377
|
+
{ key: "coupon-expired-rejected", label: "Applying an expired coupon at checkout shows a specific expiry rejection message, not a generic error" },
|
|
378
|
+
{ key: "coupon-below-min-purchase", label: "Applying a coupon below its minPurchase threshold is rejected with a clear message" },
|
|
379
|
+
{ key: "coupon-not-combinable", label: "A seller-scoped coupon that isn't combinable with another seller's coupon is rejected when both are applied" },
|
|
380
|
+
{ key: "coupon-per-user-limit", label: "Re-applying a coupon after hitting its perUserLimit is rejected" },
|
|
212
381
|
],
|
|
213
382
|
},
|
|
214
383
|
{
|
|
@@ -217,6 +386,18 @@ export const testerChecklistSeedData = [
|
|
|
217
386
|
cases: [
|
|
218
387
|
{ key: "receive-notification", label: "In-app notifications appear for order/bid/message events", href: "/user/notifications" },
|
|
219
388
|
{ key: "mark-read", label: "Marking a notification as read works" },
|
|
389
|
+
{ key: "notification-channel-prefs", label: "Per-channel notification preferences (in-app / email / WhatsApp) save and are respected" },
|
|
390
|
+
{ key: "notification-type-sample", label: "A sample of notification types (order status change, bid outbid, message received, payout) each trigger correctly end-to-end" },
|
|
391
|
+
{ key: "notification-tab-filters", label: "Notification tab filters correctly narrow the list", href: "/user/notifications" },
|
|
392
|
+
],
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
pageKey: "faq-help",
|
|
396
|
+
pageLabel: "FAQ & Help",
|
|
397
|
+
cases: [
|
|
398
|
+
{ key: "faq-bottom-borders", label: "FAQ question rows show a clear bottom-border divider on the homepage and the FAQs page", href: "/faqs" },
|
|
399
|
+
{ key: "faq-mobile-count", label: "Homepage FAQ section shows a good number of questions on mobile, not just 1-2", href: "/" },
|
|
400
|
+
{ key: "tabs-mobile-dropdown", label: "Tabs on category/brand/product/event detail pages collapse into a colored dropdown on mobile once there are more than 5 tabs" },
|
|
220
401
|
],
|
|
221
402
|
},
|
|
222
403
|
]),
|
|
@@ -251,6 +432,24 @@ export const testerChecklistSeedData = [
|
|
|
251
432
|
{ key: "error-states", label: "Error states (404, form validation) look correct" },
|
|
252
433
|
],
|
|
253
434
|
},
|
|
435
|
+
{
|
|
436
|
+
pageKey: "dashboard-layout",
|
|
437
|
+
pageLabel: "Dashboards — Collapsible Sections & Mobile Tables",
|
|
438
|
+
cases: [
|
|
439
|
+
{ key: "collapsible-admin", label: "Admin dashboard sections expand/collapse and remember their state on reload", href: "/admin/dashboard" },
|
|
440
|
+
{ key: "collapsible-store", label: "Store dashboard sections expand/collapse and remember their state on reload", href: "/store" },
|
|
441
|
+
{ key: "collapsible-user", label: "User profile dashboard sections expand/collapse and remember their state on reload", href: "/user/profile" },
|
|
442
|
+
{ key: "mobile-table-cards", label: "Admin/seller listing tables show full-row cards by default on mobile, with a working switch back to table view" },
|
|
443
|
+
{ key: "view-mode-persist", label: "Switching the dashboard table/card view mode is remembered on your next visit (filters/search/sort are not)" },
|
|
444
|
+
],
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
pageKey: "footer-theme",
|
|
448
|
+
pageLabel: "Footer & Dark Mode",
|
|
449
|
+
cases: [
|
|
450
|
+
{ key: "footer-dark-mode", label: "Footer background and all link/text colors switch correctly between light and dark mode", href: "/" },
|
|
451
|
+
],
|
|
452
|
+
},
|
|
254
453
|
{
|
|
255
454
|
pageKey: "homepage-carousels",
|
|
256
455
|
pageLabel: "Homepage Carousels",
|
|
@@ -260,7 +459,220 @@ export const testerChecklistSeedData = [
|
|
|
260
459
|
{ key: "carousel-pause-on-interaction", label: "Homepage carousel auto-scroll pauses while hovering, touching, keyboard-focusing (Tab + arrow keys), or scrolling it, and resumes afterward" },
|
|
261
460
|
{ key: "carousel-arrows-work", label: "Homepage carousel prev/next arrow buttons work and wrap around at both ends" },
|
|
262
461
|
{ key: "hero-banner-loops", label: "Hero banner at the top of the homepage rotates through all slides and loops back to the first without getting stuck" },
|
|
462
|
+
{ key: "sections-showcase-render", label: "Categories showcase and brands strip sections render real seeded data" },
|
|
463
|
+
{ key: "sections-promo-render", label: "Deals/promotions, newsletter signup, and spotlight sections render correctly" },
|
|
464
|
+
{ key: "sections-live-reserve-render", label: "Live auctions and \"Reserve Before It Ships\" (pre-orders) sections show real listings" },
|
|
465
|
+
{ key: "sections-social-proof-render", label: "Verified stores, tournaments & events, and collector reviews sections render correctly" },
|
|
466
|
+
{ key: "sections-social-feed-hidden", label: "The social-feed section type is correctly hidden on the homepage since it's disabled in Site Settings" },
|
|
467
|
+
],
|
|
468
|
+
},
|
|
469
|
+
]),
|
|
470
|
+
...group("public-pages", "Public & Marketing Pages", [
|
|
471
|
+
{
|
|
472
|
+
pageKey: "core-listing-pages",
|
|
473
|
+
pageLabel: "Homepage & Core Listing Pages",
|
|
474
|
+
cases: [
|
|
475
|
+
{ key: "homepage-loads", label: "The homepage loads without errors on both desktop and mobile", href: "/" },
|
|
476
|
+
{ key: "products-listing-page", label: "The products listing page loads and paginates correctly", href: "/products" },
|
|
477
|
+
{ key: "auctions-listing-page", label: "The auctions listing page loads correctly", href: "/auctions" },
|
|
478
|
+
{ key: "preorders-listing-page", label: "The pre-orders listing page loads correctly", href: "/pre-orders" },
|
|
479
|
+
{ key: "bundles-listing-page", label: "The bundles listing page loads correctly", href: "/bundles" },
|
|
480
|
+
{ key: "categories-index", label: "The categories index page loads correctly", href: "/categories" },
|
|
481
|
+
{ key: "brands-index-detail", label: "The brands index and an individual brand detail page load correctly" },
|
|
482
|
+
],
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
pageKey: "stores-sellers-directories",
|
|
486
|
+
pageLabel: "Store & Seller Directories",
|
|
487
|
+
cases: [
|
|
488
|
+
{ key: "store-directory", label: "The store directory page loads correctly", href: "/stores" },
|
|
489
|
+
{ key: "store-detail-tabs", label: "A store detail page's auctions/bundles/coupons/pre-orders/prize-draws/reviews tabs all load correctly" },
|
|
490
|
+
{ key: "sellers-directory", label: "The sellers directory page loads correctly", href: "/sellers" },
|
|
491
|
+
{ key: "seller-detail-page", label: "An individual seller's public detail page loads correctly" },
|
|
492
|
+
{ key: "scams-registry", label: "The scams registry page and an individual scam detail page load correctly", href: "/scams" },
|
|
493
|
+
],
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
pageKey: "help-how-it-works",
|
|
497
|
+
pageLabel: "Help & How-It-Works Pages",
|
|
498
|
+
cases: [
|
|
499
|
+
{ key: "contact-page", label: "The contact page loads and the form submits correctly", href: "/contact" },
|
|
500
|
+
{ key: "help-page", label: "The help page loads correctly", href: "/help" },
|
|
501
|
+
{ key: "how-it-works-pages", label: "All 7 how-it-works pages (auctions, checkout, offers, orders, payouts, pre-orders, reviews) load correctly" },
|
|
502
|
+
{ key: "fees-page", label: "The fees page loads correctly", href: "/fees" },
|
|
503
|
+
],
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
pageKey: "legal-policy-pages",
|
|
507
|
+
pageLabel: "Legal & Policy Pages",
|
|
508
|
+
cases: [
|
|
509
|
+
{ key: "shipping-refund-policy", label: "Shipping-policy and refund-policy pages load correctly" },
|
|
510
|
+
{ key: "privacy-cookies-security", label: "Privacy, cookies, and security pages load correctly" },
|
|
511
|
+
],
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
pageKey: "auth-error-pages",
|
|
515
|
+
pageLabel: "Remaining Auth & Error Pages",
|
|
516
|
+
cases: [
|
|
517
|
+
{ key: "register-page", label: "The register page loads and account creation works", href: "/register" },
|
|
518
|
+
{ key: "forgot-reset-password-pages", label: "Forgot-password and reset-password pages both work" },
|
|
519
|
+
{ key: "verify-email-page", label: "The verify-email page correctly confirms a pending verification" },
|
|
520
|
+
{ key: "oauth-loading-redirect", label: "The OAuth-loading redirect page transitions correctly after a Google sign-in" },
|
|
521
|
+
{ key: "checkout-success-page", label: "The checkout-success page shows correct order details after payment", href: "/checkout/success" },
|
|
522
|
+
{ key: "unauthorized-404-pages", label: "Unauthorized and 404 error pages render correctly instead of crashing" },
|
|
263
523
|
],
|
|
264
524
|
},
|
|
265
525
|
]),
|
|
526
|
+
...group("admin", "Admin (Testing)", [
|
|
527
|
+
{
|
|
528
|
+
pageKey: "catalog-listings",
|
|
529
|
+
pageLabel: "Catalog & Listings",
|
|
530
|
+
cases: [
|
|
531
|
+
{ key: "brands-crud", label: "Admin can create, edit, and list brands", href: "/admin/brands" },
|
|
532
|
+
{ key: "categories-crud", label: "Admin can create, edit, and list categories", href: "/admin/categories" },
|
|
533
|
+
{ key: "products-crud", label: "Admin can create, edit, and list products", href: "/admin/products" },
|
|
534
|
+
{ key: "sublisting-categories-crud", label: "Admin can create, edit, and list sublisting categories", href: "/admin/sublisting-categories" },
|
|
535
|
+
{ key: "carousel-crud", label: "Admin can create, edit, and reorder carousel slides", href: "/admin/carousel" },
|
|
536
|
+
{ key: "sections-crud", label: "Admin can create, edit, and reorder homepage sections", href: "/admin/sections" },
|
|
537
|
+
{ key: "art-stickers-crud", label: "Admin can create, edit, and list art and sticker listings" },
|
|
538
|
+
{ key: "deals-featured-crud", label: "Admin can create, edit, and list deals and featured listings" },
|
|
539
|
+
],
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
pageKey: "coupons",
|
|
543
|
+
pageLabel: "Coupons",
|
|
544
|
+
cases: [
|
|
545
|
+
{ key: "coupon-create-percentage", label: "Admin can create a percentage-type coupon", href: "/admin/coupons/new" },
|
|
546
|
+
{ key: "coupon-create-fixed-freeship-bxgy", label: "Admin can create fixed, free_shipping, and buy_x_get_y coupon types" },
|
|
547
|
+
{ key: "coupon-per-user-limit-enforced", label: "A coupon's perUserLimit is correctly enforced at checkout after being set by admin" },
|
|
548
|
+
{ key: "coupon-min-max-discount", label: "Admin-set minPurchase and maxDiscount are correctly enforced at checkout" },
|
|
549
|
+
{ key: "coupon-scope-admin-vs-seller", label: "Admin-scope and seller-scope coupons both apply correctly, respecting scope rules" },
|
|
550
|
+
{ key: "coupon-expire-reject", label: "Expiring a coupon from the admin editor causes checkout to reject it immediately" },
|
|
551
|
+
],
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
pageKey: "events-raffles-spin",
|
|
555
|
+
pageLabel: "Events, Raffles & Spin Wheel",
|
|
556
|
+
cases: [
|
|
557
|
+
{ key: "raffle-create-open", label: "Admin can create an open_raffle event", href: "/admin/events/new" },
|
|
558
|
+
{ key: "raffle-create-top-n-scorers", label: "Admin can create a top_n_scorers raffle event" },
|
|
559
|
+
{ key: "raffle-create-top-n-participants", label: "Admin can create a top_n_participants raffle event" },
|
|
560
|
+
{ key: "raffle-draw-winner", label: "Drawing a raffle winner correctly populates raffleWinnerUserId and raffleTriggeredAt" },
|
|
561
|
+
{ key: "spin-wheel-create", label: "Admin can create a spin_wheel event with weighted prizes" },
|
|
562
|
+
{ key: "spin-wheel-limits-enforced", label: "spinMaxPerUser and spinWindowStart/End are correctly enforced once configured by admin" },
|
|
563
|
+
{ key: "event-entries-admin-view", label: "Admin event-entries list shows accurate entries", href: "/admin/event-entries" },
|
|
564
|
+
],
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
pageKey: "prize-draws-lotteries",
|
|
568
|
+
pageLabel: "Prize Draws / Lotteries",
|
|
569
|
+
cases: [
|
|
570
|
+
{ key: "prizedraw-create", label: "Admin can create a prize-draw listing", href: "/admin/prize-draws" },
|
|
571
|
+
{ key: "prizedraw-reveal-winner", label: "Admin can reveal a prize-draw winner via the crypto.randomInt reveal flow" },
|
|
572
|
+
{ key: "prizedraw-auto-refund", label: "Non-winning entries are auto-refunded correctly after a reveal" },
|
|
573
|
+
{ key: "prizedraw-lock-on-reveal", label: "Lock-on-reveal correctly blocks further entries after the draw" },
|
|
574
|
+
{ key: "prizedraw-entries-view", label: "Admin can view prize-draw / lottery entries", href: "/admin/lotteries" },
|
|
575
|
+
],
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
pageKey: "bundles",
|
|
579
|
+
pageLabel: "Bundles / Grouped Listings",
|
|
580
|
+
cases: [
|
|
581
|
+
{ key: "bundle-create", label: "Admin can create a bundle from existing products", href: "/admin/bundles" },
|
|
582
|
+
{ key: "bundle-stock-sync", label: "Bundle stock correctly syncs when a component product's stock changes" },
|
|
583
|
+
{ key: "bundle-edit-delete", label: "Admin can edit and delete a bundle" },
|
|
584
|
+
],
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
pageKey: "classifieds-digitalcodes-live",
|
|
588
|
+
pageLabel: "Classifieds, Digital Codes & Live Listings",
|
|
589
|
+
cases: [
|
|
590
|
+
{ key: "classified-create-moderate", label: "Admin can create and moderate classified listings", href: "/admin/classified" },
|
|
591
|
+
{ key: "digitalcode-create-moderate", label: "Admin can create and moderate digital-code listings", href: "/admin/digital-codes" },
|
|
592
|
+
{ key: "live-create-moderate", label: "Admin can create and moderate live-item listings", href: "/admin/live" },
|
|
593
|
+
],
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
pageKey: "blog-faqs",
|
|
597
|
+
pageLabel: "Blog & FAQs",
|
|
598
|
+
cases: [
|
|
599
|
+
{ key: "blog-create-edit-publish", label: "Admin can create, edit, and publish a blog post", href: "/admin/blog" },
|
|
600
|
+
{ key: "faq-create-edit-category", label: "Admin can create and edit an FAQ, including category assignment", href: "/admin/faqs" },
|
|
601
|
+
],
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
pageKey: "orders-fulfillment",
|
|
605
|
+
pageLabel: "Orders & Fulfillment",
|
|
606
|
+
cases: [
|
|
607
|
+
{ key: "orders-status-change", label: "Admin orders list shows accurate orders and status changes save correctly", href: "/admin/orders" },
|
|
608
|
+
{ key: "bids-admin-view", label: "Admin bids view shows accurate bid data", href: "/admin/bids" },
|
|
609
|
+
{ key: "return-requests-triage", label: "Admin can triage return requests", href: "/admin/return-requests" },
|
|
610
|
+
{ key: "fulfillment-queue-admin", label: "Admin fulfillment queue shows accurate pending items", href: "/admin/fulfillment" },
|
|
611
|
+
{ key: "shipments-crud", label: "Admin can create/edit shipments, including lots/items and projections", href: "/admin/shipments" },
|
|
612
|
+
{ key: "print-center-admin", label: "Admin print-center generates labels/invoices correctly", href: "/admin/print-center" },
|
|
613
|
+
{ key: "payouts-export-admin", label: "Admin can export payouts", href: "/admin/payouts" },
|
|
614
|
+
{ key: "bulk-action-realtime-progress", label: "A bulk admin action (e.g. bulk order status update) shows live progress via the bulk_events realtime channel and resolves without polling" },
|
|
615
|
+
],
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
pageKey: "users-trust",
|
|
619
|
+
pageLabel: "Users & Trust",
|
|
620
|
+
cases: [
|
|
621
|
+
{ key: "users-role-change", label: "Admin can change a user's role and toggle isTester/canTestAdmin", href: "/admin/users" },
|
|
622
|
+
{ key: "roles-crud", label: "Admin can create and edit custom roles", href: "/admin/roles" },
|
|
623
|
+
{ key: "sessions-revoke", label: "Admin can revoke a user's active sessions", href: "/admin/sessions" },
|
|
624
|
+
{ key: "scammers-registry-admin", label: "Admin can manage the scammer registry", href: "/admin/scammers" },
|
|
625
|
+
{ key: "banned-addresses-admin", label: "Admin can manage banned addresses", href: "/admin/banned-addresses" },
|
|
626
|
+
{ key: "address-clusters-admin", label: "Admin can view address clusters", href: "/admin/address-clusters" },
|
|
627
|
+
{ key: "moderation-queue-admin", label: "Admin moderation queue works correctly", href: "/admin/moderation" },
|
|
628
|
+
{ key: "support-tickets-triage-admin", label: "Admin can triage support tickets", href: "/admin/support-tickets" },
|
|
629
|
+
{ key: "item-requests-admin", label: "Admin can manage item requests", href: "/admin/item-requests" },
|
|
630
|
+
{ key: "reports-admin", label: "Admin reports queue works correctly", href: "/admin/reports" },
|
|
631
|
+
{ key: "payment-methods-clusters-admin", label: "Admin can manage payment methods and payment-method clusters", href: "/admin/payment-methods" },
|
|
632
|
+
{ key: "catalogue-approvals-admin", label: "Admin can approve/reject personal catalogue submissions", href: "/admin/catalogue-approvals" },
|
|
633
|
+
],
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
pageKey: "content-marketing",
|
|
637
|
+
pageLabel: "Content & Marketing",
|
|
638
|
+
cases: [
|
|
639
|
+
{ key: "ads-crud-preview", label: "Admin can create, edit, and preview ads", href: "/admin/ads" },
|
|
640
|
+
{ key: "newsletter-export-admin", label: "Admin can export the newsletter subscriber list", href: "/admin/newsletter" },
|
|
641
|
+
{ key: "contact-submissions-admin", label: "Admin can view contact form submissions", href: "/admin/contact" },
|
|
642
|
+
{ key: "media-library-admin", label: "Admin media library works correctly", href: "/admin/media" },
|
|
643
|
+
{ key: "navigation-editor-admin", label: "Admin can edit site navigation", href: "/admin/navigation" },
|
|
644
|
+
{ key: "settings-navigation-actions", label: "Admin settings/navigation and settings/actions pages save correctly" },
|
|
645
|
+
{ key: "features-feature-flags-admin", label: "Admin can manage product features and feature flags" },
|
|
646
|
+
],
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
pageKey: "site-system",
|
|
650
|
+
pageLabel: "Site & System",
|
|
651
|
+
cases: [
|
|
652
|
+
{ key: "site-settings-admin", label: "Admin site settings page saves correctly", href: "/admin/site" },
|
|
653
|
+
{ key: "admin-dashboard-widgets", label: "Admin dashboard widgets show accurate data", href: "/admin/dashboard" },
|
|
654
|
+
{ key: "analytics-admin", label: "Admin analytics dashboard shows accurate data", href: "/admin/analytics" },
|
|
655
|
+
{ key: "maintenance-pages-admin", label: "The maintenance pages (analysis, client-errors, cloud-logs, function-errors, payment-rollbacks, server-errors + detail) all load correctly", href: "/admin/maintenance" },
|
|
656
|
+
{ key: "copilot-admin", label: "Admin copilot page works correctly", href: "/admin/copilot" },
|
|
657
|
+
{ key: "team-admin", label: "Admin team page works correctly", href: "/admin/team" },
|
|
658
|
+
{ key: "guide-pages-admin", label: "The 8 admin guide pages all load correctly", href: "/admin/guide" },
|
|
659
|
+
{ key: "tester-checklist-crud-admin", label: "Admin can create, edit, and toggle adminOnly on tester checklist items", href: "/admin/tester-checklist" },
|
|
660
|
+
{ key: "tester-feedback-report-export", label: "Admin tester-feedback report shows Yes/No analytics grouped correctly and the Download Report export works", href: "/admin/tester-feedback" },
|
|
661
|
+
],
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
pageKey: "buyer-data-admin",
|
|
665
|
+
pageLabel: "Buyer-Data Admin Views",
|
|
666
|
+
cases: [
|
|
667
|
+
{ key: "carts-admin-view", label: "Admin carts view shows accurate data", href: "/admin/carts" },
|
|
668
|
+
{ key: "wishlists-admin-view", label: "Admin wishlists view shows accurate data", href: "/admin/wishlists" },
|
|
669
|
+
{ key: "history-admin-view", label: "Admin history view shows accurate data", href: "/admin/history" },
|
|
670
|
+
{ key: "notifications-admin-view", label: "Admin notifications and admin-notifications views show accurate data" },
|
|
671
|
+
{ key: "reviews-admin-view", label: "Admin reviews view shows accurate data", href: "/admin/reviews" },
|
|
672
|
+
{ key: "store-addresses-admin", label: "Admin store-addresses view shows accurate data", href: "/admin/store-addresses" },
|
|
673
|
+
{ key: "addresses-crud-admin", label: "Admin can create and edit addresses", href: "/admin/addresses" },
|
|
674
|
+
{ key: "stores-admin-view", label: "Admin stores view shows accurate data", href: "/admin/stores" },
|
|
675
|
+
],
|
|
676
|
+
},
|
|
677
|
+
], { adminOnly: true }),
|
|
266
678
|
];
|
package/dist/index.d.ts
CHANGED
|
@@ -2448,7 +2448,7 @@ export { computeCheckoutFees, computePayoutDeduction, computeCodHandlingFee, cal
|
|
|
2448
2448
|
export type { FeeCommissionRates, CheckoutFees, PayoutDeduction, CodHandlingFeeRates, GstBreakdown, } from "./_internal/shared/fees/calculator";
|
|
2449
2449
|
export { checkEmiEligibility, computeEmiSchedule } from "./_internal/shared/features/emi/schedule";
|
|
2450
2450
|
export type { EmiSettings, EmiIneligibleReason, EmiEligibility, EmiInstallmentPlan, EmiScheduleResult, } from "./_internal/shared/features/emi/schedule";
|
|
2451
|
-
export { isAdminUser, isSellerUser, isModeratorUser, isEmployeeUser, isBuyerUser, } from "./features/auth/role-predicates";
|
|
2451
|
+
export { isAdminUser, isSellerUser, isModeratorUser, isEmployeeUser, isBuyerUser, isEffectiveAdminUser, } from "./features/auth/role-predicates";
|
|
2452
2452
|
export { sanitizeProductForPublic, sanitizeProductsForPublic } from "./features/products/index";
|
|
2453
2453
|
export { productAdminColumns } from "./features/products/index";
|
|
2454
2454
|
export { productImageSchema } from "./features/products/index";
|
package/dist/index.js
CHANGED
|
@@ -4494,7 +4494,7 @@ export { computeCheckoutFees, computePayoutDeduction, computeCodHandlingFee, cal
|
|
|
4494
4494
|
// EMI eligibility + schedule computation (pure, client-safe — used for checkout quotes).
|
|
4495
4495
|
export { checkEmiEligibility, computeEmiSchedule } from "./_internal/shared/features/emi/schedule";
|
|
4496
4496
|
// User-role predicates â€" SB-UNI-E 2026-05-13.
|
|
4497
|
-
export { isAdminUser, isSellerUser, isModeratorUser, isEmployeeUser, isBuyerUser, } from "./features/auth/role-predicates";
|
|
4497
|
+
export { isAdminUser, isSellerUser, isModeratorUser, isEmployeeUser, isBuyerUser, isEffectiveAdminUser, } from "./features/auth/role-predicates";
|
|
4498
4498
|
// [SERVER-ONLY]-Safe in browser but intended for server routes.
|
|
4499
4499
|
// sanitizeProductForPublic - Strip sellerId/sellerName/sellerEmail/ownerId before returning a product in a public response.
|
|
4500
4500
|
export { sanitizeProductForPublic, sanitizeProductsForPublic } from "./features/products/index";
|