@mohasinac/appkit 4.9.1 → 4.9.2
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.
|
@@ -207,6 +207,12 @@ const rawTesterChecklistItems = [
|
|
|
207
207
|
{ key: "classified-contact-flow", label: "A classified listing shows a contact-seller flow with deliberately no checkout/buy button" },
|
|
208
208
|
{ key: "digitalcode-delivery", label: "Purchasing a digital-code listing delivers the code to the buyer post-purchase" },
|
|
209
209
|
{ key: "live-item-detail", label: "A live-item listing's detail page shows the livestream link correctly" },
|
|
210
|
+
{
|
|
211
|
+
key: "live-item-video-mandatory",
|
|
212
|
+
label: "Creating a live-item listing (species: animals/plants) without a video is rejected with a clear error; a live listing WITH a video plays correctly in the gallery's video slide and its poster thumbnail is watermarked",
|
|
213
|
+
description: "Verify the block on both the admin product editor and the seller \"List a live item\" form. Then verify playback against the tester-sandbox fixture \"Test Live Item — Golden Retriever Puppy\" (live-tester-sandbox-1) — its video is a real dog clip (previously a broken YouTube link that never played); confirm it actually plays in theater mode and the thumbnail carries the site watermark.",
|
|
214
|
+
href: "/store/live/new",
|
|
215
|
+
},
|
|
210
216
|
],
|
|
211
217
|
},
|
|
212
218
|
{
|
|
@@ -224,7 +230,11 @@ const rawTesterChecklistItems = [
|
|
|
224
230
|
{ key: "shipping-address-edit", label: "Editing an existing shipping address from checkout works" },
|
|
225
231
|
{ key: "shipping-method-selection", label: "Selecting a shipping method/provider at checkout recalculates the shipping fee correctly" },
|
|
226
232
|
{ 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" },
|
|
227
|
-
{
|
|
233
|
+
{
|
|
234
|
+
key: "checkout-otp-highvalue",
|
|
235
|
+
label: "Carts ≥ the admin-configured high-value OTP threshold (Site Settings → Shipping → \"High-value checkout OTP threshold\", default ₹5,000) prompt a \"Verify this order\" email OTP right before payment (except COD); carts below the threshold check out directly with no OTP step at all",
|
|
236
|
+
description: "Root-caused 2026-08-20 — the OTP email send used to be fire-and-forget, so a Resend/API failure silently left the buyer stuck with no code and no error. Sending now surfaces a real error if the email genuinely fails to send, and the \"already sent, retry in N minutes\" rate-limit message is a clear sentence instead of a raw error code. Place a real order ≥ the threshold and confirm the code actually arrives by email (check spam too) — report the exact error text if it still doesn't.",
|
|
237
|
+
},
|
|
228
238
|
{ key: "payment-method-selection", label: "Choosing between COD, UPI/manual, and Razorpay (when enabled) at checkout works" },
|
|
229
239
|
{ key: "payment-window-countdown", label: "Manual-payment orders show a 15-minute countdown timer on the payment page" },
|
|
230
240
|
{ key: "payment-proof-upload", label: "Uploading manual payment proof (screenshot, UTR, mark-as-paid + agreement checkboxes) works" },
|
|
@@ -334,6 +344,17 @@ const rawTesterChecklistItems = [
|
|
|
334
344
|
label: "The mobile bottom navigation bar shows a Cart tab with a live item-count badge; Wishlist is no longer a bottom-tab slot but is still reachable from the header",
|
|
335
345
|
description: "Wishlist was intentionally removed only from the bottom tab bar, not from the header/app-bar or main navigation — confirm the header wishlist icon is unaffected.",
|
|
336
346
|
},
|
|
347
|
+
{
|
|
348
|
+
key: "cart-badge-matches-cart-page",
|
|
349
|
+
label: "After adding an item to the cart, the item actually appears when you open the cart page — not just an updated badge count with an empty cart",
|
|
350
|
+
description: "Root-caused 2026-08-20 — a background sync manager that replays queued cart/wishlist writes to the server was built but never mounted anywhere in the app, so the cart badge (read from a local queue) updated instantly while the server-backed cart page (read from Firestore) never received the write and showed empty. Add an item, then navigate to /cart (not just glance at the badge) and confirm it's really there — check on both a fresh session and after a page reload.",
|
|
351
|
+
href: "/cart",
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
key: "cart-mobile-no-overflow",
|
|
355
|
+
label: "On mobile, cart item cards stay fully within the screen width per seller group — no horizontal overflow/clipping — and a floating checkout bar (styled like the bulk-action bar, sitting above the bottom nav) shows the total and a Checkout button, with enough bottom margin that the last cart item is never hidden behind it",
|
|
356
|
+
href: "/cart",
|
|
357
|
+
},
|
|
337
358
|
],
|
|
338
359
|
},
|
|
339
360
|
{
|
|
@@ -398,6 +419,12 @@ const rawTesterChecklistItems = [
|
|
|
398
419
|
{ key: "browser-back-forward", label: "Browser back/forward buttons move correctly between dashboard sub-pages without breaking the layout" },
|
|
399
420
|
{ 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" },
|
|
400
421
|
{ key: "breadcrumbs-accurate", label: "Breadcrumbs (where present) on nested user dashboard pages accurately reflect the current location" },
|
|
422
|
+
{
|
|
423
|
+
key: "sidebar-logout-button",
|
|
424
|
+
label: "The user dashboard sidebar itself (not just the header profile dropdown) has a visible \"Log out\" action at the bottom, and clicking it signs out and redirects to login",
|
|
425
|
+
description: "Previously the only logout affordance while on a dashboard page was the header profile dropdown — the sidebar had none. Check on both mobile (drawer) and desktop (persistent rail).",
|
|
426
|
+
href: "/user",
|
|
427
|
+
},
|
|
401
428
|
],
|
|
402
429
|
},
|
|
403
430
|
]),
|
|
@@ -536,6 +563,11 @@ const rawTesterChecklistItems = [
|
|
|
536
563
|
{ key: "store-browser-back-forward", label: "Browser back/forward buttons move correctly between store dashboard sub-pages without breaking the layout" },
|
|
537
564
|
{ key: "store-logged-out-redirect", label: "Opening a store dashboard URL while logged out (or as a non-seller) redirects appropriately instead of erroring" },
|
|
538
565
|
{ 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)" },
|
|
566
|
+
{
|
|
567
|
+
key: "store-sidebar-logout-button",
|
|
568
|
+
label: "The store dashboard sidebar has a visible \"Log out\" action at the bottom (not just the header profile dropdown), and clicking it signs out and redirects to login",
|
|
569
|
+
href: "/store",
|
|
570
|
+
},
|
|
539
571
|
],
|
|
540
572
|
},
|
|
541
573
|
]),
|
|
@@ -669,6 +701,11 @@ const rawTesterChecklistItems = [
|
|
|
669
701
|
{ key: "card-row-heights-aligned", label: "Product/auction/pre-order/event cards in the same row are the same height, with their action button (Reserve now, Place bid, View details, etc.) aligned along a common bottom edge even when one card's description is longer than another's" },
|
|
670
702
|
{ key: "image-watermark-subtle", label: "Product and listing images show a small, subtle watermark (not oversized or fully opaque, doesn't obscure the image)" },
|
|
671
703
|
{ key: "section-cta-buttons-visible", label: "Homepage section \"View all →\" / \"Go to…\" buttons use a solid primary-colored fill so they're clearly identifiable as clickable CTAs, not a plain white/outline box that blends into the page" },
|
|
704
|
+
{
|
|
705
|
+
key: "mobile-search-bar-proportions",
|
|
706
|
+
label: "On mobile, the global header search bar's resource-type dropdown (Products/Auctions/etc.) is a compact, capped width and the text input takes up most of the remaining space — not an oversized dropdown squeezing the input down to a sliver",
|
|
707
|
+
href: "/",
|
|
708
|
+
},
|
|
672
709
|
],
|
|
673
710
|
},
|
|
674
711
|
{
|
|
@@ -752,6 +789,12 @@ const rawTesterChecklistItems = [
|
|
|
752
789
|
description: "Verify \"Beyblade Burst\" shows 2 items (matching the 2 real products inside it when browsed), not \"0 items\". If any category shows 0 despite having published products, run `npm run categories:backfill-metrics` to recompute the counters.",
|
|
753
790
|
href: "/categories",
|
|
754
791
|
},
|
|
792
|
+
{
|
|
793
|
+
key: "parent-category-includes-children",
|
|
794
|
+
label: "Visiting a PARENT category's page shows products filed under its child categories too (not just products tagged with the parent's own id), and its \"N products\" count is the sum of its own products plus every child category's",
|
|
795
|
+
description: "Verify against \"Spinning Tops\" (category-spinning-tops, the root over Original/Metal Fight/Burst/X) — its product listing and count should include every Beyblade product across all 4 generations, not show empty or only the root's own (normally zero) direct products. Note: this rollup applies to page 1 / default sort only — changing sort or paging within the tab may still narrow back to the parent's own products (a known follow-up, not yet fixed).",
|
|
796
|
+
href: "/categories",
|
|
797
|
+
},
|
|
755
798
|
{
|
|
756
799
|
key: "category-brand-related-sections",
|
|
757
800
|
label: "A category detail page shows a \"Related Categories\" section (other categories sharing the same root) and a brand detail page shows a \"Related Brands\" section, each with real items",
|
|
@@ -937,6 +980,12 @@ const rawTesterChecklistItems = [
|
|
|
937
980
|
pageLabel: "Users & Trust",
|
|
938
981
|
cases: [
|
|
939
982
|
{ key: "users-role-change", label: "Admin can change a user's role and toggle isTester/canTestAdmin", href: "/admin/users" },
|
|
983
|
+
{
|
|
984
|
+
key: "admin-delete-user-complete",
|
|
985
|
+
label: "Deleting a user from the admin Users editor removes their Firestore profile, their active sessions, AND their Firebase Auth record — not just the Firestore doc",
|
|
986
|
+
description: "Verify the deleted account can no longer log in at all (Auth record gone), not just that it's missing from the admin list.",
|
|
987
|
+
href: "/admin/users",
|
|
988
|
+
},
|
|
940
989
|
{ key: "roles-crud", label: "Admin can create and edit custom roles", href: "/admin/roles" },
|
|
941
990
|
{ key: "sessions-revoke", label: "Admin can revoke a user's active sessions", href: "/admin/sessions" },
|
|
942
991
|
{ key: "scammers-registry-admin", label: "Admin can manage the scammer registry", href: "/admin/scammers" },
|
|
@@ -976,6 +1025,17 @@ const rawTesterChecklistItems = [
|
|
|
976
1025
|
{ key: "guide-pages-admin", label: "The 8 admin guide pages all load correctly", href: "/admin/guide" },
|
|
977
1026
|
{ key: "tester-checklist-crud-admin", label: "Admin can create, edit, and toggle adminOnly on tester checklist items", href: "/admin/tester-checklist" },
|
|
978
1027
|
{ 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" },
|
|
1028
|
+
{
|
|
1029
|
+
key: "admin-sidebar-logout-button",
|
|
1030
|
+
label: "The admin dashboard sidebar has a visible \"Log out\" action at the bottom (not just the header profile dropdown), and clicking it signs out and redirects to login",
|
|
1031
|
+
href: "/admin/dashboard",
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
key: "dashboard-tables-colors-avatars-icons",
|
|
1035
|
+
label: "Admin/store/user dashboard tables and list/grid cards show color-coded status badges (green/amber/red/blue by meaning, not one flat color for every status) and a circular avatar/icon per row (a real photo when the item has one — user avatar, store logo, product image — otherwise a resource-type icon), instead of plain black-on-white text rows",
|
|
1036
|
+
description: "Spot-check a few different dashboards — Users (avatar photos), Stores (logos), Products (thumbnails), and a resource with no natural photo like Orders/Payouts/Coupons (should still show a resource icon, not a blank row).",
|
|
1037
|
+
href: "/admin/users",
|
|
1038
|
+
},
|
|
979
1039
|
],
|
|
980
1040
|
},
|
|
981
1041
|
{
|