@mohasinac/appkit 4.34.1 → 4.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +32 -2
- package/dist/features/auth/actions/profile-actions.d.ts +14 -1
- package/dist/features/auth/actions/profile-actions.js +16 -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/carts-tester-seed-data.d.ts +3 -0
- package/dist/features/tester/seed-data/carts-tester-seed-data.js +70 -0
- package/dist/features/tester/seed-data/index.d.ts +1 -0
- package/dist/features/tester/seed-data/index.js +1 -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/cart-seed-data.js +11 -0
- package/dist/seed/index.d.ts +1 -1
- package/dist/seed/index.js +1 -1
- package/dist/seed/manifest.js +2 -2
- package/dist/seed/notifications-seed-data.js +5 -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 +752 -746
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the selling/seller-shipping-payouts-setup page.
|
|
3
|
+
* WHAT: 10 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
|
+
* 🛑 SEPARATE PAGES WERE CONSOLIDATED INTO TABS, so the old URLs are live links in
|
|
10
|
+
* bookmarks, emails and guides. Three cases here are about that seam: old URLs
|
|
11
|
+
* must still land, the tab must be written back to the URL so a deep link works
|
|
12
|
+
* in both directions, and a search box must only promise what its corpus can
|
|
13
|
+
* deliver.
|
|
14
|
+
*
|
|
15
|
+
* @tag domain:tester
|
|
16
|
+
* @tag layer:seed
|
|
17
|
+
* @tag pattern:none
|
|
18
|
+
* @tag access:server-only
|
|
19
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
20
|
+
* @tag sideEffects:none
|
|
21
|
+
*/
|
|
22
|
+
export const authored = {
|
|
23
|
+
"checklist-selling-seller-shipping-payouts-setup-shipping-page": {
|
|
24
|
+
roles: ["seller"],
|
|
25
|
+
startPage: "/store/shipping",
|
|
26
|
+
steps: [
|
|
27
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
28
|
+
"Open the store's shipping settings and read every field and section.",
|
|
29
|
+
"Note which shipping options the store currently offers and their rates.",
|
|
30
|
+
"Read whether a free-shipping threshold is configurable and what it is set to.",
|
|
31
|
+
"Reload the page and confirm the same values are shown.",
|
|
32
|
+
],
|
|
33
|
+
expectedBehaviour: "The page renders the store's real shipping configuration. Free shipping is DERIVED from who pays rather than being a field of its own, so a control labelled 'free shipping' has to write the field the read side actually consults — a filter on a field the document does not have matches nothing forever.",
|
|
34
|
+
expectedUiState: "Every configured option and rate is shown with real values rather than blanks. Reloading reproduces them.",
|
|
35
|
+
endResult: "Read-only; nothing persists.",
|
|
36
|
+
},
|
|
37
|
+
"checklist-selling-seller-shipping-payouts-setup-shipping-configs-crud": {
|
|
38
|
+
roles: ["seller"],
|
|
39
|
+
startPage: "/store/shipping",
|
|
40
|
+
steps: [
|
|
41
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
42
|
+
"Open the store's shipping settings and create a config named 'QA Shipping configs-crud' with a rate of 99.",
|
|
43
|
+
"Save, RELOAD, and read every field of it.",
|
|
44
|
+
"Edit only its rate to 149, save, RELOAD, and read every field again including the name.",
|
|
45
|
+
"Open a product's editor and check the new config is offered as a shipping choice.",
|
|
46
|
+
"Delete the config and RELOAD to confirm.",
|
|
47
|
+
],
|
|
48
|
+
inputs: { name: "QA Shipping configs-crud", rateBefore: 99, rateAfter: 149 },
|
|
49
|
+
expectedBehaviour: "Create, edit and delete persist, and an edit to one field leaves the others alone. A new config becomes available to the listing forms immediately — a config that exists only on its own settings page is a config no listing can use.",
|
|
50
|
+
expectedUiState: "After each reload the config holds exactly what was saved. Following the rate edit the name is unchanged. The config appears in a product editor's shipping choices.",
|
|
51
|
+
endResult: "The config is deleted by the final step.",
|
|
52
|
+
},
|
|
53
|
+
"checklist-selling-seller-shipping-payouts-setup-payout-methods-crud": {
|
|
54
|
+
roles: ["seller"],
|
|
55
|
+
startPage: "/store/payouts",
|
|
56
|
+
steps: [
|
|
57
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
58
|
+
"Open the store's payout methods and read the existing ones.",
|
|
59
|
+
"Note how any existing account number or UPI id is displayed.",
|
|
60
|
+
"Add a method named 'QA Payout methods-crud' with test details and save.",
|
|
61
|
+
"RELOAD and read how the new method's details are displayed.",
|
|
62
|
+
"Open the browser's View Source and search for the full account identifier you typed.",
|
|
63
|
+
"Delete the method.",
|
|
64
|
+
],
|
|
65
|
+
inputs: { name: "QA Payout methods-crud" },
|
|
66
|
+
expectedBehaviour: "Payout details are PII-encrypted at rest and shown masked. This is one of the few places a seller's bank identifier exists in the product at all, so the source check is the real assertion — a masked display over an unmasked payload is a leak that looks like a fix.",
|
|
67
|
+
expectedUiState: "Existing and new methods both show masked identifiers rather than full ones. The full identifier does not appear anywhere in the page source, including the embedded data payload.",
|
|
68
|
+
expectedData: { fullIdentifierInSource: 0 },
|
|
69
|
+
endResult: "The method is deleted by the final step. A full account number in the source fails the case regardless of how the page renders.",
|
|
70
|
+
},
|
|
71
|
+
"checklist-selling-seller-shipping-payouts-setup-payout-settings-page": {
|
|
72
|
+
roles: ["seller"],
|
|
73
|
+
startPage: "/store/payouts",
|
|
74
|
+
steps: [
|
|
75
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
76
|
+
"Open the store's payout settings and read every field and toggle.",
|
|
77
|
+
"Read whether the payout schedule, hold period and minimum amount are shown.",
|
|
78
|
+
"Change one editable setting and save.",
|
|
79
|
+
"RELOAD and read every setting again.",
|
|
80
|
+
"Restore the changed setting.",
|
|
81
|
+
],
|
|
82
|
+
expectedBehaviour: "The page shows the seller's own payout settings and saves what they change. Platform-side figures such as the hold period and the minimum payout amount are informational here — they are not buyer-facing and were once being published by an unauthenticated public endpoint, so a seller seeing them is correct and a public page showing them is not.",
|
|
83
|
+
expectedUiState: "Settings render with real values and the changed one survives the reload. Every other setting is unchanged after the save.",
|
|
84
|
+
endResult: "The setting is restored by the final step.",
|
|
85
|
+
},
|
|
86
|
+
"checklist-selling-seller-shipping-payouts-setup-consolidated-tabs-old-urls": {
|
|
87
|
+
roles: ["seller"],
|
|
88
|
+
startPage: "/store/shipping",
|
|
89
|
+
steps: [
|
|
90
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
91
|
+
"Open each of the pre-consolidation URLs directly in the address bar, one at a time.",
|
|
92
|
+
"For each, read where the browser lands and which tab is open.",
|
|
93
|
+
"Note any that 404 or land on the first tab rather than the one they name.",
|
|
94
|
+
"Read the final URL each one settles on.",
|
|
95
|
+
],
|
|
96
|
+
expectedBehaviour: "An old URL lands on the consolidated page WITH its own tab open. These URLs are live in bookmarks, emails and guides, so a 404 breaks links that were correct when they were written — and landing on tab one is only marginally better, since the user still has to hunt.",
|
|
97
|
+
expectedUiState: "Every old URL resolves and opens the tab it corresponds to. None 404s and none lands on the default tab. Record any that do, by URL.",
|
|
98
|
+
endResult: "Read-only; nothing persists.",
|
|
99
|
+
},
|
|
100
|
+
"checklist-selling-seller-shipping-payouts-setup-consolidated-tabs-url-writeback": {
|
|
101
|
+
roles: ["seller"],
|
|
102
|
+
startPage: "/store/shipping",
|
|
103
|
+
steps: [
|
|
104
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
105
|
+
"Open the consolidated settings page and read the URL.",
|
|
106
|
+
"Click a different tab and read the URL again.",
|
|
107
|
+
"Copy that URL, open it in a new tab, and read which tab is open.",
|
|
108
|
+
"Press the browser back button and read which tab is shown.",
|
|
109
|
+
"Open the page with an unknown tab value in the URL and read what happens.",
|
|
110
|
+
],
|
|
111
|
+
expectedBehaviour: "Selecting a tab writes it to the URL, so the deep link works in both directions and back walks the tabs. An unknown value falls back to the default quietly — the realistic cause is a stale bookmark from a renamed tab, which is not an error condition.",
|
|
112
|
+
expectedUiState: "The URL changes with the tab and reopening it lands on that tab. Back returns to the previous tab. An unknown value opens the default with no error banner and no blank panel.",
|
|
113
|
+
endResult: "Read-only; nothing persists beyond the URL.",
|
|
114
|
+
},
|
|
115
|
+
"checklist-selling-seller-shipping-payouts-setup-print-center-selection-deeplink": {
|
|
116
|
+
roles: ["seller"],
|
|
117
|
+
startPage: "/store/print-center",
|
|
118
|
+
steps: [
|
|
119
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
120
|
+
"Open /store/print-center and select two items to print.",
|
|
121
|
+
"Read the URL and check the selection is represented in it.",
|
|
122
|
+
"Copy the URL and open it in a new tab.",
|
|
123
|
+
"Read whether the same two items are selected on arrival.",
|
|
124
|
+
"Reload and read the selection again.",
|
|
125
|
+
],
|
|
126
|
+
expectedBehaviour: "A print selection is deep-linkable so it can be reopened or handed to a colleague. Holding it in component state alone means the URL describes a different page than the one on screen, and reloading loses the work.",
|
|
127
|
+
expectedUiState: "The URL encodes the selection, the pasted URL arrives with the same two items selected, and a reload preserves them. A selection lost on reload is the failure.",
|
|
128
|
+
endResult: "Clear the selection; nothing is printed.",
|
|
129
|
+
},
|
|
130
|
+
"checklist-selling-seller-shipping-payouts-setup-search-box-promises-match-corpus": {
|
|
131
|
+
roles: ["seller"],
|
|
132
|
+
startPage: "/store/products",
|
|
133
|
+
steps: [
|
|
134
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
135
|
+
"Open each store listing page that has a search box and read its placeholder text.",
|
|
136
|
+
"Write down what each placeholder claims to search — title, sku, buyer, id.",
|
|
137
|
+
"For each page, search a value of every kind its placeholder names.",
|
|
138
|
+
"Write down any kind the placeholder names that returns nothing when it should match.",
|
|
139
|
+
"Search zzzznope on each page and confirm zero results.",
|
|
140
|
+
],
|
|
141
|
+
inputs: { nonsenseQuery: "zzzznope" },
|
|
142
|
+
expectedBehaviour: "A placeholder is a promise about what the corpus can match. Naming a field the search index does not carry produces a search that fails for a reason the user cannot see — they conclude the record does not exist. Placeholders promising something unmatchable have been found and removed before.",
|
|
143
|
+
expectedUiState: "Every kind a placeholder names returns results when a matching value is searched. 'zzzznope' returns zero everywhere. A placeholder promising a field that matches nothing is the finding, quoted with the page it is on.",
|
|
144
|
+
expectedData: { unkeptPlaceholderPromises: 0 },
|
|
145
|
+
endResult: "Read-only; nothing persists beyond the URL.",
|
|
146
|
+
},
|
|
147
|
+
"checklist-selling-seller-shipping-payouts-setup-exact-search-boxes-commit-on-enter": {
|
|
148
|
+
roles: ["seller"],
|
|
149
|
+
startPage: "/store/orders",
|
|
150
|
+
steps: [
|
|
151
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
152
|
+
"Open a store listing whose search is exact-match and read its helper text.",
|
|
153
|
+
"Type a full matching value but do NOT press Enter — wait five seconds and read the rows.",
|
|
154
|
+
"Press Enter and read the rows.",
|
|
155
|
+
"Clear the box, type a partial value, press Enter, and read the rows.",
|
|
156
|
+
"Type zzzznope, press Enter, and read the rows.",
|
|
157
|
+
],
|
|
158
|
+
inputs: { nonsenseQuery: "zzzznope" },
|
|
159
|
+
expectedBehaviour: "An exact-match box commits on Enter rather than searching as you type. Encrypted fields can only be matched through a blind index, so a partial value cannot match — searching mid-typing would fire a query per keystroke, every one of which is guaranteed to return nothing.",
|
|
160
|
+
expectedUiState: "Nothing changes while typing. Enter runs the search and the full value returns its rows. The partial value returns none, and the helper text explains that matching is exact. 'zzzznope' returns none.",
|
|
161
|
+
endResult: "Read-only; nothing persists beyond the URL.",
|
|
162
|
+
},
|
|
163
|
+
"checklist-selling-seller-shipping-payouts-setup-consolidated-tabs-command-palette": {
|
|
164
|
+
roles: ["seller"],
|
|
165
|
+
startPage: "/store",
|
|
166
|
+
steps: [
|
|
167
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
168
|
+
"Open /store and open the command palette or header search.",
|
|
169
|
+
"Type shipping and read the results.",
|
|
170
|
+
"Click the result and read which page and which tab it opens.",
|
|
171
|
+
"Repeat with payout, reading the results and where they land.",
|
|
172
|
+
"Type zzzznope and read the results.",
|
|
173
|
+
],
|
|
174
|
+
inputs: { query1: "shipping", query2: "payout", nonsenseQuery: "zzzznope" },
|
|
175
|
+
expectedBehaviour: "Search reaches individual TABS, not only the consolidated page, because a tab is where the setting actually is. Landing on the page's first tab and leaving the seller to hunt is the same failure as the old-URL case, arriving from a different direction.",
|
|
176
|
+
expectedUiState: "Both queries return entries that open the consolidated page ON the relevant tab. 'zzzznope' returns nothing rather than the full list of settings.",
|
|
177
|
+
expectedData: { nonsenseResultCount: 0 },
|
|
178
|
+
endResult: "Read-only; nothing persists.",
|
|
179
|
+
},
|
|
180
|
+
};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the selling/store-dashboard-navigation page.
|
|
3
|
+
* WHAT: 9 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 STORE SUBTREE IS PER-REQUEST BECAUSE ITS LAYOUT READS THE SESSION, and
|
|
10
|
+
* that single read is what makes every route beneath it dynamic — there is no
|
|
11
|
+
* route-segment config anywhere in the tree, and adding one would be declaring a
|
|
12
|
+
* rendering contract to silence a build error. The redirect case below exercises
|
|
13
|
+
* exactly that layout read.
|
|
14
|
+
*
|
|
15
|
+
* @tag domain:tester
|
|
16
|
+
* @tag layer:seed
|
|
17
|
+
* @tag pattern:none
|
|
18
|
+
* @tag access:server-only
|
|
19
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
20
|
+
* @tag sideEffects:none
|
|
21
|
+
*/
|
|
22
|
+
export const authored = {
|
|
23
|
+
"checklist-selling-store-dashboard-navigation-store-sidebar-all-links-work": {
|
|
24
|
+
roles: ["seller"],
|
|
25
|
+
startPage: "/store",
|
|
26
|
+
steps: [
|
|
27
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
28
|
+
"Open /store and expand every group in the sidebar.",
|
|
29
|
+
"Click each link in turn, reading where it lands and going back each time.",
|
|
30
|
+
"Write down any link that 404s, renders an empty shell, or lands somewhere unrelated.",
|
|
31
|
+
"Count the links against the number of pages that exist under /store.",
|
|
32
|
+
],
|
|
33
|
+
expectedBehaviour: "Every sidebar link opens a real page with content. The inverse — a built page with no sidebar entry — is the same defect from the other side and is why the count matters: around seventeen store pages were once reachable only by typing their exact URL.",
|
|
34
|
+
expectedUiState: "Every link resolves to a page that renders content, not a 404 and not chrome with an empty body. Note any page you know exists that has no link — that half is not enforced and has to be spotted by eye.",
|
|
35
|
+
expectedData: { brokenLinks: 0 },
|
|
36
|
+
endResult: "Read-only; nothing persists.",
|
|
37
|
+
},
|
|
38
|
+
"checklist-selling-store-dashboard-navigation-store-sidebar-active-highlight": {
|
|
39
|
+
roles: ["seller"],
|
|
40
|
+
startPage: "/store",
|
|
41
|
+
steps: [
|
|
42
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
43
|
+
"Open /store and note which sidebar entry is highlighted.",
|
|
44
|
+
"Navigate to /store/products and read which entry is highlighted.",
|
|
45
|
+
"Navigate to a nested page beneath it — a product's editor — and read the highlight again.",
|
|
46
|
+
"Navigate to /store/orders and read it again.",
|
|
47
|
+
"Use the browser's back button and read the highlight.",
|
|
48
|
+
],
|
|
49
|
+
expectedBehaviour: "The highlight follows the current path, including on nested routes where the sidebar has no entry of its own — a product editor should still highlight Products. It must also follow a back navigation, since the highlight is derived from the path rather than from the click.",
|
|
50
|
+
expectedUiState: "Exactly one entry is highlighted at a time and it matches the current section, including on the nested editor. After the back navigation the highlight matches wherever the browser landed.",
|
|
51
|
+
endResult: "Read-only; nothing persists.",
|
|
52
|
+
},
|
|
53
|
+
"checklist-selling-store-dashboard-navigation-store-sidebar-mobile-collapse": {
|
|
54
|
+
roles: ["seller"],
|
|
55
|
+
startPage: "/store",
|
|
56
|
+
steps: [
|
|
57
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
58
|
+
"Resize the browser window to 390 pixels wide and open /store.",
|
|
59
|
+
"Read how the sidebar is presented.",
|
|
60
|
+
"Open it, read its entries, and navigate somewhere.",
|
|
61
|
+
"Check whether it closed on navigation.",
|
|
62
|
+
"Count the fixed bars at the bottom of the screen.",
|
|
63
|
+
"Try to scroll the page sideways.",
|
|
64
|
+
],
|
|
65
|
+
inputs: { mobileWidth: 390 },
|
|
66
|
+
expectedBehaviour: "On a phone the sidebar collapses behind a control and closes after navigating. The dashboard renders its own bottom tab bar and the public one is suppressed on these routes, so exactly one is mounted — two would be two bars on the same pixels with a height nobody owns.",
|
|
67
|
+
expectedUiState: "The sidebar is collapsed by default, opens on demand, and closes after a navigation. Exactly one bottom bar is present, carrying dashboard destinations. The page does not scroll sideways.",
|
|
68
|
+
expectedData: { bottomNavCount: 1 },
|
|
69
|
+
endResult: "Read-only; restore the window width afterwards.",
|
|
70
|
+
},
|
|
71
|
+
"checklist-selling-store-dashboard-navigation-store-deep-link-direct-load": {
|
|
72
|
+
roles: ["seller"],
|
|
73
|
+
startPage: "/store/products",
|
|
74
|
+
steps: [
|
|
75
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
76
|
+
"Open a product's editor from /store/products and copy the URL.",
|
|
77
|
+
"Open a new tab and paste that URL directly.",
|
|
78
|
+
"Read whether the editor opens populated on the same record.",
|
|
79
|
+
"Reload that tab and read it again.",
|
|
80
|
+
"Copy a filtered listing URL — with a search term and a sort applied — and open it in a new tab.",
|
|
81
|
+
"Read whether the filters and sort are applied on first paint.",
|
|
82
|
+
],
|
|
83
|
+
expectedBehaviour: "Every dashboard URL is a real destination: an editor deep link opens on its record, and a filtered listing URL reproduces its filters on first paint. Listing state lives in the URL for this reason, so the server's render and the toolbar controls agree.",
|
|
84
|
+
expectedUiState: "The pasted editor URL opens populated and survives a reload. The filtered listing URL shows the same rows, filters and sort as the tab it was copied from, on first paint rather than after a re-sort.",
|
|
85
|
+
endResult: "Read-only; close the editors without saving.",
|
|
86
|
+
},
|
|
87
|
+
"checklist-selling-store-dashboard-navigation-store-user-crossnav": {
|
|
88
|
+
roles: ["seller"],
|
|
89
|
+
startPage: "/store",
|
|
90
|
+
steps: [
|
|
91
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
92
|
+
"Open /store and find the cross-dashboard navigation to the buyer portal.",
|
|
93
|
+
"Click through to /user and read where it lands.",
|
|
94
|
+
"From /user, find the way back to /store and click it.",
|
|
95
|
+
"Check the sidebar changed with the portal each time.",
|
|
96
|
+
"Open the public store page from within the dashboard and confirm it opens the public view rather than the editor.",
|
|
97
|
+
],
|
|
98
|
+
expectedBehaviour: "A seller is also a buyer, so both portals are reachable from each other and each renders its own navigation. The public-store link is a distinct destination from the store settings editor — conflating them is a live defect on the buyer side, where a 'My Profile' entry leads to the edit page rather than the public profile.",
|
|
99
|
+
expectedUiState: "Each cross-link lands in the other portal with that portal's own sidebar. The public store link opens the public store page, not the settings editor.",
|
|
100
|
+
endResult: "Read-only; nothing persists.",
|
|
101
|
+
},
|
|
102
|
+
"checklist-selling-store-dashboard-navigation-store-browser-back-forward": {
|
|
103
|
+
roles: ["seller"],
|
|
104
|
+
startPage: "/store",
|
|
105
|
+
steps: [
|
|
106
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
107
|
+
"Open /store, then /store/products, then apply a filter, then open a product editor.",
|
|
108
|
+
"Press the browser back button once and read where it lands.",
|
|
109
|
+
"Press back again and read where it lands, including whether the filter is still applied.",
|
|
110
|
+
"Press back once more.",
|
|
111
|
+
"Press forward three times, reading each landing.",
|
|
112
|
+
],
|
|
113
|
+
expectedBehaviour: "Every state change that alters the URL is one history entry, so back walks them in reverse. A filter change that writes the URL twice — once for the filter and once to reset the page number — produces two entries for one action and makes back appear not to work.",
|
|
114
|
+
expectedUiState: "Back and forward walk the sequence one step per press, and the filtered listing comes back with its filter applied. Two presses needed to undo a single filter change is the double-navigation failure.",
|
|
115
|
+
endResult: "Read-only; close any editor without saving.",
|
|
116
|
+
},
|
|
117
|
+
"checklist-selling-store-dashboard-navigation-store-logged-out-redirect": {
|
|
118
|
+
roles: ["guest"],
|
|
119
|
+
startPage: "/store",
|
|
120
|
+
steps: [
|
|
121
|
+
"Open a private window with no session.",
|
|
122
|
+
"Open /store and watch the page for 5 seconds.",
|
|
123
|
+
"Open /store/products and watch for 5 seconds.",
|
|
124
|
+
"Open /store/payouts and watch for 5 seconds.",
|
|
125
|
+
"Read each for any store name, order, payout figure or seller detail at any point.",
|
|
126
|
+
"Read where each ends up.",
|
|
127
|
+
],
|
|
128
|
+
expectedBehaviour: "The store layout reads the session server-side, which both makes the whole subtree per-request and gates it. A signed-out request is redirected before any store data is rendered — no flash of a real store's figures.",
|
|
129
|
+
expectedUiState: "All three end on the sign-in page. At no point does a store name, an order, a payout amount or a seller's detail appear. A spinner still turning after 5 seconds is a separate failure from a leak, and both should be reported.",
|
|
130
|
+
expectedData: { storeDataShownToGuest: 0 },
|
|
131
|
+
endResult: "Read-only. Any trace of real store data is a leak and fails the case outright.",
|
|
132
|
+
},
|
|
133
|
+
"checklist-selling-store-dashboard-navigation-store-nav-listing-type-groups": {
|
|
134
|
+
roles: ["seller"],
|
|
135
|
+
startPage: "/store",
|
|
136
|
+
steps: [
|
|
137
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
138
|
+
"Open /store and find the listing-type entries in the sidebar.",
|
|
139
|
+
"Write down every listing type offered.",
|
|
140
|
+
"Compare that list against the nine types the catalogue supports.",
|
|
141
|
+
"Open each and check it lists that type's listings rather than everything.",
|
|
142
|
+
"Write down any type that is missing or whose page shows the wrong listings.",
|
|
143
|
+
],
|
|
144
|
+
expectedBehaviour: "Every listing type has a way in. Adding a type to the union and the plugin registry is not enough — omit it from the repository's filter-alias map and the alias returns an empty value that is then dropped, so the page runs with NO type filter and shows the seller everything.",
|
|
145
|
+
expectedUiState: "All nine types are offered and each page shows only its own type. A page showing the full catalogue under a type heading is the dropped-filter failure; a missing type is the other half of the same bug.",
|
|
146
|
+
expectedData: { listingTypeEntries: 9 },
|
|
147
|
+
endResult: "Read-only; nothing persists.",
|
|
148
|
+
},
|
|
149
|
+
"checklist-selling-store-dashboard-navigation-store-sidebar-logout-button": {
|
|
150
|
+
roles: ["seller"],
|
|
151
|
+
startPage: "/store",
|
|
152
|
+
steps: [
|
|
153
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
154
|
+
"Open /store and find the log-out control in the sidebar.",
|
|
155
|
+
"Click it and read where the browser lands.",
|
|
156
|
+
"Open /store again.",
|
|
157
|
+
"Read what happens.",
|
|
158
|
+
"Press the browser back button and read what is shown.",
|
|
159
|
+
],
|
|
160
|
+
expectedBehaviour: "Log out clears both halves of the session — the server cookie and the client auth session. Clearing only one leaves the browser able to re-mint a session on the next request, which is why the second navigation, not the redirect, is the real check.",
|
|
161
|
+
expectedUiState: "The browser leaves the dashboard on log-out. Opening /store afterwards redirects to sign-in rather than rendering the dashboard, even briefly with real data. The back button does not restore it from cache.",
|
|
162
|
+
endResult: "The session is ended. A dashboard visible via the back button after log-out is a real exposure on a shared machine.",
|
|
163
|
+
},
|
|
164
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the selling/store-uncovered-pages page.
|
|
3
|
+
* WHAT: 6 case(s), keyed by full checklist id.
|
|
4
|
+
*
|
|
5
|
+
* Six seller routes the sweep found with no case naming them anywhere. One case
|
|
6
|
+
* each: does the page render, and does its main affordance work. A page nobody
|
|
7
|
+
* has opened does not need depth before it has that.
|
|
8
|
+
*
|
|
9
|
+
* @tag domain:tester
|
|
10
|
+
* @tag layer:seed
|
|
11
|
+
* @tag pattern:none
|
|
12
|
+
* @tag access:server-only
|
|
13
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
14
|
+
* @tag sideEffects:none
|
|
15
|
+
*/
|
|
16
|
+
const SIGN_IN_SELLER = "Sign in as tyson@beybladearena.in / TempPass123!.";
|
|
17
|
+
export const authored = {
|
|
18
|
+
"checklist-selling-store-uncovered-pages-store-stickers-renders": {
|
|
19
|
+
roles: ["seller"],
|
|
20
|
+
startPage: "/store/stickers",
|
|
21
|
+
steps: [
|
|
22
|
+
SIGN_IN_SELLER,
|
|
23
|
+
"Open /store/stickers.",
|
|
24
|
+
"Read the listings shown and check each is a sticker listing.",
|
|
25
|
+
"Check no listing of another type appears.",
|
|
26
|
+
"Create a sticker listing from this page titled 'QA Store Sticker Probe' priced at 99.",
|
|
27
|
+
"Check it appears in the list, then delete it.",
|
|
28
|
+
],
|
|
29
|
+
inputs: { title: "QA Store Sticker Probe", price: 99 },
|
|
30
|
+
expectedBehaviour: "The page lists this seller's sticker listings only and can create one. A type-scoped page whose query dropped its own type filter returns the seller's whole catalogue — which reads as a working page until somebody notices a Beyblade on the stickers screen.",
|
|
31
|
+
expectedUiState: "Only sticker listings are shown, and the new one appears after creation. Any other type present is the finding.",
|
|
32
|
+
endResult: "The probe listing is deleted.",
|
|
33
|
+
},
|
|
34
|
+
"checklist-selling-store-uncovered-pages-store-support-renders": {
|
|
35
|
+
roles: ["seller"],
|
|
36
|
+
startPage: "/store/support",
|
|
37
|
+
steps: [
|
|
38
|
+
SIGN_IN_SELLER,
|
|
39
|
+
"Open /store/support.",
|
|
40
|
+
"Read the tickets listed, or the empty state.",
|
|
41
|
+
"Open a new ticket with the subject 'QA seller support probe' and a body naming this checklist case.",
|
|
42
|
+
"Submit it and check it appears in the list.",
|
|
43
|
+
"Open it and reply once.",
|
|
44
|
+
"Reload and check both the ticket and the reply are still there.",
|
|
45
|
+
],
|
|
46
|
+
inputs: { subject: "QA seller support probe" },
|
|
47
|
+
expectedBehaviour: "A seller can open and continue a ticket from their own dashboard rather than being sent to the buyer-side surface. The reply is the half more likely to fail silently — a reply appended optimistically and never written looks identical until the reload.",
|
|
48
|
+
expectedUiState: "The ticket and its reply are both present after the reload.",
|
|
49
|
+
endResult: "One QA support ticket exists; close it if the interface allows.",
|
|
50
|
+
},
|
|
51
|
+
"checklist-selling-store-uncovered-pages-store-analytics-cards-renders": {
|
|
52
|
+
roles: ["seller"],
|
|
53
|
+
startPage: "/store/analytics/cards",
|
|
54
|
+
steps: [
|
|
55
|
+
SIGN_IN_SELLER,
|
|
56
|
+
"Open /store/analytics/cards with the console open.",
|
|
57
|
+
"Read every figure shown.",
|
|
58
|
+
"Open /store/orders and count this store's orders.",
|
|
59
|
+
"Compare the analytics figures against what the orders list shows.",
|
|
60
|
+
"Check no figure is an order of magnitude out.",
|
|
61
|
+
"Read the console for errors.",
|
|
62
|
+
],
|
|
63
|
+
expectedBehaviour: "The figures come from this store's real orders. Money is stored in whole rupees with decimals, so a figure computed against the older hundredth-unit scale reads a hundred times too large — plausible-looking on a screen nobody has a baseline for.",
|
|
64
|
+
expectedUiState: "Figures that reconcile with the orders list, a clean console, and no hundredfold jump. All zeros against real orders is equally a finding.",
|
|
65
|
+
endResult: "Read-only.",
|
|
66
|
+
},
|
|
67
|
+
"checklist-selling-store-uncovered-pages-store-preorders-renders": {
|
|
68
|
+
roles: ["seller"],
|
|
69
|
+
startPage: "/store/pre-orders",
|
|
70
|
+
steps: [
|
|
71
|
+
SIGN_IN_SELLER,
|
|
72
|
+
"Open /store/pre-orders.",
|
|
73
|
+
"Read the listings shown and check each is a pre-order.",
|
|
74
|
+
"Read each one's production status and delivery date in the list.",
|
|
75
|
+
"Create a pre-order from this page titled 'QA Store Preorder Probe' with a full price of 999 and a deposit of 200.",
|
|
76
|
+
"Check it appears in the list, then delete it.",
|
|
77
|
+
],
|
|
78
|
+
inputs: { title: "QA Store Preorder Probe", fullPrice: 999, deposit: 200 },
|
|
79
|
+
expectedBehaviour: "The page lists this seller's pre-orders with the fields that make them pre-orders, and can create one. Production status and delivery date belong in the list rather than only in the editor — they are what the seller is managing.",
|
|
80
|
+
expectedUiState: "Only pre-orders are shown, each with its production status and delivery date, and the new one appears after creation.",
|
|
81
|
+
endResult: "The probe listing is deleted.",
|
|
82
|
+
},
|
|
83
|
+
"checklist-selling-store-uncovered-pages-store-guides-all-render": {
|
|
84
|
+
roles: ["seller"],
|
|
85
|
+
startPage: "/store/guide",
|
|
86
|
+
steps: [
|
|
87
|
+
SIGN_IN_SELLER,
|
|
88
|
+
"Open each of these by URL in turn: /store/guide, /store/guide/capabilities, /store/guide/finance, /store/guide/listings, /store/guide/orders, /store/guide/settings and /store/guide/whatsapp.",
|
|
89
|
+
"Check every one of them is also linked from the Guide area rather than only reachable by URL.",
|
|
90
|
+
"Record any that 404 or render empty.",
|
|
91
|
+
"On two of them, check the screen they describe still exists and is named the same way.",
|
|
92
|
+
"Record any guide describing a control that is no longer there.",
|
|
93
|
+
],
|
|
94
|
+
expectedBehaviour: "Every seller guide renders and describes something that still exists. A guide has no compiler behind it, so it rots silently — and a seller following instructions for a screen that was renamed concludes the site is broken rather than the documentation.",
|
|
95
|
+
expectedUiState: "Every guide loads with real content. A 404 is a finding; so is a guide naming a screen or control that no longer exists, recorded with which guide.",
|
|
96
|
+
expectedData: { guidePagesNotFound: 0 },
|
|
97
|
+
endResult: "Read-only.",
|
|
98
|
+
},
|
|
99
|
+
"checklist-selling-store-uncovered-pages-store-listing-templates-new-renders": {
|
|
100
|
+
roles: ["seller"],
|
|
101
|
+
startPage: "/store/listing-templates/new",
|
|
102
|
+
steps: [
|
|
103
|
+
SIGN_IN_SELLER,
|
|
104
|
+
"Open /store/listing-templates/new directly by URL.",
|
|
105
|
+
"Check the form is already open rather than the page being blank.",
|
|
106
|
+
"Create a template named 'QA Template Probe' with a description and a default condition.",
|
|
107
|
+
"Save it and check the browser lands on the template list with it present.",
|
|
108
|
+
"Start creating a listing and check the template is offered and applies its defaults.",
|
|
109
|
+
"Delete the template afterwards.",
|
|
110
|
+
],
|
|
111
|
+
inputs: { name: "QA Template Probe" },
|
|
112
|
+
expectedBehaviour: "The editor page opens with its form showing, and a saved template is usable where templates are meant to be used. A template that saves and is never offered during listing creation is a feature with no consumer — which is the state a superseded template feature sat in for a long time.",
|
|
113
|
+
expectedUiState: "The form is open on arrival, the saved template is in the list, and it appears and applies when creating a listing. A template that saves and is never offered is the finding.",
|
|
114
|
+
endResult: "The probe template is deleted.",
|
|
115
|
+
},
|
|
116
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the seo/canonical-and-host checklist page.
|
|
3
|
+
* WHAT: 6 case(s), keyed by full checklist id.
|
|
4
|
+
*
|
|
5
|
+
* 🛑 THE CANONICAL HOST HAS EXACTLY ONE DEFINITION AND EVERYTHING DERIVES FROM IT.
|
|
6
|
+
* When it had two — one hardcoded, one read from an environment variable, with a
|
|
7
|
+
* comment claiming they were kept in sync — the sitemap advertised 182 URLs on a
|
|
8
|
+
* host that redirected, the destination declared a canonical on a host present in
|
|
9
|
+
* no sitemap, and the site fell out of search results with nothing erroring
|
|
10
|
+
* anywhere. These cases are the read-side proof that there is still only one.
|
|
11
|
+
*
|
|
12
|
+
* @tag domain:tester
|
|
13
|
+
* @tag layer:seed
|
|
14
|
+
* @tag pattern:none
|
|
15
|
+
* @tag access:server-only
|
|
16
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
17
|
+
* @tag sideEffects:none
|
|
18
|
+
*/
|
|
19
|
+
export const authored = {
|
|
20
|
+
"checklist-seo-canonical-and-host-apex-redirects-to-www": {
|
|
21
|
+
roles: ["guest"],
|
|
22
|
+
startPage: "/",
|
|
23
|
+
steps: [
|
|
24
|
+
"Open the site by typing the bare domain with no www prefix into the address bar.",
|
|
25
|
+
"Open the browser's network panel before the page finishes loading.",
|
|
26
|
+
"Read the status code of the FIRST response, before any redirect is followed.",
|
|
27
|
+
"Read the address bar afterwards.",
|
|
28
|
+
"Repeat with a deep path rather than the homepage.",
|
|
29
|
+
],
|
|
30
|
+
expectedBehaviour: "The apex redirects to the www host permanently. A temporary redirect explicitly tells a search engine NOT to move the index entry, so the old address stays indexed while the new one is the only place content lives — which is how a site keeps two competing addresses for every page indefinitely.",
|
|
31
|
+
expectedUiState: "The first response is a permanent redirect — a 301 or 308 — not a 307 or 302. The address bar ends on the www host, and the deep path is preserved rather than being dropped to the homepage.",
|
|
32
|
+
expectedData: { redirectIsPermanent: true },
|
|
33
|
+
endResult: "Read-only.",
|
|
34
|
+
},
|
|
35
|
+
"checklist-seo-canonical-and-host-locale-prefix-redirects-to-bare": {
|
|
36
|
+
roles: ["guest"],
|
|
37
|
+
startPage: "/products",
|
|
38
|
+
steps: [
|
|
39
|
+
"Type the products path with an /en prefix in front of it into the address bar.",
|
|
40
|
+
"Watch the network panel and read the first response's status.",
|
|
41
|
+
"Read where the address bar lands.",
|
|
42
|
+
"Open the products page from the site's own navigation and read the address bar.",
|
|
43
|
+
"Compare the two.",
|
|
44
|
+
],
|
|
45
|
+
expectedBehaviour: "A locale-prefixed path resolves to the unprefixed one, and the site's own links use the unprefixed form so no internal navigation pays the redirect. Two spellings of every path is two addresses a crawler has to reconcile, and one of them is always the slower.",
|
|
46
|
+
expectedUiState: "The prefixed path redirects and the address bar reads the bare path. The site's own navigation produces the bare path directly, with no redirect in the network panel.",
|
|
47
|
+
endResult: "Read-only.",
|
|
48
|
+
},
|
|
49
|
+
"checklist-seo-canonical-and-host-canonical-matches-visited-host": {
|
|
50
|
+
roles: ["guest"],
|
|
51
|
+
startPage: "/",
|
|
52
|
+
steps: [
|
|
53
|
+
"Open the homepage on the www host and view the page source.",
|
|
54
|
+
"Find the canonical link element and read its href.",
|
|
55
|
+
"Compare its host against the host in the address bar.",
|
|
56
|
+
"Open /products and read its canonical.",
|
|
57
|
+
"Open /products/product-beyblade-burst-valkyrie and read its canonical.",
|
|
58
|
+
"Open /sitemap.xml and read the host on the first entry.",
|
|
59
|
+
"Compare all four hosts.",
|
|
60
|
+
],
|
|
61
|
+
expectedBehaviour: "One definition of the host feeds page canonicals, social tags, structured data, robots and the sitemap. Two owners drifted the moment the deployment environment changed, and neither side errored — the sitemap simply advertised URLs that redirected while the destination pointed somewhere the sitemap never named.",
|
|
62
|
+
expectedUiState: "The canonical on every page names the same host as the address bar and as the sitemap. Any page whose canonical names a different host is the finding, named by page.",
|
|
63
|
+
expectedData: { distinctHosts: 1 },
|
|
64
|
+
endResult: "Read-only.",
|
|
65
|
+
},
|
|
66
|
+
"checklist-seo-canonical-and-host-no-inherited-homepage-canonical": {
|
|
67
|
+
roles: ["guest"],
|
|
68
|
+
startPage: "/promotions",
|
|
69
|
+
steps: [
|
|
70
|
+
"Open /reviews and view the page source.",
|
|
71
|
+
"Find the canonical link element, if there is one, and read its href.",
|
|
72
|
+
"Check it is not the homepage's URL.",
|
|
73
|
+
"Open /promotions and read its canonical the same way.",
|
|
74
|
+
"Open two more pages that are unlikely to declare their own metadata and read theirs.",
|
|
75
|
+
],
|
|
76
|
+
expectedBehaviour: "Metadata declared at the root is INHERITED by every page beneath it, so a static absolute canonical there makes every page that does not override it declare itself a duplicate of the homepage. A page either declares its own or has none.",
|
|
77
|
+
expectedUiState: "No page other than the homepage carries the homepage's URL as its canonical. Every page whose canonical reads as the bare site root is a finding, listed by path.",
|
|
78
|
+
expectedData: { pagesCanonicalisedToHomepage: 0 },
|
|
79
|
+
endResult: "Read-only.",
|
|
80
|
+
},
|
|
81
|
+
"checklist-seo-canonical-and-host-tab-family-single-canonical": {
|
|
82
|
+
roles: ["guest"],
|
|
83
|
+
startPage: "/stores/store-beyblade-arena",
|
|
84
|
+
steps: [
|
|
85
|
+
"Open /stores/store-beyblade-arena and read its canonical from the page source.",
|
|
86
|
+
"Open the store's About tab and read its canonical.",
|
|
87
|
+
"Open two more of the store's tabs and read theirs.",
|
|
88
|
+
"Compare all four canonicals.",
|
|
89
|
+
"Read each tab's title and description as well.",
|
|
90
|
+
],
|
|
91
|
+
inputs: { storeId: "store-beyblade-arena" },
|
|
92
|
+
expectedBehaviour: "Tabs are views of ONE page, so they share one canonical — the store's own URL, which is the one the sitemap advertises. Four competing canonicals split the section into four addresses, none of which is the advertised one. Titles and descriptions genuinely differ per tab and must keep differing.",
|
|
93
|
+
expectedUiState: "All four tabs declare the same canonical, and it is the store's base URL. Each tab still has its own title and description. Four different canonicals is the failure; four identical titles is a separate, smaller one.",
|
|
94
|
+
expectedData: { distinctCanonicals: 1 },
|
|
95
|
+
endResult: "Read-only.",
|
|
96
|
+
},
|
|
97
|
+
"checklist-seo-canonical-and-host-redirect-only-page-no-canonical": {
|
|
98
|
+
roles: ["guest"],
|
|
99
|
+
startPage: "/promotions",
|
|
100
|
+
steps: [
|
|
101
|
+
"Open the network panel and navigate to /promotions.",
|
|
102
|
+
"Read whether the first response is a redirect.",
|
|
103
|
+
"Read where it lands.",
|
|
104
|
+
"View the source of the page it landed on and read its canonical.",
|
|
105
|
+
"Check that canonical names the LANDING page rather than /promotions.",
|
|
106
|
+
],
|
|
107
|
+
expectedBehaviour: "A redirect fires before any document is produced, so metadata declared on a redirecting page never reaches a browser at all — a crawler follows the redirect and reads the canonical of the page it lands on. Metadata there is code that reads as though it were doing something and is not.",
|
|
108
|
+
expectedUiState: "The redirect resolves and the landing page's canonical names the landing page. A canonical naming the redirecting path is the failure.",
|
|
109
|
+
endResult: "Read-only.",
|
|
110
|
+
},
|
|
111
|
+
};
|