@mohasinac/appkit 4.34.0 → 4.35.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/_internal/client/features/lottery/LotteryAdminEditView.js +32 -2
- package/dist/_internal/server/features/seo/sitemap.js +2 -2
- package/dist/_internal/server/functions/scheduled.d.ts +1 -2
- package/dist/_internal/server/functions/scheduled.js +8 -9
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +15 -0
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +15 -6
- package/dist/_internal/server/jobs/handlers/index.d.ts +0 -1
- package/dist/_internal/server/jobs/handlers/index.js +0 -1
- package/dist/features/auth/schemas/firestore.d.ts +1 -0
- package/dist/features/tester/components/TesterChecklistStepRow.d.ts +9 -1
- package/dist/features/tester/components/TesterChecklistStepRow.js +31 -2
- package/dist/features/tester/components/TesterHubView.js +8 -0
- package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +16 -1
- package/dist/features/tester/repository/tester-checklist-item.repository.js +32 -6
- package/dist/features/tester/schemas/firestore.d.ts +109 -0
- package/dist/features/tester/schemas/firestore.js +14 -0
- package/dist/features/tester/seed-data/_money-flows.d.ts +23 -0
- package/dist/features/tester/seed-data/_money-flows.js +430 -0
- package/dist/features/tester/seed-data/authored/_types.d.ts +33 -0
- package/dist/features/tester/seed-data/authored/_types.js +35 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +207 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +298 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +33 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +138 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +36 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +75 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +72 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +54 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +39 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +226 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +82 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +177 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.js +97 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +232 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +306 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +158 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +78 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +261 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +151 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.js +214 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +160 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +104 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +350 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +105 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.js +590 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +235 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +569 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.js +417 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +653 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +533 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +379 -0
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__cart.js +1171 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +140 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +257 -0
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__offers.js +1111 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +252 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +387 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.js +152 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +242 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.js +113 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +283 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +167 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +90 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +344 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +53 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +76 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +93 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +149 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +121 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +207 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +318 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +65 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +147 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +332 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +53 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +52 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +141 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +95 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +191 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +158 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +106 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +88 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +204 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +301 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +407 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +214 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +275 -0
- package/dist/features/tester/seed-data/authored/index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/index.js +237 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +102 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +50 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +66 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +115 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +136 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.js +69 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +263 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +102 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +234 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +126 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +255 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +59 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +88 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +51 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +35 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +94 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +107 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +285 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +326 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +136 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +128 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +167 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +117 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +88 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +151 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +105 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +33 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +347 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +166 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +89 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +195 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +180 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +164 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +116 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +111 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.js +91 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +122 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +105 -0
- package/dist/features/tester/seed-data/events-tester-seed-data.js +77 -5
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +23 -9
- package/dist/features/tester/seed-data/products-tester-seed-data.js +65 -49
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +744 -1
- package/dist/features/tester/seed-data/tester-window.d.ts +25 -0
- package/dist/features/tester/seed-data/tester-window.js +66 -0
- package/dist/seed/carousel-slides-seed-data.js +1 -1
- package/dist/seed/products-standard-seed-data.js +2 -2
- package/dist/seed/reviews-seed-data.js +6 -1
- package/dist/seed/users-seed-data.js +107 -4
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +6 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the buying/image-tile-layout page.
|
|
3
|
+
* WHAT: 7 case(s), keyed by full checklist id.
|
|
4
|
+
*
|
|
5
|
+
* Written by hand, case by case, against the label each one states. There is no
|
|
6
|
+
* generator: the authoring scripts were deleted once it was clear they were
|
|
7
|
+
* scaffolding around work that is simply writing.
|
|
8
|
+
*
|
|
9
|
+
* 🛑 EVERY CASE HERE IS ONE DEFECT SEEN FROM A DIFFERENT SURFACE. A fill-style
|
|
10
|
+
* image resolves its percentages against its parent, so a shrink-to-fit wrapper
|
|
11
|
+
* between a button and its image collapses BOTH to nothing — the tile renders as
|
|
12
|
+
* an empty bordered box while the button still looks and clicks correctly. Twelve
|
|
13
|
+
* surfaces broke at once and none of the call sites had changed.
|
|
14
|
+
*
|
|
15
|
+
* Two things void the fix from outside the primitive, and both are checked here:
|
|
16
|
+
* a bare display utility on the button — which un-layered important styles beat,
|
|
17
|
+
* so the button stops being a flex container — and two or more in-flow children
|
|
18
|
+
* without a column direction, which lays the tile out beside its caption at a
|
|
19
|
+
* fraction of its width.
|
|
20
|
+
*
|
|
21
|
+
* @tag domain:tester
|
|
22
|
+
* @tag layer:seed
|
|
23
|
+
* @tag pattern:none
|
|
24
|
+
* @tag access:server-only
|
|
25
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
26
|
+
* @tag sideEffects:none
|
|
27
|
+
*/
|
|
28
|
+
export const authored = {
|
|
29
|
+
"checklist-buying-image-tile-layout-bundle-member-thumbnails": {
|
|
30
|
+
roles: ["guest"],
|
|
31
|
+
startPage: "/bundles/bundle-tester-sandbox",
|
|
32
|
+
steps: [
|
|
33
|
+
"Sign in as tester@letitrip.in / TempPass123! so sandbox content is visible.",
|
|
34
|
+
"Open /bundles/bundle-tester-sandbox.",
|
|
35
|
+
"Look at the member collage and count the tiles.",
|
|
36
|
+
"Check each tile shows its member's photograph rather than an empty bordered box.",
|
|
37
|
+
"Compare the tiles' widths against one another.",
|
|
38
|
+
"Hard-reload with Ctrl+Shift+R and look again.",
|
|
39
|
+
],
|
|
40
|
+
inputs: { bundleId: "bundle-tester-sandbox", memberCount: 2 },
|
|
41
|
+
expectedBehaviour: "Each member tile renders its image at its intended size. This collage is one of the twelve surfaces that collapsed at once when a wrapper element appeared between a button and its fill-style image — and it is the surface that stayed broken longest, because a bare display utility on the button voided the primitive's own fix from the call site.",
|
|
42
|
+
expectedUiState: "Two tiles, each showing its member's photo, both the same width. An empty bordered box where a photo should be is the collapse; a tile at a fraction of its neighbour's width is the row-direction failure.",
|
|
43
|
+
expectedData: { blankTiles: 0 },
|
|
44
|
+
endResult: "Read-only; nothing persists.",
|
|
45
|
+
},
|
|
46
|
+
"checklist-buying-image-tile-layout-bundle-badge-position": {
|
|
47
|
+
roles: ["guest"],
|
|
48
|
+
startPage: "/bundles",
|
|
49
|
+
steps: [
|
|
50
|
+
"Open /bundles in a private window at 1280 pixels wide.",
|
|
51
|
+
"Look at each bundle card's discount badge and where it sits on the card.",
|
|
52
|
+
"Check the badge does not cover the bundle's title or price.",
|
|
53
|
+
"Read the badge's text against its background.",
|
|
54
|
+
"Resize to 390 pixels and look at the badges again.",
|
|
55
|
+
"Switch to dark mode and read them once more.",
|
|
56
|
+
],
|
|
57
|
+
inputs: { desktopWidth: 1280, mobileWidth: 390 },
|
|
58
|
+
expectedBehaviour: "The badge overlays the card image, so it takes the solid pairing — a fill with its own on-solid ink — rather than a pale tint. A tint over an arbitrary product photograph is unreadable regardless of theme, and a literal white ink against a theme-inverting background is invisible in exactly one of the two.",
|
|
59
|
+
expectedUiState: "Every badge is readable at both widths and in both themes, and none covers the title or price. A visible badge shape with unreadable text inside it is the failure.",
|
|
60
|
+
endResult: "Read-only; return the site to light mode and restore the width.",
|
|
61
|
+
},
|
|
62
|
+
"checklist-buying-image-tile-layout-bundle-tile-opens-lightbox": {
|
|
63
|
+
roles: ["guest"],
|
|
64
|
+
startPage: "/bundles/bundle-tester-sandbox",
|
|
65
|
+
steps: [
|
|
66
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
67
|
+
"Open /bundles/bundle-tester-sandbox and click a member tile in the collage.",
|
|
68
|
+
"Read what opens.",
|
|
69
|
+
"If a lightbox opens, use its next and previous controls and read what changes.",
|
|
70
|
+
"Close it and check the page is unchanged behind it.",
|
|
71
|
+
"Click a different tile and confirm it opens that member rather than the first.",
|
|
72
|
+
],
|
|
73
|
+
expectedBehaviour: "A tile is a real control with a destination — either the member's own page or a lightbox on that member. A tile bound to stale state opens the first member whichever one is clicked, which looks like a working lightbox until a second tile is tried.",
|
|
74
|
+
expectedUiState: "Clicking a tile opens something, and clicking a different tile opens that member. An inert tile, or one that always opens the same member, are both failures.",
|
|
75
|
+
endResult: "Read-only; close without acting.",
|
|
76
|
+
},
|
|
77
|
+
"checklist-buying-image-tile-layout-prizedraw-collage-stacked": {
|
|
78
|
+
roles: ["guest"],
|
|
79
|
+
startPage: "/prize-draws/prizedraw-beyblade-mystery-box",
|
|
80
|
+
steps: [
|
|
81
|
+
"Open /prize-draws/prizedraw-beyblade-mystery-box in a private window.",
|
|
82
|
+
"Find the prize collage and count its tiles.",
|
|
83
|
+
"For each tile, check whether its image sits ABOVE its caption or beside it.",
|
|
84
|
+
"Compare each tile's width against its neighbours.",
|
|
85
|
+
"Resize to 390 pixels and check the arrangement again.",
|
|
86
|
+
"Count the tiles against the number of photographed prizes.",
|
|
87
|
+
],
|
|
88
|
+
expectedBehaviour: "A tile stacks its image above its caption. Where a control holds two or more in-flow children and no column direction, the content wrapper inherits a row direction and lays the image out BESIDE the caption at a fraction of its intended width — the tile still renders, which is why it reads as a design choice rather than a bug.",
|
|
89
|
+
expectedUiState: "Every tile shows its image above its caption, all at the same width, at both viewport sizes. An image sitting beside its caption and squeezed narrow is the row-direction failure.",
|
|
90
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
91
|
+
},
|
|
92
|
+
"checklist-buying-image-tile-layout-concern-card-icon-above-label": {
|
|
93
|
+
roles: ["guest"],
|
|
94
|
+
startPage: "/",
|
|
95
|
+
steps: [
|
|
96
|
+
"Open / in a private window at 1280 pixels wide.",
|
|
97
|
+
"Find the concern or trust cards and look at each one.",
|
|
98
|
+
"Check each card's icon sits above its label rather than beside it.",
|
|
99
|
+
"Compare the icon's size against the card's own height.",
|
|
100
|
+
"Resize to 390 pixels and check the arrangement holds.",
|
|
101
|
+
"Switch to dark mode and check the icons are still visible.",
|
|
102
|
+
],
|
|
103
|
+
inputs: { desktopWidth: 1280, mobileWidth: 390 },
|
|
104
|
+
expectedBehaviour: "These cards carry an explicitly-sized icon box, which is what kept them from collapsing entirely when the wrapper defect hit — but an explicit size does not fix the direction, so they still laid the icon out beside the label. Sizing and direction are two separate failures and this card had only one of them.",
|
|
105
|
+
expectedUiState: "Each card shows its icon above its label at both widths, with the icon proportionate to the card. An icon beside its label, or one at the platform font's fallback size, are different failures and should be reported as such.",
|
|
106
|
+
endResult: "Read-only; return to light mode and restore the width.",
|
|
107
|
+
},
|
|
108
|
+
"checklist-buying-image-tile-layout-media-picker-existing-grid": {
|
|
109
|
+
roles: ["seller"],
|
|
110
|
+
startPage: "/store/products/new",
|
|
111
|
+
steps: [
|
|
112
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
113
|
+
"Open /store/products/new and open the media picker.",
|
|
114
|
+
"Switch to its existing-files grid.",
|
|
115
|
+
"Check every tile shows its image rather than an empty bordered box.",
|
|
116
|
+
"Check each tile's caption sits below its image rather than beside it.",
|
|
117
|
+
"Compare the tiles' widths against one another.",
|
|
118
|
+
"Select one and confirm the right file is chosen.",
|
|
119
|
+
],
|
|
120
|
+
expectedBehaviour: "The existing-files grid is the same clickable-image-tile shape as the bundle collage and the prize-draw collage, inside a form rather than on a public page. It carries both failure modes at once: the tiles can collapse to nothing, and their captions can end up beside the image instead of below it.",
|
|
121
|
+
expectedUiState: "Every tile shows its image with its caption beneath, all at the same width. Selecting a tile chooses the file it shows rather than another.",
|
|
122
|
+
expectedData: { blankTiles: 0 },
|
|
123
|
+
endResult: "Leave the editor without saving.",
|
|
124
|
+
},
|
|
125
|
+
"checklist-buying-image-tile-layout-icon-button-spacing": {
|
|
126
|
+
roles: ["guest", "buyer"],
|
|
127
|
+
startPage: "/products/product-beyblade-original-dranzer-s",
|
|
128
|
+
steps: [
|
|
129
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
130
|
+
"Open /products/product-beyblade-original-dranzer-s.",
|
|
131
|
+
"Find every button carrying both an icon and a label and check there is a visible gap between them.",
|
|
132
|
+
"Compare each glyph's size against its own button's height.",
|
|
133
|
+
"Find an icon-only control and check it is a true square rather than an ellipse.",
|
|
134
|
+
"Check no control uses a text character in place of an icon.",
|
|
135
|
+
],
|
|
136
|
+
expectedBehaviour: "A button's gap and alignment reach its real children rather than stopping at the wrapper, and a glyph's size derives from the button's size rather than being fixed. An icon-only control belongs in the square-boxed primitive: the ordinary button's small size sets a minimum height that beats a caller's height utility, so a round icon button rendered that way comes out an ellipse.",
|
|
137
|
+
expectedUiState: "Every icon-and-label button shows a gap. Glyphs scale with their buttons rather than all being one size. Icon-only controls are square. No control uses a heart, star or similar text character as its icon — a text character cannot be sized by any utility and renders at the platform font fallback.",
|
|
138
|
+
endResult: "Read-only; nothing persists.",
|
|
139
|
+
},
|
|
140
|
+
};
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the buying/my-orders checklist page.
|
|
3
|
+
* WHAT: 14 case(s), keyed by full checklist id.
|
|
4
|
+
*
|
|
5
|
+
* Written by hand, case by case, against the label each one states. There is no
|
|
6
|
+
* generator: the authoring scripts were deleted once it was clear they were
|
|
7
|
+
* scaffolding around work that is simply writing.
|
|
8
|
+
*
|
|
9
|
+
* 🛑 THE MANUAL-PAYMENT FLOW WAS COMPLETELY DEAD FROM THE BUYER'S SIDE and nothing
|
|
10
|
+
* errored. The order adapter mapped the payment STATUS and no other payment field,
|
|
11
|
+
* so the payment page's own gate — is this a manual payment method — was undefined
|
|
12
|
+
* for every order, and every buyer who reached it was told politely that the order
|
|
13
|
+
* did not require a manual payment. Five cases here exist because of that, and
|
|
14
|
+
* each reads a field that adapter has to carry.
|
|
15
|
+
*
|
|
16
|
+
* 🛑 `orderType` CANNOT BE FILTERED WITH AN EQUALITY ON "standard". Orders written
|
|
17
|
+
* before the field existed carry no value, and a Firestore equality excludes every
|
|
18
|
+
* document missing the field — so the Normal tab must filter in memory or it hides
|
|
19
|
+
* every legacy order.
|
|
20
|
+
*
|
|
21
|
+
* @tag domain:tester
|
|
22
|
+
* @tag layer:seed
|
|
23
|
+
* @tag pattern:none
|
|
24
|
+
* @tag access:server-only
|
|
25
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
26
|
+
* @tag sideEffects:none
|
|
27
|
+
*/
|
|
28
|
+
export const authored = {
|
|
29
|
+
"checklist-buying-my-orders-orders-item-summary": {
|
|
30
|
+
roles: ["buyer"],
|
|
31
|
+
startPage: "/user/orders",
|
|
32
|
+
steps: [
|
|
33
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
34
|
+
"Open /user/orders and read every row's primary label.",
|
|
35
|
+
"Check each names the ITEM rather than only an order identifier.",
|
|
36
|
+
"Find a multi-item order and read how its row summarises the contents.",
|
|
37
|
+
"Check each row shows a thumbnail of the item.",
|
|
38
|
+
"Read where the order id appears and how prominent it is.",
|
|
39
|
+
],
|
|
40
|
+
expectedBehaviour: "Every order carries its item title and image denormalised onto the document so a list row needs no extra fetch. A row reading 'Order {id}' threw that away — the data was present the whole time, and the buyer is left opening each order to find out what it was.",
|
|
41
|
+
expectedUiState: "Rows name the product with a thumbnail, a multi-item order shows a '+N more' style suffix, and the order id is present but de-emphasised rather than being the whole label.",
|
|
42
|
+
endResult: "Read-only; nothing persists.",
|
|
43
|
+
},
|
|
44
|
+
"checklist-buying-my-orders-orders-view-details-button": {
|
|
45
|
+
roles: ["buyer"],
|
|
46
|
+
startPage: "/user/orders",
|
|
47
|
+
steps: [
|
|
48
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
49
|
+
"Open /user/orders and click a row's body away from any control.",
|
|
50
|
+
"Read what opens.",
|
|
51
|
+
"Go back and use the explicit view-details control on the same row.",
|
|
52
|
+
"Check both reach the same order.",
|
|
53
|
+
"Read whether the row also offers actions, and whether at least one is a view rather than a mutation.",
|
|
54
|
+
],
|
|
55
|
+
expectedBehaviour: "The row and its view control reach the same order. A row offering only mutations lets a buyer act on an order they were never able to read, which is the dead-end shape this whole listing family exists to close.",
|
|
56
|
+
expectedUiState: "Both routes open the same order detail. A view affordance exists alongside any actions. An inert row is the failure.",
|
|
57
|
+
endResult: "Read-only; close without acting.",
|
|
58
|
+
},
|
|
59
|
+
"checklist-buying-my-orders-orders-type-tabs-actually-filter": {
|
|
60
|
+
roles: ["buyer"],
|
|
61
|
+
startPage: "/user/orders",
|
|
62
|
+
steps: [
|
|
63
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
64
|
+
"Open /user/orders and read every tab offered.",
|
|
65
|
+
"Note the unfiltered order count on the All tab.",
|
|
66
|
+
"Open the Auction wins tab and read the count and the rows.",
|
|
67
|
+
"Open the Offer wins tab and read the count and the rows.",
|
|
68
|
+
"Open the Normal tab and read the count and the rows.",
|
|
69
|
+
"Check the three tabs' counts sum to the All count.",
|
|
70
|
+
],
|
|
71
|
+
expectedBehaviour: "Each tab filters by the lane that produced the order — recorded on the order at creation — and together they partition the whole set. A tab returning the full list is not filtering; one returning nothing while orders of that kind exist is filtering on the wrong value.",
|
|
72
|
+
expectedUiState: "Auction wins holds only auction-won orders, Offer wins only offer-accepted ones, and the three counts sum to the All count. A sum that does not reconcile means orders are falling through every tab.",
|
|
73
|
+
expectedData: { tabsPartitionAll: true },
|
|
74
|
+
endResult: "Read-only; nothing persists beyond the URL.",
|
|
75
|
+
},
|
|
76
|
+
"checklist-buying-my-orders-orders-normal-tab-includes-legacy": {
|
|
77
|
+
roles: ["buyer"],
|
|
78
|
+
startPage: "/user/orders",
|
|
79
|
+
steps: [
|
|
80
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
81
|
+
"Open /user/orders on the All tab and note the total count.",
|
|
82
|
+
"Note the count on the Auction wins and Offer wins tabs.",
|
|
83
|
+
"Subtract those two from the total to get the expected Normal count.",
|
|
84
|
+
"Open the Normal tab and read its actual count.",
|
|
85
|
+
"Compare the two numbers.",
|
|
86
|
+
"Look for the OLDEST order in the account and check it appears on the Normal tab.",
|
|
87
|
+
],
|
|
88
|
+
expectedBehaviour: "The Normal tab must filter IN MEMORY rather than with an equality on the standard lane value. Orders written before that field existed carry no value at all, and a Firestore equality excludes every document missing the field — so an equality-filtered Normal tab silently hides every legacy order while looking like it works.",
|
|
89
|
+
expectedUiState: "The Normal count equals the total minus the two lane tabs, and the account's oldest order is present. A Normal count lower than that arithmetic is the legacy-exclusion failure, and the missing orders are the oldest ones.",
|
|
90
|
+
expectedData: { normalTabIncludesLegacy: true },
|
|
91
|
+
endResult: "Read-only. The arithmetic is the assertion — a Normal tab holding plausible rows proves nothing without it.",
|
|
92
|
+
},
|
|
93
|
+
"checklist-buying-my-orders-dashboard-recent-orders-linked": {
|
|
94
|
+
roles: ["buyer"],
|
|
95
|
+
startPage: "/user",
|
|
96
|
+
steps: [
|
|
97
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
98
|
+
"Open /user and find the recent-orders area on the dashboard.",
|
|
99
|
+
"Read each entry and check it names the item rather than only an identifier.",
|
|
100
|
+
"Click one entry and read where it lands.",
|
|
101
|
+
"Go back and click the heading or see-all control.",
|
|
102
|
+
"Check it lands on /user/orders rather than nowhere.",
|
|
103
|
+
],
|
|
104
|
+
expectedBehaviour: "Dashboard entries link to their orders and the section links to the full list. A summary section whose rows are inert is a dead end on the page a buyer lands on first.",
|
|
105
|
+
expectedUiState: "Each entry names its item and opens that order. The see-all control reaches /user/orders. An entry that does nothing on click is the failure.",
|
|
106
|
+
endResult: "Read-only; nothing persists.",
|
|
107
|
+
},
|
|
108
|
+
"checklist-buying-my-orders-order-item-thumbnails-render": {
|
|
109
|
+
roles: ["buyer"],
|
|
110
|
+
startPage: "/user/orders",
|
|
111
|
+
steps: [
|
|
112
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
113
|
+
"Open /user/orders and look at every row's thumbnail.",
|
|
114
|
+
"Check each shows a photograph rather than an empty box or a placeholder icon.",
|
|
115
|
+
"Hard-reload with Ctrl+Shift+R and look again.",
|
|
116
|
+
"Open an order's detail and look at each item's thumbnail there.",
|
|
117
|
+
"Compare a thumbnail against that product's own page image.",
|
|
118
|
+
],
|
|
119
|
+
expectedBehaviour: "Order items carry an image snapshot so the row renders without fetching the product. That field was absent from the order item type for a long time, so real orders carried no per-item image at all — which renders as a placeholder rather than as an error.",
|
|
120
|
+
expectedUiState: "Every row and every order-detail item shows its own photograph on both loads, and it matches the product. An empty box or a uniform placeholder across all rows is the missing-field failure.",
|
|
121
|
+
expectedData: { placeholderThumbnails: 0 },
|
|
122
|
+
endResult: "Read-only; nothing persists.",
|
|
123
|
+
},
|
|
124
|
+
"checklist-buying-my-orders-my-orders-search-filter-sort": {
|
|
125
|
+
roles: ["buyer"],
|
|
126
|
+
startPage: "/user/orders",
|
|
127
|
+
steps: [
|
|
128
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
129
|
+
"Open /user/orders and note the unfiltered count.",
|
|
130
|
+
"Read the scope tabs offered and select each, reading the counts.",
|
|
131
|
+
"Read every status filter and select each, noting any that returns nothing.",
|
|
132
|
+
"Search for a word from a visible order's item title and read the results.",
|
|
133
|
+
"Search zzzznope and read the count.",
|
|
134
|
+
"Change the sort and check the row order changes.",
|
|
135
|
+
],
|
|
136
|
+
inputs: { nonsenseQuery: "zzzznope" },
|
|
137
|
+
expectedBehaviour: "Search, filters and sort all narrow the list. The scope tabs read Active / Closed / All, and a return-requested order belongs to ACTIVE — it is an action item, not a finished order. The nonsense query is the control that proves the search filters rather than decorating.",
|
|
138
|
+
expectedUiState: "Scope tabs and status filters each change the rows. The real search term narrows; 'zzzznope' returns zero rather than the full list. The sort visibly reorders. A return-requested order appears under Active.",
|
|
139
|
+
expectedData: { nonsenseResultCount: 0 },
|
|
140
|
+
endResult: "Read-only; nothing persists beyond the URL.",
|
|
141
|
+
},
|
|
142
|
+
"checklist-buying-my-orders-order-tracking-timeline": {
|
|
143
|
+
roles: ["buyer"],
|
|
144
|
+
startPage: "/user/orders",
|
|
145
|
+
steps: [
|
|
146
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
147
|
+
"Open /user/orders and open a SHIPPED order.",
|
|
148
|
+
"Open its tracking view.",
|
|
149
|
+
"Read every step in the timeline and the date against each.",
|
|
150
|
+
"Check steps the order has not reached are shown as upcoming rather than complete.",
|
|
151
|
+
"Check any step with no recorded date shows an em-dash rather than a date.",
|
|
152
|
+
"Read the carrier and tracking number and compare them against the order detail.",
|
|
153
|
+
],
|
|
154
|
+
expectedBehaviour: "The timeline is built from the order's own per-status dates. A status with no recorded date renders an em-dash — never the current time and never a proxy field such as the record's last-updated value, which means 'last write of any kind' rather than 'when this happened'. A fabricated date cannot be told from a real one afterwards.",
|
|
155
|
+
expectedUiState: "Reached steps show real dates, unreached steps show as upcoming, and any missing date is an em-dash. The carrier and tracking number match the order detail. Every step carrying a plausible date on an order that has only just shipped is the fabrication failure.",
|
|
156
|
+
endResult: "Read-only; nothing persists.",
|
|
157
|
+
},
|
|
158
|
+
"checklist-buying-my-orders-manual-payment-panel-on-order-detail": {
|
|
159
|
+
roles: ["buyer"],
|
|
160
|
+
startPage: "/user/orders",
|
|
161
|
+
steps: [
|
|
162
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
163
|
+
"Open /user/orders and open an order paid by cash or UPI awaiting payment.",
|
|
164
|
+
"Read the order detail for a manual-payment panel.",
|
|
165
|
+
"Check it names the payment method, the amount and the deadline.",
|
|
166
|
+
"Find the control that opens the payment page.",
|
|
167
|
+
"Click it and read where it lands.",
|
|
168
|
+
],
|
|
169
|
+
expectedBehaviour: "The panel renders because the order carries its payment method, deadline and review outcome — not just its payment status. The adapter mapped only the status for a long time, so every buyer-facing gate on those fields saw undefined and the whole manual-payment flow was unreachable.",
|
|
170
|
+
expectedUiState: "The panel is present on a manual-payment order, naming the method, amount and deadline, with a working control into the payment page. A missing panel on a cash or UPI order is the adapter failure.",
|
|
171
|
+
endResult: "Read-only; upload nothing yet.",
|
|
172
|
+
},
|
|
173
|
+
"checklist-buying-my-orders-manual-payment-page-renders-upi-and-countdown": {
|
|
174
|
+
roles: ["buyer"],
|
|
175
|
+
startPage: "/user/orders",
|
|
176
|
+
steps: [
|
|
177
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
178
|
+
"Open a manual-payment order and follow the control to its payment page.",
|
|
179
|
+
"Read whether the page renders the upload form or tells you no manual payment is required.",
|
|
180
|
+
"Read the UPI identifier displayed and the amount.",
|
|
181
|
+
"Read the countdown and note the time remaining.",
|
|
182
|
+
"Wait ten seconds and read the countdown again.",
|
|
183
|
+
"Reload the page and check the countdown continues rather than resetting.",
|
|
184
|
+
],
|
|
185
|
+
inputs: { paymentWindowMinutes: 15 },
|
|
186
|
+
expectedBehaviour: "The page gates on the order's payment method, so it must render the form rather than the polite refusal that every buyer saw while that field was undefined. The countdown runs against the stored deadline, so a reload continues it rather than restarting the window.",
|
|
187
|
+
expectedUiState: "The upload form, the UPI identifier and the amount all render. The countdown decreases over ten seconds and continues from where it was after a reload. A message saying this order does not require manual payment is the exact failure this case exists for.",
|
|
188
|
+
endResult: "Read-only. A reset countdown after reload would mean the window restarts on every visit.",
|
|
189
|
+
},
|
|
190
|
+
"checklist-buying-my-orders-manual-payment-awaiting-review-state": {
|
|
191
|
+
roles: ["buyer"],
|
|
192
|
+
startPage: "/user/orders",
|
|
193
|
+
steps: [
|
|
194
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
195
|
+
"Open a manual-payment order's payment page and upload public/test-media/sample-image.png as proof.",
|
|
196
|
+
"Type QATXN552310 as the payment reference and submit.",
|
|
197
|
+
"Read what the page shows immediately afterwards.",
|
|
198
|
+
"RELOAD and read the page again.",
|
|
199
|
+
"Open the order detail and read its payment state.",
|
|
200
|
+
"Check the upload form is no longer inviting another submission.",
|
|
201
|
+
],
|
|
202
|
+
inputs: { proof: "public/test-media/sample-image.png", reference: "QATXN552310" },
|
|
203
|
+
expectedBehaviour: "Once a proof is submitted the order reads as awaiting verification on both the payment page and the order detail — the state is derived from whether a proof exists and whether a decision has been made, so both surfaces compute the same answer.",
|
|
204
|
+
expectedUiState: "After submitting, the page reports the proof received and stops offering a fresh upload. The order detail reads as awaiting verification. Both agree after the reload.",
|
|
205
|
+
endResult: "The order is awaiting verification and is the fixture the admin verify case reads.",
|
|
206
|
+
},
|
|
207
|
+
"checklist-buying-my-orders-manual-payment-reupload-note-visible-to-buyer": {
|
|
208
|
+
roles: ["buyer", "admin"],
|
|
209
|
+
startPage: "/user/orders",
|
|
210
|
+
steps: [
|
|
211
|
+
"Sign in as admin@letitrip.in / TempPass123! and request a proof re-upload on that order, with the note 'QA Note reupload — the reference is unreadable.'.",
|
|
212
|
+
"Sign out and sign in as tester@letitrip.in / TempPass123!.",
|
|
213
|
+
"Open /user/orders and read that order's row and its detail.",
|
|
214
|
+
"Read whether the admin's note is shown to the buyer.",
|
|
215
|
+
"Open the payment page and read whether the upload form is active again and what the deadline shows.",
|
|
216
|
+
"Upload a fresh proof and submit.",
|
|
217
|
+
"Read the order's state afterwards.",
|
|
218
|
+
],
|
|
219
|
+
inputs: { note: "QA Note reupload — the reference is unreadable." },
|
|
220
|
+
expectedBehaviour: "The admin's note reaches the buyer — a re-upload request with no visible reason leaves them resubmitting the same thing. The corrected upload must CLEAR the requested state, or the order is invisible to both the auto-approve sweep and the admin queue and stalls indefinitely.",
|
|
221
|
+
expectedUiState: "The note is readable on the buyer's order. The payment page is active with an extended deadline. After the fresh upload the order reads as awaiting verification rather than staying in the requested state.",
|
|
222
|
+
expectedData: { stateAfterReupload: "awaiting verification" },
|
|
223
|
+
endResult: "The order is back in the review queue with the buyer's second proof.",
|
|
224
|
+
},
|
|
225
|
+
"checklist-buying-my-orders-manual-payment-rejected-state": {
|
|
226
|
+
roles: ["buyer"],
|
|
227
|
+
startPage: "/user/orders",
|
|
228
|
+
steps: [
|
|
229
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
230
|
+
"Open /user/orders and find an order whose payment was rejected.",
|
|
231
|
+
"Read its row and its detail.",
|
|
232
|
+
"Check the rejection is stated plainly rather than the order simply reading as cancelled.",
|
|
233
|
+
"Read whether the reason given is visible to the buyer.",
|
|
234
|
+
"Check no upload form is offered any more.",
|
|
235
|
+
"Read whether the items are back in stock on their product pages.",
|
|
236
|
+
],
|
|
237
|
+
expectedBehaviour: "A rejected payment cancels the order and restores its stock, and the buyer is told which happened. It also triggers a temporary ban cascade against the account — so the buyer seeing only 'cancelled' with no explanation is left unable to connect that to the restriction they then hit.",
|
|
238
|
+
expectedUiState: "The order states that the payment was rejected, with whatever reason was recorded, and offers no further upload. The items read as in stock again on their product pages.",
|
|
239
|
+
endResult: "Read-only. If no rejected order exists, answer null rather than creating one — rejecting as fraud bans a real account for seven days.",
|
|
240
|
+
},
|
|
241
|
+
"checklist-buying-my-orders-order-lifecycle-emails-arrive": {
|
|
242
|
+
roles: ["buyer"],
|
|
243
|
+
startPage: "/user/orders",
|
|
244
|
+
steps: [
|
|
245
|
+
"Sign in as an account whose inbox you can open and confirm order emails are enabled in its notification settings.",
|
|
246
|
+
"Place an order and note the time.",
|
|
247
|
+
"Open the inbox and wait up to five minutes for a confirmation email.",
|
|
248
|
+
"Read its From name, its subject and its body.",
|
|
249
|
+
"Have the seller mark the order shipped, then check the inbox again.",
|
|
250
|
+
"Click a link inside each email and read where it lands.",
|
|
251
|
+
"Compare each email's figures against the order itself.",
|
|
252
|
+
],
|
|
253
|
+
expectedBehaviour: "Each lifecycle transition sends its own templated email. The dispatcher fills in the template and the destination from the notification's type and related record rather than requiring each caller to supply them — which is why almost no caller used to, and every type shipped the same bare one-line body.",
|
|
254
|
+
expectedUiState: "Confirmation and shipped emails both arrive within a few minutes, from a sender whose display name reads 'LetItRip' exactly. Each has a real templated body rather than a single unstyled sentence, its figures match the order, and its links open the live site.",
|
|
255
|
+
endResult: "Both emails exist. An in-app notification with no email, while email is enabled for that type, is the failure this case separates from a delivery problem.",
|
|
256
|
+
},
|
|
257
|
+
};
|