@mohasinac/appkit 4.34.1 → 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/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/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/tester-checklist-seed-data.js +744 -1
- 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/package.json +1 -1
- package/scripts/seed-cli.mjs +6 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the design-ux/sticky-cta-bar page.
|
|
3
|
+
* WHAT: 17 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
|
+
* 🛑 THIS BAR IS ONE INSTANCE SHARED BY ~25 CALL SITES, and the claim on it is a
|
|
10
|
+
* STACK, not last-writer-wins. That is why the per-listing-type cases matter: the
|
|
11
|
+
* bar a page publishes is the bar every other surface would have published, and
|
|
12
|
+
* a type whose capabilities were never wired publishes the default one.
|
|
13
|
+
*
|
|
14
|
+
* The absence cases — ended auction, closed prize draw, non-listing page — are
|
|
15
|
+
* the ones a happy-path sweep skips, and they are where a wrong bar does real
|
|
16
|
+
* damage: a Buy Now on a lot that has already sold.
|
|
17
|
+
*
|
|
18
|
+
* @tag domain:tester
|
|
19
|
+
* @tag layer:seed
|
|
20
|
+
* @tag pattern:none
|
|
21
|
+
* @tag access:server-only
|
|
22
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
23
|
+
* @tag sideEffects:none
|
|
24
|
+
*/
|
|
25
|
+
export const authored = {
|
|
26
|
+
"checklist-design-ux-sticky-cta-bar-desktop-hidden-at-top": {
|
|
27
|
+
roles: ["guest"],
|
|
28
|
+
startPage: "/products/product-beyblade-original-dranzer-s",
|
|
29
|
+
steps: [
|
|
30
|
+
"Open /products/product-beyblade-original-dranzer-s in a private window at 1280 pixels wide.",
|
|
31
|
+
"Without scrolling, look at the bottom of the viewport.",
|
|
32
|
+
"Read the purchase panel in the page's own content.",
|
|
33
|
+
"Scroll down 100 pixels and look at the bottom again.",
|
|
34
|
+
],
|
|
35
|
+
inputs: { viewportWidth: 1280 },
|
|
36
|
+
expectedBehaviour: "At the top of the page the real purchase panel is on screen, so a sticky duplicate of it would be redundant chrome covering content. The bar earns its place only once the original has scrolled away.",
|
|
37
|
+
expectedUiState: "No sticky bar at the bottom of the viewport before scrolling, and none after 100 pixels. The in-page purchase panel is visible and usable.",
|
|
38
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
39
|
+
},
|
|
40
|
+
"checklist-design-ux-sticky-cta-bar-desktop-appears-on-scroll": {
|
|
41
|
+
roles: ["guest"],
|
|
42
|
+
startPage: "/products/product-beyblade-original-dranzer-s",
|
|
43
|
+
steps: [
|
|
44
|
+
"Open /products/product-beyblade-original-dranzer-s in a private window at 1280 pixels wide.",
|
|
45
|
+
"Scroll down slowly and note the point at which the sticky bar appears.",
|
|
46
|
+
"Read what the bar contains — the price, the title, the actions.",
|
|
47
|
+
"Compare its actions against the in-page purchase panel's actions.",
|
|
48
|
+
],
|
|
49
|
+
inputs: { viewportWidth: 1280, revealScrollPx: 400 },
|
|
50
|
+
expectedBehaviour: "The bar appears around 400 pixels of scroll and carries the same actions as the panel it stands in for. Offering fewer actions than the panel makes the bar a downgrade the user has to scroll back up to escape.",
|
|
51
|
+
expectedUiState: "The bar appears once past roughly 400 pixels, showing the price and the same purchase actions as the in-page panel. It does not appear and disappear repeatedly while scrolling steadily in one direction.",
|
|
52
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
53
|
+
},
|
|
54
|
+
"checklist-design-ux-sticky-cta-bar-desktop-hides-scrolling-back-up": {
|
|
55
|
+
roles: ["guest"],
|
|
56
|
+
startPage: "/products/product-beyblade-original-dranzer-s",
|
|
57
|
+
steps: [
|
|
58
|
+
"Open /products/product-beyblade-original-dranzer-s in a private window at 1280 pixels wide.",
|
|
59
|
+
"Scroll down until the sticky bar appears.",
|
|
60
|
+
"Scroll back up to the very top of the page.",
|
|
61
|
+
"Look at the bottom of the viewport.",
|
|
62
|
+
"Scroll down and up again twice, watching the bar each time.",
|
|
63
|
+
],
|
|
64
|
+
inputs: { viewportWidth: 1280 },
|
|
65
|
+
expectedBehaviour: "Returning to the top hides the bar again, because the real panel is back on screen. The transition must be symmetric — a bar that appears on the way down and stays forever is a bar with one threshold instead of two.",
|
|
66
|
+
expectedUiState: "The bar is gone at the top of the page and returns on the way down, repeatably. It does not flicker on and off around the threshold while scrolling steadily.",
|
|
67
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
68
|
+
},
|
|
69
|
+
"checklist-design-ux-sticky-cta-bar-desktop-buttons-work": {
|
|
70
|
+
roles: ["buyer"],
|
|
71
|
+
startPage: "/products/product-tester-standard-1",
|
|
72
|
+
steps: [
|
|
73
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
74
|
+
"Open /products/product-tester-standard-1 at 1280 pixels wide and scroll until the sticky bar appears.",
|
|
75
|
+
"Click 'Add to Cart' in the STICKY BAR, not in the page panel.",
|
|
76
|
+
"Watch the label while the request runs.",
|
|
77
|
+
"Open /cart and read what is in it.",
|
|
78
|
+
"Go back, scroll to the bar again, and click the wishlist control in the bar.",
|
|
79
|
+
],
|
|
80
|
+
inputs: { productId: "product-tester-standard-1", quantity: 1 },
|
|
81
|
+
expectedBehaviour: "The bar's controls are the real controls, not decorative copies — each performs the same action as its counterpart in the page panel and reflects its own loading state.",
|
|
82
|
+
expectedUiState: "The label changes while the request runs and the cart badge increases. /cart holds 'Test Gadget — Standard Listing #1'. The wishlist control in the bar also acts rather than doing nothing.",
|
|
83
|
+
endResult: "Empty the cart and the wishlist afterwards so later cases start clean.",
|
|
84
|
+
},
|
|
85
|
+
"checklist-design-ux-sticky-cta-bar-desktop-not-covering-footer": {
|
|
86
|
+
roles: ["guest"],
|
|
87
|
+
startPage: "/products/product-beyblade-original-dranzer-s",
|
|
88
|
+
steps: [
|
|
89
|
+
"Open /products/product-beyblade-original-dranzer-s in a private window at 1280 pixels wide.",
|
|
90
|
+
"Scroll all the way to the bottom of the page.",
|
|
91
|
+
"Read the footer's last row — the copyright line and the bottom links.",
|
|
92
|
+
"Check whether the sticky bar covers any of it.",
|
|
93
|
+
"Try to click a link in that last footer row.",
|
|
94
|
+
],
|
|
95
|
+
inputs: { viewportWidth: 1280 },
|
|
96
|
+
expectedBehaviour: "The page reserves space for the bar at its END, on the element that actually sits last. Putting that reservation on the main content instead only gaps main-from-footer, leaving the footer's own final strip underneath the bar and unreadable.",
|
|
97
|
+
expectedUiState: "The footer's copyright line and bottom links are fully visible above the bar and every link in that row is clickable. A footer whose last row is half-hidden is the exact failure.",
|
|
98
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
99
|
+
},
|
|
100
|
+
"checklist-design-ux-sticky-cta-bar-mobile-unchanged": {
|
|
101
|
+
roles: ["guest"],
|
|
102
|
+
startPage: "/products/product-beyblade-original-dranzer-s",
|
|
103
|
+
steps: [
|
|
104
|
+
"Resize the browser window to 390 pixels wide and open the product page in a private window.",
|
|
105
|
+
"Without scrolling, look at the bottom of the viewport.",
|
|
106
|
+
"Scroll down and watch the bottom.",
|
|
107
|
+
"Count the fixed bars stacked at the bottom and name each.",
|
|
108
|
+
"Scroll to the footer and check nothing is hidden behind them.",
|
|
109
|
+
],
|
|
110
|
+
inputs: { mobileWidth: 390 },
|
|
111
|
+
expectedBehaviour: "On mobile the purchase bar is present from the start rather than scroll-revealed — the panel is below the fold immediately. It shares the bottom edge with the tab bar, and the two are measured as separate tiers so neither has to know the other's height.",
|
|
112
|
+
expectedUiState: "The purchase bar is visible without scrolling, sitting above the bottom tab bar with no overlap. Exactly two fixed bars, not three, and not one on top of the other.",
|
|
113
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
114
|
+
},
|
|
115
|
+
"checklist-design-ux-sticky-cta-bar-auction-countdown-in-bar": {
|
|
116
|
+
roles: ["guest"],
|
|
117
|
+
startPage: "/auctions/auction-beyblade-x-shark-edge",
|
|
118
|
+
steps: [
|
|
119
|
+
"Open /auctions/auction-beyblade-x-shark-edge in a private window at 1280 pixels wide.",
|
|
120
|
+
"Scroll until the sticky bar appears.",
|
|
121
|
+
"Read the bar's contents — the current bid, the countdown and the action.",
|
|
122
|
+
"Wait 3 seconds and read the countdown again.",
|
|
123
|
+
"Check the bar offers bidding and not 'Add to Cart'.",
|
|
124
|
+
],
|
|
125
|
+
expectedBehaviour: "An auction's bar carries the live countdown and a bidding action, because auctions are capability-blocked from the cart. A bar offering Add to Cart here means it is publishing the default rather than the type's own.",
|
|
126
|
+
expectedUiState: "The bar shows the current bid and a ticking countdown whose seconds figure is lower after 3 seconds. Its action is 'Place a bid' or Buy Now — never 'Add to Cart'. A frozen countdown is a fail even though the number looks right.",
|
|
127
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
128
|
+
},
|
|
129
|
+
"checklist-design-ux-sticky-cta-bar-ended-auction-no-bar": {
|
|
130
|
+
roles: ["guest"],
|
|
131
|
+
startPage: "/auctions/auction-beyblade-burst-lord-spryzen-ended-unsold",
|
|
132
|
+
steps: [
|
|
133
|
+
"Open /auctions/auction-beyblade-burst-lord-spryzen-ended-unsold in a private window at 1280 pixels wide.",
|
|
134
|
+
"Scroll down past 400 pixels.",
|
|
135
|
+
"Look at the bottom of the viewport.",
|
|
136
|
+
"Scroll to the bottom of the page and look again.",
|
|
137
|
+
"Open /auctions/auction-beyblade-metal-diablo-nemesis, an ended-and-sold auction, and repeat.",
|
|
138
|
+
],
|
|
139
|
+
expectedBehaviour: "An ended auction offers no purchase bar at all — there is nothing to bid on. This is the absence case a happy-path sweep skips, and the one where a wrong bar does real damage: a bid control on a lot that has already closed.",
|
|
140
|
+
expectedUiState: "No sticky purchase bar appears on either ended auction at any scroll position. A bar that appears with a disabled control is better than an active one but is still a fail — the correct answer is no bar.",
|
|
141
|
+
expectedData: { barPresent: false },
|
|
142
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
143
|
+
},
|
|
144
|
+
"checklist-design-ux-sticky-cta-bar-preorder-bar": {
|
|
145
|
+
roles: ["guest"],
|
|
146
|
+
startPage: "/pre-orders/preorder-beyblade-x-bx-08-wave",
|
|
147
|
+
steps: [
|
|
148
|
+
"Open /pre-orders/preorder-beyblade-x-bx-08-wave in a private window at 1280 pixels wide.",
|
|
149
|
+
"Scroll until the sticky bar appears.",
|
|
150
|
+
"Read its action label and any note about the deposit.",
|
|
151
|
+
"Compare the label against the in-page purchase panel's.",
|
|
152
|
+
"Open /pre-orders/preorder-beyblade-x-bx-11-sold-out and scroll the same way.",
|
|
153
|
+
],
|
|
154
|
+
expectedBehaviour: "A pre-order's bar uses its own vocabulary — reserving against a deposit rather than buying outright — and a sold-out pre-order offers no purchase action. Generic 'Add to Cart' copy here misdescribes what the buyer is agreeing to.",
|
|
155
|
+
expectedUiState: "The live pre-order's bar reads as a reservation and mentions the deposit rather than the full price alone, matching the in-page panel. The sold-out one shows no purchase bar, or one with no active purchase control.",
|
|
156
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
157
|
+
},
|
|
158
|
+
"checklist-design-ux-sticky-cta-bar-prize-draw-bar-label": {
|
|
159
|
+
roles: ["guest"],
|
|
160
|
+
startPage: "/prize-draws/prizedraw-beyblade-mystery-box",
|
|
161
|
+
steps: [
|
|
162
|
+
"Open /prize-draws/prizedraw-beyblade-mystery-box in a private window at 1280 pixels wide.",
|
|
163
|
+
"Scroll until the sticky bar appears.",
|
|
164
|
+
"Read its action label and its price.",
|
|
165
|
+
"Check whether the price is described as an entry rather than as the item's price.",
|
|
166
|
+
"Compare the label against the in-page purchase panel's.",
|
|
167
|
+
],
|
|
168
|
+
expectedBehaviour: "A prize draw sells ENTRIES, not the prize, and the bar has to say so. A label reading 'Buy now' beside a price is a misrepresentation of what the money buys, which matters more here than anywhere else on this page.",
|
|
169
|
+
expectedUiState: "The bar names an entry and its per-entry price, matching the in-page panel. It does not read as buying the prize outright.",
|
|
170
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
171
|
+
},
|
|
172
|
+
"checklist-design-ux-sticky-cta-bar-closed-prize-draw-no-bar": {
|
|
173
|
+
roles: ["guest"],
|
|
174
|
+
startPage: "/prize-draws/prizedraw-beyblade-metal-closed-revealed",
|
|
175
|
+
steps: [
|
|
176
|
+
"Open /prize-draws/prizedraw-beyblade-metal-closed-revealed in a private window at 1280 pixels wide.",
|
|
177
|
+
"Scroll down past 400 pixels and look at the bottom of the viewport.",
|
|
178
|
+
"Scroll to the bottom of the page and look again.",
|
|
179
|
+
"Open /prize-draws/prizedraw-beyblade-x-vault-closed-pending-reveal and repeat.",
|
|
180
|
+
],
|
|
181
|
+
expectedBehaviour: "A closed draw offers no entry bar. The second fixture is the important one: it is closed while stock REMAINS, so a bar driven by remaining quantity alone would still offer entries into a draw that has already closed.",
|
|
182
|
+
expectedUiState: "Neither closed draw shows a purchase bar at any scroll position — including the one that still has entries left in stock.",
|
|
183
|
+
expectedData: { barPresent: false },
|
|
184
|
+
endResult: "Read-only; restore the window width afterwards. Checking only the sold-out fixture would pass while the closed-with-stock case is broken.",
|
|
185
|
+
},
|
|
186
|
+
"checklist-design-ux-sticky-cta-bar-classified-bar-no-cart": {
|
|
187
|
+
roles: ["guest"],
|
|
188
|
+
startPage: "/classified/classified-beyblade-stadium-set",
|
|
189
|
+
steps: [
|
|
190
|
+
"Open /classified/classified-beyblade-stadium-set in a private window at 1280 pixels wide.",
|
|
191
|
+
"Scroll until the sticky bar appears.",
|
|
192
|
+
"Read every control in the bar.",
|
|
193
|
+
"Check for any 'Add to Cart' or 'Buy Now'.",
|
|
194
|
+
"Open /classified/classified-beyblade-burst-collection-bengaluru and read its bar's controls.",
|
|
195
|
+
],
|
|
196
|
+
expectedBehaviour: "Classifieds are capability-blocked from the cart entirely, so the bar offers the offer path — Make Offer or Request to Buy — and nothing else. The two fixtures use different actions, which is what proves the bar reads the listing rather than the type alone.",
|
|
197
|
+
expectedUiState: "The first bar offers 'Make Offer', the second 'Request to Buy'. Neither shows 'Add to Cart' or 'Buy Now'. An empty bar is as much a failure as a wrong one.",
|
|
198
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
199
|
+
},
|
|
200
|
+
"checklist-design-ux-sticky-cta-bar-digital-code-bar": {
|
|
201
|
+
roles: ["guest"],
|
|
202
|
+
startPage: "/digital-codes/digitalcode-beyblade-x-app-starter-pack",
|
|
203
|
+
steps: [
|
|
204
|
+
"Open /digital-codes/digitalcode-beyblade-x-app-starter-pack in a private window at 1280 pixels wide.",
|
|
205
|
+
"Scroll until the sticky bar appears and read its controls and price.",
|
|
206
|
+
"Open /digital-codes/digitalcode-beyblade-burst-app-sold-out and scroll the same way.",
|
|
207
|
+
"Open /digital-codes/digitalcode-beyblade-x-app-launch-codes-depleted and scroll the same way.",
|
|
208
|
+
"Compare all three bars.",
|
|
209
|
+
],
|
|
210
|
+
expectedBehaviour: "A digital code is cart-capable, so its bar offers purchase — but only while codes remain. The third fixture is the interesting one: its stock is non-zero while its code pool is empty, and availability for this type reads the NESTED pool count rather than the stock figure.",
|
|
211
|
+
expectedUiState: "The available listing shows a working purchase bar. The sold-out one does not. The depleted-pool one does NOT either, despite showing stock — a purchase bar there means the availability check read the wrong field.",
|
|
212
|
+
expectedData: { depletedPoolBarPresent: false },
|
|
213
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
214
|
+
},
|
|
215
|
+
"checklist-design-ux-sticky-cta-bar-live-item-bar": {
|
|
216
|
+
roles: ["guest"],
|
|
217
|
+
startPage: "/live/live-golden-retriever-puppy",
|
|
218
|
+
steps: [
|
|
219
|
+
"Open /live/live-golden-retriever-puppy in a private window at 1280 pixels wide.",
|
|
220
|
+
"Scroll until the sticky bar appears and read its controls.",
|
|
221
|
+
"Read whether it mentions any delivery or jurisdiction restriction.",
|
|
222
|
+
"Open /live/live-bonsai-juniper-5yr-sold, a sold fixture, and scroll the same way.",
|
|
223
|
+
],
|
|
224
|
+
expectedBehaviour: "A live item is cart-capable but gated on vendor verification and a jurisdiction check, so its bar has to carry that condition rather than presenting an unconditional purchase. The sold fixture offers no bar at all.",
|
|
225
|
+
expectedUiState: "The available listing's bar offers a purchase path and references the delivery restriction rather than hiding it until checkout. The sold one shows no purchase bar.",
|
|
226
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
227
|
+
},
|
|
228
|
+
"checklist-design-ux-sticky-cta-bar-bar-not-overlapping-content": {
|
|
229
|
+
roles: ["guest"],
|
|
230
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
231
|
+
steps: [
|
|
232
|
+
"Open /products/product-beyblade-burst-valkyrie in a private window at 1280 pixels wide.",
|
|
233
|
+
"Scroll until the sticky bar appears.",
|
|
234
|
+
"Scroll slowly to the bottom, watching what passes behind the bar.",
|
|
235
|
+
"Stop where the reviews section ends and read its last row in full.",
|
|
236
|
+
"Read the last row of each related-items carousel the same way.",
|
|
237
|
+
"Resize to 390 pixels and repeat the scroll to the bottom.",
|
|
238
|
+
],
|
|
239
|
+
inputs: { desktopWidth: 1280, mobileWidth: 390 },
|
|
240
|
+
expectedBehaviour: "Everything above the bottom edge reads the measured tier height, so content ends above the bar rather than under it. Content is allowed to scroll BEHIND the bar in transit; what must not happen is content coming to rest underneath it with no way to see it.",
|
|
241
|
+
expectedUiState: "At both widths the page's final content is fully readable above the bar. No review, card or footer row comes to rest partly hidden behind it.",
|
|
242
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
243
|
+
},
|
|
244
|
+
"checklist-design-ux-sticky-cta-bar-no-bar-on-non-listing-pages": {
|
|
245
|
+
roles: ["guest"],
|
|
246
|
+
startPage: "/about",
|
|
247
|
+
steps: [
|
|
248
|
+
"Open /about in a private window at 1280 pixels and scroll to the bottom, watching for a sticky bar.",
|
|
249
|
+
"Open /blog and scroll to the bottom the same way.",
|
|
250
|
+
"Open /faqs and scroll to the bottom.",
|
|
251
|
+
"Open /contact and scroll to the bottom.",
|
|
252
|
+
"Open /products, a listing INDEX rather than a detail page, and scroll to the bottom.",
|
|
253
|
+
],
|
|
254
|
+
expectedBehaviour: "The purchase bar belongs to listing DETAIL pages only. The bar is a single shared instance claimed by whatever page is on top, so a page that claims it without releasing leaves it published on the next route — which is how a purchase bar ends up on an article.",
|
|
255
|
+
expectedUiState: "No purchase bar on any of the five pages at any scroll position, including /products. Reaching them by clicking links rather than by typing URLs is what exercises the release, since a fresh load would hide a stale claim.",
|
|
256
|
+
expectedData: { barPresent: false },
|
|
257
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
258
|
+
},
|
|
259
|
+
"checklist-design-ux-sticky-cta-bar-bar-with-keyboard-open": {
|
|
260
|
+
roles: ["buyer"],
|
|
261
|
+
startPage: "/products/product-beyblade-burst-valkyrie",
|
|
262
|
+
steps: [
|
|
263
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123! on a device or emulator with an on-screen keyboard, at 390 pixels wide.",
|
|
264
|
+
"Open /products/product-beyblade-burst-valkyrie and scroll to the reviews section.",
|
|
265
|
+
"Tap into a text field so the keyboard opens.",
|
|
266
|
+
"Look at where the sticky bar and the bottom tab bar are now.",
|
|
267
|
+
"Read the text field and check it is not hidden.",
|
|
268
|
+
"Dismiss the keyboard and look at the bottom edge again.",
|
|
269
|
+
],
|
|
270
|
+
inputs: { mobileWidth: 390 },
|
|
271
|
+
expectedBehaviour: "The keyboard is the third tier at the bottom edge, published by its own writer, and everything above reads all three. The bar must not sit over the keyboard, and the field being typed into must not be hidden behind either.",
|
|
272
|
+
expectedUiState: "With the keyboard open the field is visible and the fixed bars are either above the keyboard or hidden. Nothing floats over the keyboard itself. Dismissing it returns the bars to their normal position with no leftover gap.",
|
|
273
|
+
endResult: "Read-only; restore the window width afterwards. A leftover gap after dismissal means the inset was not reset.",
|
|
274
|
+
},
|
|
275
|
+
};
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: One lookup of every authored case, keyed by full checklist id.
|
|
3
|
+
* WHAT: `AUTHORED_CASES` — merged from the per-page modules in this directory.
|
|
4
|
+
*
|
|
5
|
+
* HAND-MAINTAINED. One import and one spread per page module, alphabetical. This
|
|
6
|
+
* file used to carry GENERATED sentinels rewritten by `merge-authored.mjs`; that
|
|
7
|
+
* script is gone, and the banner outlived it by exactly one session, telling the
|
|
8
|
+
* reader a machine owned a file nothing writes. Adding a page means editing here.
|
|
9
|
+
*
|
|
10
|
+
* This is a registry, not a convenience barrel (Root Cause #18): it composes a
|
|
11
|
+
* data structure that no single module holds, and nothing imports a page module
|
|
12
|
+
* through it to reach a symbol it could have imported directly.
|
|
13
|
+
*
|
|
14
|
+
* EXPORTS:
|
|
15
|
+
* AUTHORED_CASES — Record<checklistItemId, AuthoredCase>
|
|
16
|
+
*
|
|
17
|
+
* @tag domain:tester
|
|
18
|
+
* @tag layer:seed
|
|
19
|
+
* @tag pattern:registry
|
|
20
|
+
* @tag access:server-only
|
|
21
|
+
* @tag consumers:seed-data/tester-checklist-seed-data.ts
|
|
22
|
+
* @tag sideEffects:none
|
|
23
|
+
*/
|
|
24
|
+
import { authored as a_admin__blog_faqs } from "./admin__blog-faqs";
|
|
25
|
+
import { authored as a_admin__bundles } from "./admin__bundles";
|
|
26
|
+
import { authored as a_admin__classifieds_digitalcodes_live } from "./admin__classifieds-digitalcodes-live";
|
|
27
|
+
import { authored as a_admin__media_watermark } from "./admin__media-watermark";
|
|
28
|
+
import { authored as a_admin__prize_draws_lotteries } from "./admin__prize-draws-lotteries";
|
|
29
|
+
import { authored as a_admin__events_raffles_spin } from "./admin__events-raffles-spin";
|
|
30
|
+
import { authored as a_admin__coupons } from "./admin__coupons";
|
|
31
|
+
import { authored as a_admin__buyer_data_admin } from "./admin__buyer-data-admin";
|
|
32
|
+
import { authored as a_admin__content_marketing } from "./admin__content-marketing";
|
|
33
|
+
import { authored as a_admin__catalog_listings } from "./admin__catalog-listings";
|
|
34
|
+
import { authored as a_admin__orders_fulfillment } from "./admin__orders-fulfillment";
|
|
35
|
+
import { authored as a_admin__users_trust } from "./admin__users-trust";
|
|
36
|
+
import { authored as a_admin__site_system } from "./admin__site-system";
|
|
37
|
+
import { authored as a_admin__category_brand_authoring } from "./admin__category-brand-authoring";
|
|
38
|
+
import { authored as a_admin__uncovered_admin_pages } from "./admin__uncovered-admin-pages";
|
|
39
|
+
import { authored as a_admin__bans_and_trust } from "./admin__bans-and-trust";
|
|
40
|
+
import { authored as a_admin__bulk_actions } from "./admin__bulk-actions";
|
|
41
|
+
import { authored as a_admin__content_deletes } from "./admin__content-deletes";
|
|
42
|
+
import { authored as a_content_discovery__category_brand_relations } from "./content-discovery__category-brand-relations";
|
|
43
|
+
import { authored as a_buying__order_status_lifecycle } from "./buying__order-status-lifecycle";
|
|
44
|
+
import { authored as a_buying__user_uncovered_pages } from "./buying__user-uncovered-pages";
|
|
45
|
+
import { authored as a_selling__listing_lifecycle } from "./selling__listing-lifecycle";
|
|
46
|
+
import { authored as a_selling__store_uncovered_pages } from "./selling__store-uncovered-pages";
|
|
47
|
+
import { authored as a_content_discovery__event_participation } from "./content-discovery__event-participation";
|
|
48
|
+
import { authored as a_cta_layout__navbar_ctas } from "./cta-layout__navbar-ctas";
|
|
49
|
+
import { authored as a_public_pages__help_scams_guides_subpages } from "./public-pages__help-scams-guides-subpages";
|
|
50
|
+
import { authored as a_account_auth__profile_settings } from "./account-auth__profile-settings";
|
|
51
|
+
import { authored as a_account_auth__signup_login } from "./account-auth__signup-login";
|
|
52
|
+
import { authored as a_account_auth__testing_program } from "./account-auth__testing-program";
|
|
53
|
+
import { authored as a_addresses__address_filters } from "./addresses__address-filters";
|
|
54
|
+
import { authored as a_addresses__postal_lookup } from "./addresses__postal-lookup";
|
|
55
|
+
import { authored as a_addresses__postal_validation } from "./addresses__postal-validation";
|
|
56
|
+
import { authored as a_addresses__state_picker } from "./addresses__state-picker";
|
|
57
|
+
import { authored as a_addresses__unban_request } from "./addresses__unban-request";
|
|
58
|
+
import { authored as a_buying__bidding } from "./buying__bidding";
|
|
59
|
+
import { authored as a_buying__browsing_search } from "./buying__browsing-search";
|
|
60
|
+
import { authored as a_buying__buying_checkout } from "./buying__buying-checkout";
|
|
61
|
+
import { authored as a_buying__buying_coupons } from "./buying__buying-coupons";
|
|
62
|
+
import { authored as a_buying__product_detail } from "./buying__product-detail";
|
|
63
|
+
import { authored as a_buying__image_tile_layout } from "./buying__image-tile-layout";
|
|
64
|
+
import { authored as a_buying__return_request } from "./buying__return-request";
|
|
65
|
+
import { authored as a_buying__reviews } from "./buying__reviews";
|
|
66
|
+
import { authored as a_buying__user_dashboard_navigation } from "./buying__user-dashboard-navigation";
|
|
67
|
+
import { authored as a_buying__my_orders } from "./buying__my-orders";
|
|
68
|
+
import { authored as a_buying__reviews_pagination } from "./buying__reviews-pagination";
|
|
69
|
+
import { authored as a_buying__wishlist_history } from "./buying__wishlist-history";
|
|
70
|
+
import { authored as a_buying__user_dashboard_extras } from "./buying__user-dashboard-extras";
|
|
71
|
+
import { authored as a_buying__offers } from "./buying__offers";
|
|
72
|
+
import { authored as a_buying__cart } from "./buying__cart";
|
|
73
|
+
import { authored as a_community_support__public_profile } from "./community-support__public-profile";
|
|
74
|
+
import { authored as a_community_support__support_tickets } from "./community-support__support-tickets";
|
|
75
|
+
import { authored as a_content_discovery__blog } from "./content-discovery__blog";
|
|
76
|
+
import { authored as a_content_discovery__coupons } from "./content-discovery__coupons";
|
|
77
|
+
import { authored as a_content_discovery__events } from "./content-discovery__events";
|
|
78
|
+
import { authored as a_content_discovery__faq_help } from "./content-discovery__faq-help";
|
|
79
|
+
import { authored as a_content_discovery__notifications } from "./content-discovery__notifications";
|
|
80
|
+
import { authored as a_content_discovery__search } from "./content-discovery__search";
|
|
81
|
+
import { authored as a_cta_layout__checkout_bottom_bar } from "./cta-layout__checkout-bottom-bar";
|
|
82
|
+
import { authored as a_cta_layout__dialog_footers } from "./cta-layout__dialog-footers";
|
|
83
|
+
import { authored as a_cta_layout__editor_action_bar } from "./cta-layout__editor-action-bar";
|
|
84
|
+
import { authored as a_cta_layout__product_bottom_bar } from "./cta-layout__product-bottom-bar";
|
|
85
|
+
import { authored as a_design_ux__back_to_top_button } from "./design-ux__back-to-top-button";
|
|
86
|
+
import { authored as a_design_ux__dashboard_layout } from "./design-ux__dashboard-layout";
|
|
87
|
+
import { authored as a_design_ux__footer_theme } from "./design-ux__footer-theme";
|
|
88
|
+
import { authored as a_design_ux__form_validation_errors } from "./design-ux__form-validation-errors";
|
|
89
|
+
import { authored as a_design_ux__general_design } from "./design-ux__general-design";
|
|
90
|
+
import { authored as a_design_ux__status_badge_legibility } from "./design-ux__status-badge-legibility";
|
|
91
|
+
import { authored as a_design_ux__carousel_arrow_bounds } from "./design-ux__carousel-arrow-bounds";
|
|
92
|
+
import { authored as a_design_ux__sticky_cta_bar } from "./design-ux__sticky-cta-bar";
|
|
93
|
+
import { authored as a_design_ux__hand_mode_layout } from "./design-ux__hand-mode-layout";
|
|
94
|
+
import { authored as a_design_ux__homepage_carousels } from "./design-ux__homepage-carousels";
|
|
95
|
+
import { authored as a_page_wiring__data_loss } from "./page-wiring__data-loss";
|
|
96
|
+
import { authored as a_public_pages__auth_error_pages } from "./public-pages__auth-error-pages";
|
|
97
|
+
import { authored as a_public_pages__bug_hunters } from "./public-pages__bug-hunters";
|
|
98
|
+
import { authored as a_public_pages__core_listing_pages } from "./public-pages__core-listing-pages";
|
|
99
|
+
import { authored as a_public_pages__help_how_it_works } from "./public-pages__help-how-it-works";
|
|
100
|
+
import { authored as a_public_pages__legal_policy_pages } from "./public-pages__legal-policy-pages";
|
|
101
|
+
import { authored as a_public_pages__stores_sellers_directories } from "./public-pages__stores-sellers-directories";
|
|
102
|
+
import { authored as a_page_wiring__detail_pages } from "./page-wiring__detail-pages";
|
|
103
|
+
import { authored as a_page_wiring__drawer_pages } from "./page-wiring__drawer-pages";
|
|
104
|
+
import { authored as a_page_wiring__reachability } from "./page-wiring__reachability";
|
|
105
|
+
import { authored as a_selling__become_seller } from "./selling__become-seller";
|
|
106
|
+
import { authored as a_selling__final_sale_authoring } from "./selling__final-sale-authoring";
|
|
107
|
+
import { authored as a_selling__listing_type_fields_roundtrip } from "./selling__listing-type-fields-roundtrip";
|
|
108
|
+
import { authored as a_selling__media_limits } from "./selling__media-limits";
|
|
109
|
+
import { authored as a_selling__seller_bids_bundles_filters } from "./selling__seller-bids-bundles-filters";
|
|
110
|
+
import { authored as a_selling__seller_catalog_org } from "./selling__seller-catalog-org";
|
|
111
|
+
import { authored as a_selling__seller_custom_brands } from "./selling__seller-custom-brands";
|
|
112
|
+
import { authored as a_selling__seller_guide } from "./selling__seller-guide";
|
|
113
|
+
import { authored as a_selling__seller_analytics_payouts } from "./selling__seller-analytics-payouts";
|
|
114
|
+
import { authored as a_selling__seller_ops_comms } from "./selling__seller-ops-comms";
|
|
115
|
+
import { authored as a_selling__store_dashboard_navigation } from "./selling__store-dashboard-navigation";
|
|
116
|
+
import { authored as a_selling__sectionised_forms } from "./selling__sectionised-forms";
|
|
117
|
+
import { authored as a_selling__seller_shipping_payouts_setup } from "./selling__seller-shipping-payouts-setup";
|
|
118
|
+
import { authored as a_selling__seller_orders } from "./selling__seller-orders";
|
|
119
|
+
import { authored as a_selling__seller_marketing_extras } from "./selling__seller-marketing-extras";
|
|
120
|
+
import { authored as a_selling__listing_a_product } from "./selling__listing-a-product";
|
|
121
|
+
import { authored as a_selling__seller_listing_types } from "./selling__seller-listing-types";
|
|
122
|
+
import { authored as a_seo__canonical_and_host } from "./seo__canonical-and-host";
|
|
123
|
+
import { authored as a_seo__sitemap_and_robots } from "./seo__sitemap-and-robots";
|
|
124
|
+
import { authored as a_seo__page_metadata } from "./seo__page-metadata";
|
|
125
|
+
import { authored as a_seo__og_images } from "./seo__og-images";
|
|
126
|
+
import { authored as a_search_and_nav__employee_permissions } from "./search-and-nav__employee-permissions";
|
|
127
|
+
import { authored as a_search_and_nav__header_search } from "./search-and-nav__header-search";
|
|
128
|
+
import { authored as a_search_and_nav__settings_deep_links } from "./search-and-nav__settings-deep-links";
|
|
129
|
+
import { authored as a_search_and_nav__sidebar_search } from "./search-and-nav__sidebar-search";
|
|
130
|
+
export const AUTHORED_CASES = {
|
|
131
|
+
...a_admin__blog_faqs,
|
|
132
|
+
...a_admin__bundles,
|
|
133
|
+
...a_admin__classifieds_digitalcodes_live,
|
|
134
|
+
...a_admin__media_watermark,
|
|
135
|
+
...a_admin__prize_draws_lotteries,
|
|
136
|
+
...a_admin__events_raffles_spin,
|
|
137
|
+
...a_admin__coupons,
|
|
138
|
+
...a_admin__buyer_data_admin,
|
|
139
|
+
...a_admin__content_marketing,
|
|
140
|
+
...a_admin__catalog_listings,
|
|
141
|
+
...a_admin__orders_fulfillment,
|
|
142
|
+
...a_admin__users_trust,
|
|
143
|
+
...a_admin__site_system,
|
|
144
|
+
...a_admin__category_brand_authoring,
|
|
145
|
+
...a_admin__uncovered_admin_pages,
|
|
146
|
+
...a_admin__bans_and_trust,
|
|
147
|
+
...a_admin__bulk_actions,
|
|
148
|
+
...a_admin__content_deletes,
|
|
149
|
+
...a_content_discovery__category_brand_relations,
|
|
150
|
+
...a_buying__order_status_lifecycle,
|
|
151
|
+
...a_buying__user_uncovered_pages,
|
|
152
|
+
...a_selling__listing_lifecycle,
|
|
153
|
+
...a_selling__store_uncovered_pages,
|
|
154
|
+
...a_content_discovery__event_participation,
|
|
155
|
+
...a_cta_layout__navbar_ctas,
|
|
156
|
+
...a_public_pages__help_scams_guides_subpages,
|
|
157
|
+
...a_account_auth__profile_settings,
|
|
158
|
+
...a_account_auth__signup_login,
|
|
159
|
+
...a_account_auth__testing_program,
|
|
160
|
+
...a_addresses__address_filters,
|
|
161
|
+
...a_addresses__postal_lookup,
|
|
162
|
+
...a_addresses__postal_validation,
|
|
163
|
+
...a_addresses__state_picker,
|
|
164
|
+
...a_addresses__unban_request,
|
|
165
|
+
...a_buying__bidding,
|
|
166
|
+
...a_buying__browsing_search,
|
|
167
|
+
...a_buying__buying_checkout,
|
|
168
|
+
...a_buying__buying_coupons,
|
|
169
|
+
...a_buying__product_detail,
|
|
170
|
+
...a_buying__image_tile_layout,
|
|
171
|
+
...a_buying__return_request,
|
|
172
|
+
...a_buying__reviews,
|
|
173
|
+
...a_buying__user_dashboard_navigation,
|
|
174
|
+
...a_buying__my_orders,
|
|
175
|
+
...a_buying__reviews_pagination,
|
|
176
|
+
...a_buying__wishlist_history,
|
|
177
|
+
...a_buying__user_dashboard_extras,
|
|
178
|
+
...a_buying__offers,
|
|
179
|
+
...a_buying__cart,
|
|
180
|
+
...a_community_support__public_profile,
|
|
181
|
+
...a_community_support__support_tickets,
|
|
182
|
+
...a_content_discovery__blog,
|
|
183
|
+
...a_content_discovery__coupons,
|
|
184
|
+
...a_content_discovery__events,
|
|
185
|
+
...a_content_discovery__faq_help,
|
|
186
|
+
...a_content_discovery__notifications,
|
|
187
|
+
...a_content_discovery__search,
|
|
188
|
+
...a_cta_layout__checkout_bottom_bar,
|
|
189
|
+
...a_cta_layout__dialog_footers,
|
|
190
|
+
...a_cta_layout__editor_action_bar,
|
|
191
|
+
...a_cta_layout__product_bottom_bar,
|
|
192
|
+
...a_design_ux__back_to_top_button,
|
|
193
|
+
...a_design_ux__dashboard_layout,
|
|
194
|
+
...a_design_ux__footer_theme,
|
|
195
|
+
...a_design_ux__form_validation_errors,
|
|
196
|
+
...a_design_ux__general_design,
|
|
197
|
+
...a_design_ux__status_badge_legibility,
|
|
198
|
+
...a_design_ux__carousel_arrow_bounds,
|
|
199
|
+
...a_design_ux__sticky_cta_bar,
|
|
200
|
+
...a_design_ux__hand_mode_layout,
|
|
201
|
+
...a_design_ux__homepage_carousels,
|
|
202
|
+
...a_page_wiring__data_loss,
|
|
203
|
+
...a_public_pages__auth_error_pages,
|
|
204
|
+
...a_public_pages__bug_hunters,
|
|
205
|
+
...a_public_pages__core_listing_pages,
|
|
206
|
+
...a_public_pages__help_how_it_works,
|
|
207
|
+
...a_public_pages__legal_policy_pages,
|
|
208
|
+
...a_public_pages__stores_sellers_directories,
|
|
209
|
+
...a_page_wiring__detail_pages,
|
|
210
|
+
...a_page_wiring__drawer_pages,
|
|
211
|
+
...a_page_wiring__reachability,
|
|
212
|
+
...a_selling__become_seller,
|
|
213
|
+
...a_selling__final_sale_authoring,
|
|
214
|
+
...a_selling__listing_type_fields_roundtrip,
|
|
215
|
+
...a_selling__media_limits,
|
|
216
|
+
...a_selling__seller_bids_bundles_filters,
|
|
217
|
+
...a_selling__seller_catalog_org,
|
|
218
|
+
...a_selling__seller_custom_brands,
|
|
219
|
+
...a_selling__seller_guide,
|
|
220
|
+
...a_selling__seller_analytics_payouts,
|
|
221
|
+
...a_selling__seller_ops_comms,
|
|
222
|
+
...a_selling__store_dashboard_navigation,
|
|
223
|
+
...a_selling__sectionised_forms,
|
|
224
|
+
...a_selling__seller_shipping_payouts_setup,
|
|
225
|
+
...a_selling__seller_orders,
|
|
226
|
+
...a_selling__seller_marketing_extras,
|
|
227
|
+
...a_selling__listing_a_product,
|
|
228
|
+
...a_selling__seller_listing_types,
|
|
229
|
+
...a_seo__canonical_and_host,
|
|
230
|
+
...a_seo__sitemap_and_robots,
|
|
231
|
+
...a_seo__page_metadata,
|
|
232
|
+
...a_seo__og_images,
|
|
233
|
+
...a_search_and_nav__employee_permissions,
|
|
234
|
+
...a_search_and_nav__header_search,
|
|
235
|
+
...a_search_and_nav__settings_deep_links,
|
|
236
|
+
...a_search_and_nav__sidebar_search,
|
|
237
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the page-wiring/data-loss page.
|
|
3
|
+
* WHAT: 4 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 ENDS IN A RELOAD, and that is not padding. All four bugs
|
|
10
|
+
* these cases exist for returned HTTP 200 with a success message and wrote
|
|
11
|
+
* nothing, or wrote the wrong thing. The screen after saving looked correct in
|
|
12
|
+
* every one of them; only the reload told the truth.
|
|
13
|
+
*
|
|
14
|
+
* @tag domain:tester
|
|
15
|
+
* @tag layer:seed
|
|
16
|
+
* @tag pattern:none
|
|
17
|
+
* @tag access:server-only
|
|
18
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
19
|
+
* @tag sideEffects:none
|
|
20
|
+
*/
|
|
21
|
+
export const authored = {
|
|
22
|
+
"checklist-page-wiring-data-loss-lottery-edit-preserves-bookings": {
|
|
23
|
+
roles: ["buyer", "admin"],
|
|
24
|
+
startPage: "/admin/lotteries",
|
|
25
|
+
steps: [
|
|
26
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123! and open the lottery event event-tester-sandbox-lottery.",
|
|
27
|
+
"Pull slot number 3 and complete the purchase.",
|
|
28
|
+
"Read the slot grid and note that slot 3 now shows as booked, with the buyer name and lottery number against it.",
|
|
29
|
+
"Sign out and sign in as admin@letitrip.in / TempPass123!.",
|
|
30
|
+
"Open /admin/lotteries and open the editor for that lottery.",
|
|
31
|
+
"Rename slot number 7 to 'QA Slot lottery-edit-preserves-bookings' — a slot nobody has pulled.",
|
|
32
|
+
"Save.",
|
|
33
|
+
"Reload the editor and read slot 3.",
|
|
34
|
+
"Sign out, sign in as rehan.sheikh@gmail.com / TempPass123!, and open the public lottery page to read slot 3.",
|
|
35
|
+
],
|
|
36
|
+
inputs: { bookedSlot: 3, renamedSlot: 7, newName: "QA Slot lottery-edit-preserves-bookings" },
|
|
37
|
+
expectedBehaviour: "The write shape cannot express booking state at all, so an admin editing prize names cannot touch attendance. Bookings are re-attached from the stored config and matched by slot NUMBER, never by array position — deleting a slot shifts every later index, and an index-wise merge hands slot 7's buyer the prize that was slot 8's.",
|
|
38
|
+
expectedUiState: "After the save and reload, slot 3 is still booked, still carrying the same buyer name and the same lottery number. Slot 7 carries its new name. The buyer's own view of the lottery still shows their pull.",
|
|
39
|
+
expectedData: { slot3StillBooked: true },
|
|
40
|
+
endResult: "The pull survives the admin edit. The editor once sent isBooked:false for every slot into a passthrough route, so the first save of a live lottery marked every purchased slot available again and erased the buyers — with a success message and no error anywhere.",
|
|
41
|
+
},
|
|
42
|
+
"checklist-page-wiring-data-loss-lottery-booked-slot-cannot-be-deleted": {
|
|
43
|
+
roles: ["admin"],
|
|
44
|
+
startPage: "/admin/lotteries",
|
|
45
|
+
steps: [
|
|
46
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
47
|
+
"Open /admin/lotteries and open the editor for event-tester-sandbox-lottery.",
|
|
48
|
+
"Find the slot that has already been pulled, slot number 3.",
|
|
49
|
+
"Remove that slot from the list.",
|
|
50
|
+
"Save.",
|
|
51
|
+
"Read the error message.",
|
|
52
|
+
"Reload the editor and read slot 3.",
|
|
53
|
+
],
|
|
54
|
+
inputs: { bookedSlot: 3 },
|
|
55
|
+
expectedBehaviour: "Removing a slot somebody has pulled is refused as a CONFLICT, not as a validation error. The request is well formed and the admin is not confused — the world changed under them, and the correct next action is to reopen the pull rather than fix a field.",
|
|
56
|
+
expectedUiState: "The save fails and the message names the slot number that blocked it, so the admin knows which one to deal with. It does not read as a form error attached to a field, and it is not a generic 'Something went wrong'.",
|
|
57
|
+
expectedData: { slot3StillPresent: true },
|
|
58
|
+
endResult: "Slot 3 is still there and still booked after the reload. A save that succeeds and quietly drops the slot is the failure.",
|
|
59
|
+
},
|
|
60
|
+
"checklist-page-wiring-data-loss-admin-grouped-listing-title-actually-saves": {
|
|
61
|
+
roles: ["admin"],
|
|
62
|
+
startPage: "/admin/grouped-listings",
|
|
63
|
+
steps: [
|
|
64
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
65
|
+
"Open /admin/grouped-listings and note the title of the first group.",
|
|
66
|
+
"Open its editor at /admin/grouped-listings/{id}/edit.",
|
|
67
|
+
"Replace the title with 'QA Group admin-grouped-listing-title-actually-saves'.",
|
|
68
|
+
"Save and read the confirmation.",
|
|
69
|
+
"RELOAD the page.",
|
|
70
|
+
"Read the title.",
|
|
71
|
+
"Set the title back to what it was and save.",
|
|
72
|
+
],
|
|
73
|
+
inputs: { newTitle: "QA Group admin-grouped-listing-title-actually-saves" },
|
|
74
|
+
expectedBehaviour: "The admin PATCH accepts every field the editor can send, not just productIds. A Zod object schema STRIPS unknown keys rather than rejecting them, so a schema listing only productIds turned a title change into a perfectly normal 200 that wrote nothing at all.",
|
|
75
|
+
expectedUiState: "After the reload the title is the new one. A save confirmation followed by the OLD title after reload is the exact failure — and without the reload the screen looks identical either way, because the form is still showing what was typed.",
|
|
76
|
+
expectedData: { titlePersisted: true },
|
|
77
|
+
endResult: "The title is restored to its original value by the final step, so other cases that read this group by name still work.",
|
|
78
|
+
},
|
|
79
|
+
"checklist-page-wiring-data-loss-store-address-landmark-survives-edit": {
|
|
80
|
+
roles: ["seller"],
|
|
81
|
+
startPage: "/store/addresses",
|
|
82
|
+
steps: [
|
|
83
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
84
|
+
"Open /store/addresses and create a pickup address from the drawer: name 'QA Address landmark-survives', street '8 Test Lane', city 'Indore', state 'Madhya Pradesh', pincode 452010, landmark 'Opposite the stadium gate'.",
|
|
85
|
+
"Save and reload the page, then read the address's landmark.",
|
|
86
|
+
"Open /store/addresses/{id}/edit for that address.",
|
|
87
|
+
"Change the street to '9 Test Lane' and leave everything else alone.",
|
|
88
|
+
"Save.",
|
|
89
|
+
"RELOAD the page and read the landmark.",
|
|
90
|
+
],
|
|
91
|
+
inputs: {
|
|
92
|
+
name: "QA Address landmark-survives",
|
|
93
|
+
landmark: "Opposite the stadium gate",
|
|
94
|
+
streetBefore: "8 Test Lane",
|
|
95
|
+
streetAfter: "9 Test Lane",
|
|
96
|
+
},
|
|
97
|
+
expectedBehaviour: "The edit form carries every field the route accepts. A form missing one field does not leave it alone — it sends undefined, and undefined overwrites. The landmark was dropped on every single edit for exactly that reason.",
|
|
98
|
+
expectedUiState: "After the reload the street reads '9 Test Lane' AND the landmark still reads 'Opposite the stadium gate'. A blank landmark after an unrelated edit is the failure, and it is invisible until the reload.",
|
|
99
|
+
expectedData: { landmark: "Opposite the stadium gate" },
|
|
100
|
+
endResult: "Delete the address afterwards. What this case really asks of any authoring form is: what does the stored record hold that the form cannot name?",
|
|
101
|
+
},
|
|
102
|
+
};
|