@mohasinac/appkit 4.58.0 → 4.59.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/.build-stamp.json +3 -3
- package/dist/_internal/server/jobs/handlers/messages.d.ts +1 -1
- package/dist/_internal/server/jobs/handlers/messages.js +1 -1
- package/dist/_internal/shared/types/base-document.d.ts +1 -1
- package/dist/constants/seed-meta.d.ts +113 -0
- package/dist/constants/seed-meta.js +91 -0
- package/dist/index.d.ts +0 -131
- package/dist/index.js +50 -294
- package/dist/server.d.ts +0 -69
- package/dist/server.js +0 -69
- package/package.json +4 -2
- package/scripts/seed-cli.mjs +69 -1
- package/dist/features/tester/seed-data/_happy-path.d.ts +0 -23
- package/dist/features/tester/seed-data/_happy-path.js +0 -710
- package/dist/features/tester/seed-data/_money-flows.d.ts +0 -23
- package/dist/features/tester/seed-data/_money-flows.js +0 -610
- package/dist/features/tester/seed-data/authored/_types.d.ts +0 -57
- package/dist/features/tester/seed-data/authored/_types.js +0 -35
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +0 -226
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +0 -329
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +0 -41
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +0 -76
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +0 -78
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +0 -59
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +0 -77
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +0 -151
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +0 -131
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bug-hunter-rewards.js +0 -143
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +0 -207
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__bundles.js +0 -144
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +0 -265
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +0 -318
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +0 -177
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +0 -165
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +0 -267
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +0 -188
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__coupons.js +0 -215
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +0 -202
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__firebase-function-effects.js +0 -249
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +0 -148
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +0 -350
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +0 -129
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__site-system.js +0 -586
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +0 -260
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +0 -569
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__bidding.js +0 -449
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +0 -684
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +0 -546
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +0 -379
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__cart.js +0 -1264
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +0 -122
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +0 -279
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__offers.js +0 -1127
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +0 -153
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +0 -252
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +0 -474
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__return-request.js +0 -165
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +0 -260
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__reviews.js +0 -128
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__spares-and-groups.js +0 -96
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +0 -283
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +0 -169
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +0 -105
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +0 -374
- package/dist/features/tester/seed-data/authored/community-support__messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__messages.js +0 -200
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +0 -54
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +0 -76
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.d.ts +0 -4
- package/dist/features/tester/seed-data/authored/content-discovery__authenticity-checker.js +0 -590
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +0 -110
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +0 -149
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +0 -145
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__category-tabs-franchise-bundles.js +0 -174
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +0 -169
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +0 -207
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +0 -377
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +0 -87
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +0 -147
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__overflowing-pill-rows.js +0 -209
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__parts-database.js +0 -167
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__price-index-and-compare.js +0 -73
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +0 -363
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__site-wide-index.js +0 -340
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js +0 -88
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +0 -78
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +0 -76
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +0 -62
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +0 -163
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +0 -61
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__action-bar-placement.js +0 -89
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +0 -95
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +0 -191
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +0 -158
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__feature-badge-picker.js +0 -82
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +0 -106
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +0 -204
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +0 -301
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-brand-mark-centring.js +0 -90
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__header-controls-and-messages.js +0 -85
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +0 -407
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__nav-reachability.js +0 -88
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__rich-text-readability.js +0 -84
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +0 -214
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +0 -275
- package/dist/features/tester/seed-data/authored/index.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/index.js +0 -301
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +0 -125
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +0 -85
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +0 -92
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +0 -137
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +0 -263
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +0 -229
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +0 -325
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +0 -126
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__newly-wired-browse-indexes.js +0 -141
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__store-tabs.js +0 -115
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +0 -253
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +0 -93
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +0 -3
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +0 -185
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +0 -82
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +0 -60
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +0 -117
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +0 -148
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +0 -108
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +0 -274
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +0 -145
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +0 -336
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +0 -136
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +0 -135
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__product-upload-details.js +0 -155
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__quick-add-minimum-details.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +0 -191
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +0 -138
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +0 -106
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +0 -109
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +0 -34
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +0 -348
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +0 -87
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +0 -90
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders-at-scale.js +0 -85
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +0 -213
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +0 -192
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__spares-and-group-editing.js +0 -77
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +0 -165
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +0 -116
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +0 -127
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__og-images.js +0 -107
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +0 -120
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +0 -105
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-promote-to-listings.js +0 -58
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.d.ts +0 -2
- package/dist/features/tester/seed-data/authored/tools__sticker-tracer.js +0 -284
- package/dist/features/tester/seed-data/index.d.ts +0 -2
- package/dist/features/tester/seed-data/index.js +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +0 -7601
- package/dist/features/tester/seed-data/tester-responses-seed-data.d.ts +0 -2
- package/dist/features/tester/seed-data/tester-responses-seed-data.js +0 -95
- package/dist/features/tester/seed-data/tester-window.d.ts +0 -25
- package/dist/features/tester/seed-data/tester-window.js +0 -66
- package/dist/seed/_helpers/brand-rows.d.ts +0 -35
- package/dist/seed/_helpers/brand-rows.js +0 -600
- package/dist/seed/_helpers/category-content-generated.d.ts +0 -24
- package/dist/seed/_helpers/category-content-generated.js +0 -1853
- package/dist/seed/_helpers/category-content.d.ts +0 -68
- package/dist/seed/_helpers/category-content.js +0 -731
- package/dist/seed/_helpers/category-forest.d.ts +0 -4
- package/dist/seed/_helpers/category-forest.js +0 -824
- package/dist/seed/_helpers/category-images-generated.d.ts +0 -57
- package/dist/seed/_helpers/category-images-generated.js +0 -618
- package/dist/seed/_helpers/category-models/chunk0.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk0.js +0 -2648
- package/dist/seed/_helpers/category-models/chunk1.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk1.js +0 -2318
- package/dist/seed/_helpers/category-models/chunk2.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk2.js +0 -2560
- package/dist/seed/_helpers/category-models/chunk3.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk3.js +0 -2196
- package/dist/seed/_helpers/category-models/chunk4.d.ts +0 -2
- package/dist/seed/_helpers/category-models/chunk4.js +0 -1732
- package/dist/seed/_helpers/category-models.d.ts +0 -12
- package/dist/seed/_helpers/category-models.js +0 -45
- package/dist/seed/_helpers/category-names.d.ts +0 -54
- package/dist/seed/_helpers/category-names.js +0 -118
- package/dist/seed/_helpers/category-parts-glossary-map.d.ts +0 -1
- package/dist/seed/_helpers/category-parts-glossary-map.js +0 -2499
- package/dist/seed/_helpers/category-parts.d.ts +0 -9
- package/dist/seed/_helpers/category-parts.js +0 -15022
- package/dist/seed/_helpers/category-tree.d.ts +0 -27
- package/dist/seed/_helpers/category-tree.js +0 -119
- package/dist/seed/_helpers/character-features.d.ts +0 -10
- package/dist/seed/_helpers/character-features.js +0 -120
- package/dist/seed/_helpers/final-sale-fixtures.d.ts +0 -35
- package/dist/seed/_helpers/final-sale-fixtures.js +0 -61
- package/dist/seed/_helpers/franchise-rows.d.ts +0 -43
- package/dist/seed/_helpers/franchise-rows.js +0 -189
- package/dist/seed/_helpers/media.d.ts +0 -67
- package/dist/seed/_helpers/media.js +0 -172
- package/dist/seed/_helpers/part-colours-generated.d.ts +0 -18
- package/dist/seed/_helpers/part-colours-generated.js +0 -273
- package/dist/seed/_helpers/product-search-txt.d.ts +0 -18
- package/dist/seed/_helpers/product-search-txt.js +0 -23
- package/dist/seed/_helpers/search-txt-wrappers.d.ts +0 -26
- package/dist/seed/_helpers/search-txt-wrappers.js +0 -58
- package/dist/seed/addresses-seed-data.d.ts +0 -2
- package/dist/seed/addresses-seed-data.js +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.d.ts +0 -78
- package/dist/seed/authenticity-knowledge-seed-data.js +0 -10729
- package/dist/seed/bey-products-seed-data.d.ts +0 -18
- package/dist/seed/bey-products-seed-data.js +0 -18011
- package/dist/seed/beys/chunk0.d.ts +0 -17
- package/dist/seed/beys/chunk0.js +0 -36733
- package/dist/seed/beys/chunk1.d.ts +0 -17
- package/dist/seed/beys/chunk1.js +0 -35728
- package/dist/seed/beys/chunk2.d.ts +0 -17
- package/dist/seed/beys/chunk2.js +0 -35857
- package/dist/seed/beys/chunk3.d.ts +0 -17
- package/dist/seed/beys/chunk3.js +0 -34476
- package/dist/seed/beys-seed-data.d.ts +0 -18
- package/dist/seed/beys-seed-data.js +0 -11
- package/dist/seed/bids-seed-data.d.ts +0 -2
- package/dist/seed/bids-seed-data.js +0 -206
- package/dist/seed/blog-posts-seed-data.d.ts +0 -6
- package/dist/seed/blog-posts-seed-data.js +0 -442
- package/dist/seed/carousel-slides-seed-data.d.ts +0 -2
- package/dist/seed/carousel-slides-seed-data.js +0 -411
- package/dist/seed/carousels-seed-data.d.ts +0 -2
- package/dist/seed/carousels-seed-data.js +0 -36
- package/dist/seed/cart-seed-data.d.ts +0 -2
- package/dist/seed/cart-seed-data.js +0 -241
- package/dist/seed/catalogue-seed-data.d.ts +0 -2
- package/dist/seed/catalogue-seed-data.js +0 -112
- package/dist/seed/categories-seed-data.d.ts +0 -3
- package/dist/seed/categories-seed-data.js +0 -816
- package/dist/seed/claimed-coupons-seed-data.d.ts +0 -2
- package/dist/seed/claimed-coupons-seed-data.js +0 -85
- package/dist/seed/coupon-usage-seed-data.d.ts +0 -9
- package/dist/seed/coupon-usage-seed-data.js +0 -55
- package/dist/seed/coupons-seed-data.d.ts +0 -2
- package/dist/seed/coupons-seed-data.js +0 -226
- package/dist/seed/defaults/categories.d.ts +0 -2
- package/dist/seed/defaults/categories.js +0 -12
- package/dist/seed/defaults/faqs.d.ts +0 -2
- package/dist/seed/defaults/faqs.js +0 -40
- package/dist/seed/events-seed-data.d.ts +0 -7
- package/dist/seed/events-seed-data.js +0 -482
- package/dist/seed/factories/address.factory.d.ts +0 -21
- package/dist/seed/factories/address.factory.js +0 -44
- package/dist/seed/factories/bid.factory.d.ts +0 -15
- package/dist/seed/factories/bid.factory.js +0 -33
- package/dist/seed/factories/blog-post.factory.d.ts +0 -15
- package/dist/seed/factories/blog-post.factory.js +0 -22
- package/dist/seed/factories/carousel.factory.d.ts +0 -11
- package/dist/seed/factories/carousel.factory.js +0 -17
- package/dist/seed/factories/cart.factory.d.ts +0 -25
- package/dist/seed/factories/cart.factory.js +0 -35
- package/dist/seed/factories/category.factory.d.ts +0 -11
- package/dist/seed/factories/category.factory.js +0 -16
- package/dist/seed/factories/coupon.factory.d.ts +0 -21
- package/dist/seed/factories/coupon.factory.js +0 -43
- package/dist/seed/factories/faq.factory.d.ts +0 -10
- package/dist/seed/factories/faq.factory.js +0 -15
- package/dist/seed/factories/notification.factory.d.ts +0 -18
- package/dist/seed/factories/notification.factory.js +0 -39
- package/dist/seed/factories/order.factory.d.ts +0 -20
- package/dist/seed/factories/order.factory.js +0 -20
- package/dist/seed/factories/payout.factory.d.ts +0 -21
- package/dist/seed/factories/payout.factory.js +0 -38
- package/dist/seed/factories/product.factory.d.ts +0 -27
- package/dist/seed/factories/product.factory.js +0 -80
- package/dist/seed/factories/review.factory.d.ts +0 -14
- package/dist/seed/factories/review.factory.js +0 -52
- package/dist/seed/factories/session.factory.d.ts +0 -15
- package/dist/seed/factories/session.factory.js +0 -31
- package/dist/seed/factories/store.factory.d.ts +0 -23
- package/dist/seed/factories/store.factory.js +0 -47
- package/dist/seed/factories/user.factory.d.ts +0 -19
- package/dist/seed/factories/user.factory.js +0 -56
- package/dist/seed/faq-seed-data.d.ts +0 -18
- package/dist/seed/faq-seed-data.js +0 -1956
- package/dist/seed/firestore-indexes.d.ts +0 -12
- package/dist/seed/firestore-indexes.js +0 -31
- package/dist/seed/grouped-listings-seed-data.d.ts +0 -2
- package/dist/seed/grouped-listings-seed-data.js +0 -283
- package/dist/seed/history-seed-data.d.ts +0 -12
- package/dist/seed/history-seed-data.js +0 -70
- package/dist/seed/homepage-sections-seed-data.d.ts +0 -2
- package/dist/seed/homepage-sections-seed-data.js +0 -1034
- package/dist/seed/index.d.ts +0 -100
- package/dist/seed/index.js +0 -115
- package/dist/seed/lottery-entries-seed-data.d.ts +0 -2
- package/dist/seed/lottery-entries-seed-data.js +0 -108
- package/dist/seed/manifest.d.ts +0 -16
- package/dist/seed/manifest.js +0 -235
- package/dist/seed/media-assets-seed-data.d.ts +0 -22
- package/dist/seed/media-assets-seed-data.js +0 -5593
- package/dist/seed/model-composition-seed-data.d.ts +0 -15
- package/dist/seed/model-composition-seed-data.js +0 -9032
- package/dist/seed/notifications-seed-data.d.ts +0 -2
- package/dist/seed/notifications-seed-data.js +0 -606
- package/dist/seed/offers-seed-data.d.ts +0 -2
- package/dist/seed/offers-seed-data.js +0 -398
- package/dist/seed/orders-seed-data.d.ts +0 -2
- package/dist/seed/orders-seed-data.js +0 -845
- package/dist/seed/part-glossary/chunk0.d.ts +0 -9
- package/dist/seed/part-glossary/chunk0.js +0 -35448
- package/dist/seed/part-glossary/chunk1.d.ts +0 -9
- package/dist/seed/part-glossary/chunk1.js +0 -40494
- package/dist/seed/part-glossary/chunk2.d.ts +0 -9
- package/dist/seed/part-glossary/chunk2.js +0 -51242
- package/dist/seed/part-glossary/chunk3.d.ts +0 -9
- package/dist/seed/part-glossary/chunk3.js +0 -53337
- package/dist/seed/part-glossary/chunk4.d.ts +0 -9
- package/dist/seed/part-glossary/chunk4.js +0 -51454
- package/dist/seed/part-glossary-seed-data.d.ts +0 -15
- package/dist/seed/part-glossary-seed-data.js +0 -25
- package/dist/seed/payouts-seed-data.d.ts +0 -2
- package/dist/seed/payouts-seed-data.js +0 -302
- package/dist/seed/product-features-seed-data.d.ts +0 -3
- package/dist/seed/product-features-seed-data.js +0 -366
- package/dist/seed/products-art-seed-data.d.ts +0 -2
- package/dist/seed/products-art-seed-data.js +0 -289
- package/dist/seed/products-auctions-seed-data.d.ts +0 -2
- package/dist/seed/products-auctions-seed-data.js +0 -475
- package/dist/seed/products-beyblade-x-seed-data.d.ts +0 -2
- package/dist/seed/products-beyblade-x-seed-data.js +0 -476
- package/dist/seed/products-catalogue/chunk0.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk0.js +0 -7262
- package/dist/seed/products-catalogue/chunk1.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk1.js +0 -7290
- package/dist/seed/products-catalogue/chunk10.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk10.js +0 -7290
- package/dist/seed/products-catalogue/chunk11.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk11.js +0 -7005
- package/dist/seed/products-catalogue/chunk12.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk12.js +0 -7002
- package/dist/seed/products-catalogue/chunk13.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk13.js +0 -7002
- package/dist/seed/products-catalogue/chunk14.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk14.js +0 -7002
- package/dist/seed/products-catalogue/chunk15.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk15.js +0 -7002
- package/dist/seed/products-catalogue/chunk16.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk16.js +0 -7002
- package/dist/seed/products-catalogue/chunk17.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk17.js +0 -7002
- package/dist/seed/products-catalogue/chunk18.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk18.js +0 -4398
- package/dist/seed/products-catalogue/chunk2.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk2.js +0 -7268
- package/dist/seed/products-catalogue/chunk3.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk3.js +0 -7264
- package/dist/seed/products-catalogue/chunk4.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk4.js +0 -7268
- package/dist/seed/products-catalogue/chunk5.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk5.js +0 -7258
- package/dist/seed/products-catalogue/chunk6.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk6.js +0 -7268
- package/dist/seed/products-catalogue/chunk7.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk7.js +0 -7311
- package/dist/seed/products-catalogue/chunk8.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk8.js +0 -7304
- package/dist/seed/products-catalogue/chunk9.d.ts +0 -12
- package/dist/seed/products-catalogue/chunk9.js +0 -7309
- package/dist/seed/products-catalogue-seed-data.d.ts +0 -2
- package/dist/seed/products-catalogue-seed-data.js +0 -60
- package/dist/seed/products-classifieds-seed-data.d.ts +0 -7
- package/dist/seed/products-classifieds-seed-data.js +0 -435
- package/dist/seed/products-digital-codes-seed-data.d.ts +0 -7
- package/dist/seed/products-digital-codes-seed-data.js +0 -395
- package/dist/seed/products-live-items-seed-data.d.ts +0 -7
- package/dist/seed/products-live-items-seed-data.js +0 -269
- package/dist/seed/products-preorders-seed-data.d.ts +0 -2
- package/dist/seed/products-preorders-seed-data.js +0 -360
- package/dist/seed/products-prize-draws-seed-data.d.ts +0 -7
- package/dist/seed/products-prize-draws-seed-data.js +0 -427
- package/dist/seed/products-spares-seed-data.d.ts +0 -2
- package/dist/seed/products-spares-seed-data.js +0 -368
- package/dist/seed/products-standard-seed-data.d.ts +0 -2
- package/dist/seed/products-standard-seed-data.js +0 -632
- package/dist/seed/products-stickers-seed-data.d.ts +0 -2
- package/dist/seed/products-stickers-seed-data.js +0 -319
- package/dist/seed/reviews-seed-data.d.ts +0 -1
- package/dist/seed/reviews-seed-data.js +0 -185
- package/dist/seed/runner.d.ts +0 -2
- package/dist/seed/runner.js +0 -125
- package/dist/seed/scammers-seed-data.d.ts +0 -2
- package/dist/seed/scammers-seed-data.js +0 -235
- package/dist/seed/seed-market-config.d.ts +0 -48
- package/dist/seed/seed-market-config.js +0 -199
- package/dist/seed/seed-purpose.d.ts +0 -299
- package/dist/seed/seed-purpose.js +0 -440
- package/dist/seed/sessions-seed-data.d.ts +0 -3
- package/dist/seed/sessions-seed-data.js +0 -116
- package/dist/seed/shipments-seed-data.d.ts +0 -5
- package/dist/seed/shipments-seed-data.js +0 -185
- package/dist/seed/site-settings-seed-data.d.ts +0 -2
- package/dist/seed/site-settings-seed-data.js +0 -1069
- package/dist/seed/store-addresses-seed-data.d.ts +0 -18
- package/dist/seed/store-addresses-seed-data.js +0 -71
- package/dist/seed/store-extensions-seed-data.d.ts +0 -11
- package/dist/seed/store-extensions-seed-data.js +0 -292
- package/dist/seed/stores-seed-data.d.ts +0 -6
- package/dist/seed/stores-seed-data.js +0 -242
- package/dist/seed/support-tickets-seed-data.d.ts +0 -16
- package/dist/seed/support-tickets-seed-data.js +0 -239
- package/dist/seed/tax-codes-seed-data.d.ts +0 -34
- package/dist/seed/tax-codes-seed-data.js +0 -100
- package/dist/seed/test-data-ttl.d.ts +0 -29
- package/dist/seed/test-data-ttl.js +0 -31
- package/dist/seed/test-utils.d.ts +0 -49
- package/dist/seed/test-utils.js +0 -110
- package/dist/seed/types.d.ts +0 -89
- package/dist/seed/types.js +0 -15
- package/dist/seed/users-seed-data.d.ts +0 -2
- package/dist/seed/users-seed-data.js +0 -597
- package/dist/seed/wishlists-seed-data.d.ts +0 -12
- package/dist/seed/wishlists-seed-data.js +0 -54
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the site-wide search index cases
|
|
3
|
-
* added 2026-10-19 to the content-discovery/search page.
|
|
4
|
-
* WHAT: 17 case(s), keyed by full checklist id.
|
|
5
|
-
*
|
|
6
|
-
* 🛑 EVERY CASE CARRIES A CONTROL. A search box that has stopped filtering
|
|
7
|
-
* returns plausible rows for any real term and looks identical to one that
|
|
8
|
-
* works — "zzzznope" returning zero is the only kind of assertion here that
|
|
9
|
-
* cannot pass by accident. That is this directory's standing rule and it is
|
|
10
|
-
* why the control is a STEP, not a footnote.
|
|
11
|
-
*
|
|
12
|
-
* 🛑 Several of these check the NETWORK PANEL rather than the page, and that
|
|
13
|
-
* is deliberate. "Zero Firestore reads per keystroke" and "a guest issues no
|
|
14
|
-
* authenticated request" are the two claims the whole design rests on, and
|
|
15
|
-
* neither is visible on screen — a page that fetches per keystroke looks
|
|
16
|
-
* exactly like one that does not.
|
|
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-content-discovery-search-search-finds-every-type": {
|
|
27
|
-
roles: ["guest"],
|
|
28
|
-
startPage: "/",
|
|
29
|
-
steps: [
|
|
30
|
-
"Open / in a private window with no session.",
|
|
31
|
-
"Click the header search and type dranzer.",
|
|
32
|
-
"Press Enter.",
|
|
33
|
-
"Read the URL in the address bar.",
|
|
34
|
-
"Count how many distinct section headings the results page shows.",
|
|
35
|
-
"Go back, type zzzznope, and press Enter.",
|
|
36
|
-
"Read what the page says.",
|
|
37
|
-
],
|
|
38
|
-
inputs: { query: "dranzer", control: "zzzznope" },
|
|
39
|
-
expectedBehaviour: "Submitting navigates to the cross-resource results page and searches every indexed type at once, rather than redirecting to one browse route chosen by the type dropdown.",
|
|
40
|
-
expectedUiState: "The URL is /search?q=dranzer, not /products?q=dranzer. Results appear under several headings (for example Products, Categories, Parts, Articles), each with its own 'See all … →' link. For zzzznope the page says nothing matched and shows ZERO result rows — that control is the only assertion here that cannot pass by accident.",
|
|
41
|
-
endResult: "Read-only; nothing persists.",
|
|
42
|
-
},
|
|
43
|
-
"checklist-content-discovery-search-search-finds-a-part": {
|
|
44
|
-
roles: ["guest"],
|
|
45
|
-
startPage: "/search",
|
|
46
|
-
steps: [
|
|
47
|
-
"Open /search?q=Rubber Flat in a private window.",
|
|
48
|
-
"Read every result row and note which section each sits under.",
|
|
49
|
-
"Change the query to RF and search again.",
|
|
50
|
-
"Compare the two result sets.",
|
|
51
|
-
"Click the part row and read the page it lands on.",
|
|
52
|
-
],
|
|
53
|
-
inputs: { byName: "Rubber Flat", byCode: "RF" },
|
|
54
|
-
expectedBehaviour: "Parts are searchable by full name and by code. Before this they had no search tokens at all — all 752 were reachable only by drilling /parts into a classification and then a code.",
|
|
55
|
-
expectedUiState: "Both queries return the part under a Parts heading, and the row shows its classification on a second line underneath the name. Clicking it lands on a real /parts/<classification>/<code> page, not a 404.",
|
|
56
|
-
endResult: "Read-only; nothing persists.",
|
|
57
|
-
},
|
|
58
|
-
"checklist-content-discovery-search-search-ambiguous-part-code": {
|
|
59
|
-
roles: ["guest"],
|
|
60
|
-
startPage: "/search",
|
|
61
|
-
steps: [
|
|
62
|
-
"Open /search?q=105 in a private window.",
|
|
63
|
-
"Count the rows under the Parts heading.",
|
|
64
|
-
"Read the second line of each row and write down the classification it names.",
|
|
65
|
-
"Click two different rows in turn and write down the URL each lands on.",
|
|
66
|
-
],
|
|
67
|
-
inputs: { query: "105" },
|
|
68
|
-
expectedBehaviour: "A bare code is ambiguous across generations — 105 is a Metal Fight spin-track height while a bare number in Burst is a disc — so the engine must return all of them rather than picking one.",
|
|
69
|
-
expectedUiState: "SEVERAL rows, each naming a DIFFERENT classification, each linking to a different /parts/<classification>/105 URL. Exactly one row is the FAILURE: it means something chose a winner for the user.",
|
|
70
|
-
endResult: "Read-only; nothing persists.",
|
|
71
|
-
},
|
|
72
|
-
"checklist-content-discovery-search-search-midword": {
|
|
73
|
-
roles: ["guest"],
|
|
74
|
-
startPage: "/search",
|
|
75
|
-
steps: [
|
|
76
|
-
"Open /search?q=ariza in a private window.",
|
|
77
|
-
"Read the result rows.",
|
|
78
|
-
"Change the query to zzzz and search again.",
|
|
79
|
-
"Read what the page says.",
|
|
80
|
-
],
|
|
81
|
-
inputs: { midword: "ariza", control: "zzzz" },
|
|
82
|
-
expectedBehaviour: "The browser scans the whole index, so a fragment from the MIDDLE of a word matches. The Firestore path structurally cannot do this — its tokens are word-prefix only.",
|
|
83
|
-
expectedUiState: "'ariza' returns Charizard rows. 'zzzz' returns nothing — without that control a matcher returning everything for any fragment would also pass the first half.",
|
|
84
|
-
endResult: "Read-only; nothing persists.",
|
|
85
|
-
},
|
|
86
|
-
"checklist-content-discovery-search-search-typo": {
|
|
87
|
-
roles: ["guest"],
|
|
88
|
-
startPage: "/search",
|
|
89
|
-
steps: [
|
|
90
|
-
"Open /search?q=dragon g in a private window.",
|
|
91
|
-
"Read the result rows.",
|
|
92
|
-
"Search again for Pegasis (note the spelling: 'sis', not 'sus').",
|
|
93
|
-
"Read the result rows.",
|
|
94
|
-
],
|
|
95
|
-
inputs: { typo1: "dragon g", typo2: "Pegasis" },
|
|
96
|
-
expectedBehaviour: "Misspellings are expanded at INDEX time from a crawl of a counterfeit seller's real titles, on the measured insight that an evasion spelling is the same string a genuine buyer mistypes.",
|
|
97
|
-
expectedUiState: "'dragon g' returns Dragoon G. 'Pegasis' returns Storm Pegasus. Neither returns an empty state.",
|
|
98
|
-
endResult: "Read-only; nothing persists.",
|
|
99
|
-
},
|
|
100
|
-
"checklist-content-discovery-search-search-normalised-away": {
|
|
101
|
-
roles: ["guest"],
|
|
102
|
-
startPage: "/search",
|
|
103
|
-
steps: [
|
|
104
|
-
"Open /search?q=!!! in a private window.",
|
|
105
|
-
"Read the message on the page word for word.",
|
|
106
|
-
"Count the result rows.",
|
|
107
|
-
"Now search zzzznope and read that message too.",
|
|
108
|
-
"Compare the two messages.",
|
|
109
|
-
],
|
|
110
|
-
inputs: { punctuation: "!!!", nonsense: "zzzznope" },
|
|
111
|
-
expectedBehaviour: "A query that normalises to no searchable words must return NOTHING, never everything. The inverse of this bug shipped on /api/products once: a punctuation-only query produced no filter clause and returned the entire published catalogue as search results.",
|
|
112
|
-
expectedUiState: "'!!!' says the search had no searchable words in it. 'zzzznope' says nothing matched. The two messages are DIFFERENT — one means we could not form a query, the other means we ran one and found none. Any rows at all for '!!!' is the failure.",
|
|
113
|
-
endResult: "Read-only; nothing persists.",
|
|
114
|
-
},
|
|
115
|
-
"checklist-content-discovery-search-search-zero-reads": {
|
|
116
|
-
roles: ["guest"],
|
|
117
|
-
startPage: "/",
|
|
118
|
-
steps: [
|
|
119
|
-
"Open / in a private window and open DevTools → Network.",
|
|
120
|
-
"Clear the network log.",
|
|
121
|
-
"Click into the header search and type d.",
|
|
122
|
-
"Wait for suggestions to appear, then type r, a, n, z, e, r one character at a time.",
|
|
123
|
-
"Read the network log and count the requests made after the first one.",
|
|
124
|
-
],
|
|
125
|
-
inputs: { query: "dranzer" },
|
|
126
|
-
expectedBehaviour: "The index is fetched ONCE per page session and searched locally thereafter. Before this, every keystroke was a request to /api/search/suggestions, which was four parallel Firestore reads.",
|
|
127
|
-
expectedUiState: "The log shows ONE large .json fetch from firebasestorage (a few hundred KB) on the first focus or keystroke, and NOTHING further as you keep typing. A request per character is the failure even though the suggestions look identical either way.",
|
|
128
|
-
endResult: "Read-only; nothing persists.",
|
|
129
|
-
},
|
|
130
|
-
"checklist-content-discovery-search-search-no-prices": {
|
|
131
|
-
roles: ["guest"],
|
|
132
|
-
startPage: "/",
|
|
133
|
-
steps: [
|
|
134
|
-
"Open / in a private window with no session.",
|
|
135
|
-
"Click the header search and type dranzer.",
|
|
136
|
-
"Read every suggestion row, including the small second line.",
|
|
137
|
-
"Press Enter and read every row on the results page.",
|
|
138
|
-
"Search the rendered page for the ₹ character.",
|
|
139
|
-
],
|
|
140
|
-
inputs: { query: "dranzer" },
|
|
141
|
-
expectedBehaviour: "Prices are hidden from signed-out visitors so the catalogue cannot be read at scale without an account. The suggestion subtitle used to be the product's price, served from a route cached PUBLIC for 60 seconds — a live leak on every page of the site.",
|
|
142
|
-
expectedUiState: "Suggestion subtitles show the brand and category, e.g. 'Takara-Tomy · Attack Rings'. No ₹ appears anywhere in the dropdown or in the results, signed out.",
|
|
143
|
-
endResult: "Read-only; nothing persists.",
|
|
144
|
-
},
|
|
145
|
-
"checklist-content-discovery-search-search-no-sandbox": {
|
|
146
|
-
roles: ["guest"],
|
|
147
|
-
startPage: "/search",
|
|
148
|
-
steps: [
|
|
149
|
-
"Open /search?q=sandbox in a private window with no session.",
|
|
150
|
-
"Read every result row.",
|
|
151
|
-
"Search again for tester and read every row.",
|
|
152
|
-
"Note any row whose title or detail names a tester or sandbox fixture.",
|
|
153
|
-
],
|
|
154
|
-
inputs: { query1: "sandbox", query2: "tester" },
|
|
155
|
-
expectedBehaviour: "The index is ONE shared file every browser downloads, with no per-viewer filter anywhere after it is built — so a test-data row in it is published to the world for that version's whole lifetime, and an immutable object cannot be recalled.",
|
|
156
|
-
expectedUiState: "No row seeded as test data appears. Finding even one is a disclosure, not a cosmetic issue.",
|
|
157
|
-
endResult: "Read-only; nothing persists.",
|
|
158
|
-
},
|
|
159
|
-
"checklist-content-discovery-search-search-freshness": {
|
|
160
|
-
roles: ["seller"],
|
|
161
|
-
startPage: "/store/products/new",
|
|
162
|
-
steps: [
|
|
163
|
-
"Create and PUBLISH a listing with a distinctive title, e.g. Freshness Probe Dranzer.",
|
|
164
|
-
"Write down the time.",
|
|
165
|
-
"Open /search in a private window and search that exact title.",
|
|
166
|
-
"If it is absent, wait and retry every few minutes for up to 20 minutes.",
|
|
167
|
-
"Once it appears, go back and UNPUBLISH the listing.",
|
|
168
|
-
"Search the same title again, retrying for up to 20 minutes.",
|
|
169
|
-
],
|
|
170
|
-
inputs: { title: "Freshness Probe Dranzer" },
|
|
171
|
-
expectedBehaviour: "A content write marks the index stale and the scheduled job rebuilds within about 15 minutes. An unpublished listing still has a fresh updatedAt, so the incremental pass re-reads it, sees it fail the published filter, and removes it.",
|
|
172
|
-
expectedUiState: "The listing becomes findable within ~15 minutes of publishing and disappears within ~15 minutes of unpublishing. A row that NEVER appears and a row that never LEAVES are both failures, and both mean the rebuild has stopped — note which one you saw.",
|
|
173
|
-
endResult: "Delete the probe listing afterwards. Its absence from search within ~15 minutes is itself the final check.",
|
|
174
|
-
},
|
|
175
|
-
"checklist-content-discovery-search-search-facet-counts": {
|
|
176
|
-
roles: ["guest"],
|
|
177
|
-
startPage: "/search",
|
|
178
|
-
steps: [
|
|
179
|
-
"Open /search?q=beyblade in a private window.",
|
|
180
|
-
"Find the facet chips above the results and write down each chip's label and number.",
|
|
181
|
-
"Count the result rows actually shown for one type and compare it with that chip's number.",
|
|
182
|
-
"Click one chip.",
|
|
183
|
-
"Read the result rows again, and read the other chips' numbers again.",
|
|
184
|
-
"Click the same chip a second time to clear it.",
|
|
185
|
-
],
|
|
186
|
-
inputs: { query: "beyblade" },
|
|
187
|
-
expectedBehaviour: "Facet counts are computed over the hits the current query produced, in memory. The Firestore path cannot afford this — it is one aggregation query per facet value, each needing its own composite index, and it returns no count at all when an index is missing.",
|
|
188
|
-
expectedUiState: "Chips show a number each. Clicking one narrows the results AND lowers the other chips' numbers to match. Clicking again restores both. A chip that does not change the results, or a number that disagrees with the rows you can count, is the failure.",
|
|
189
|
-
endResult: "Read-only; the selection is not persisted and is gone on reload.",
|
|
190
|
-
},
|
|
191
|
-
"checklist-content-discovery-search-search-guest-no-private": {
|
|
192
|
-
roles: ["guest"],
|
|
193
|
-
startPage: "/search",
|
|
194
|
-
steps: [
|
|
195
|
-
"Open a private window with no session and open DevTools → Network.",
|
|
196
|
-
"Clear the network log.",
|
|
197
|
-
"Go to /search?q=order.",
|
|
198
|
-
"Read every request in the log.",
|
|
199
|
-
"Look specifically for any request whose path contains /api/search/scoped.",
|
|
200
|
-
"Read the page for any section headed 'Your …' or 'Admin'.",
|
|
201
|
-
],
|
|
202
|
-
inputs: { query: "order" },
|
|
203
|
-
expectedBehaviour: "A signed-out visitor must make NO authenticated request at all — not a 401, not an empty 200. The client gate, the route's auth requirement and the empty source list are three independent gates, because the expensive failure is not a guest seeing an error, it is a guest silently receiving someone's data.",
|
|
204
|
-
expectedUiState: "No /api/search/scoped request appears in the log in any form. No account or admin section renders on the page. A 401 in the log is still a FAIL — it means the request was issued.",
|
|
205
|
-
endResult: "Read-only; nothing persists.",
|
|
206
|
-
},
|
|
207
|
-
"checklist-content-discovery-search-search-buyer-isolation": {
|
|
208
|
-
roles: ["buyer"],
|
|
209
|
-
startPage: "/search",
|
|
210
|
-
steps: [
|
|
211
|
-
"Sign in as one buyer.",
|
|
212
|
-
"From an admin session in another browser, find a DIFFERENT buyer's order and note a distinctive word from its product title.",
|
|
213
|
-
"Back in the first buyer's session, search that word on /search.",
|
|
214
|
-
"Read every row, including any under 'Your orders'.",
|
|
215
|
-
"Now open /api/search/scoped?q=<that word> directly in the same signed-in session.",
|
|
216
|
-
"Read the raw JSON response end to end.",
|
|
217
|
-
],
|
|
218
|
-
expectedBehaviour: "Every scoped source carries an owner clause built from the verified session, so the QUERY itself cannot return another viewer's rows. The API half of this check is the half that matters.",
|
|
219
|
-
expectedUiState: "Neither the page nor the JSON contains the other buyer's order. A page that hides the row while the endpoint returns it is precisely the failure this case exists for, and only the second half can see it.",
|
|
220
|
-
endResult: "Read-only; nothing persists.",
|
|
221
|
-
},
|
|
222
|
-
"checklist-content-discovery-search-search-seller-own-store": {
|
|
223
|
-
roles: ["seller"],
|
|
224
|
-
startPage: "/store/products/new",
|
|
225
|
-
steps: [
|
|
226
|
-
"Signed in as a seller, create a listing with a distinctive title and leave it as a DRAFT.",
|
|
227
|
-
"Go to /search and search that title.",
|
|
228
|
-
"Read which section the row appears under.",
|
|
229
|
-
"Note a draft title belonging to a DIFFERENT store (ask an admin for one).",
|
|
230
|
-
"Search that second title and read every row.",
|
|
231
|
-
],
|
|
232
|
-
inputs: { ownDraft: "Isolation Probe Draft" },
|
|
233
|
-
expectedBehaviour: "A seller's own drafts are returned by the scoped tier. Published listings are deduped away because the public index already has them, so what survives in that section is exactly the drafts — which is why it is labelled as such.",
|
|
234
|
-
expectedUiState: "Your own draft appears under 'Your listings (incl. drafts)'. The other store's draft returns nothing at all.",
|
|
235
|
-
endResult: "Delete the probe draft afterwards.",
|
|
236
|
-
},
|
|
237
|
-
"checklist-content-discovery-search-search-listing-boxes-still-filter": {
|
|
238
|
-
roles: ["guest", "seller", "admin"],
|
|
239
|
-
startPage: "/stores",
|
|
240
|
-
steps: [
|
|
241
|
-
"Open /stores and type a real store name into the page's own search box.",
|
|
242
|
-
"Confirm the list narrows, then type zzzznope and confirm it empties.",
|
|
243
|
-
"Sign in as a seller, open /store/orders, and repeat both searches there.",
|
|
244
|
-
"Check the pager still works and the filter-drawer badge still shows the right count.",
|
|
245
|
-
"Sign in as an admin, open /admin/users, and repeat both searches there.",
|
|
246
|
-
],
|
|
247
|
-
inputs: { control: "zzzznope" },
|
|
248
|
-
expectedBehaviour: "The per-collection boxes are a DIFFERENT system from site-wide search — they filter one table, carry URL state and feed real pagination — and nothing in the index work touches them. This case exists because that is a promise, and a promise with no check is a hope.",
|
|
249
|
-
expectedUiState: "All three boxes narrow on a real term and return zero on the control. Pagination still pages, and the filter-drawer badge still counts only drawer filters.",
|
|
250
|
-
endResult: "Read-only; the URL carries the query but nothing persists server-side.",
|
|
251
|
-
},
|
|
252
|
-
"checklist-content-discovery-search-search-support-ticket-two-words": {
|
|
253
|
-
roles: ["admin"],
|
|
254
|
-
startPage: "/admin/support-tickets",
|
|
255
|
-
steps: [
|
|
256
|
-
"Open /admin/support-tickets and read several ticket subjects.",
|
|
257
|
-
"Pick TWO words that appear together in exactly one subject, where the longer word also appears in others.",
|
|
258
|
-
"Type just the longer word into the search box and count the rows.",
|
|
259
|
-
"Now type both words and count the rows again.",
|
|
260
|
-
"Compare the two counts.",
|
|
261
|
-
],
|
|
262
|
-
expectedBehaviour: "Both words must narrow the result. Before this the second word was discarded entirely — only the longest term reached the query — so a two-word search returned everything matching the longer word while looking like it was working.",
|
|
263
|
-
expectedUiState: "The two-word search returns FEWER rows than the one-word search, and every row it returns contains both words. Identical counts mean the second word is still being thrown away.",
|
|
264
|
-
endResult: "Read-only; nothing persists.",
|
|
265
|
-
},
|
|
266
|
-
"checklist-content-discovery-search-search-parts-page-has-a-box": {
|
|
267
|
-
roles: ["guest"],
|
|
268
|
-
startPage: "/parts",
|
|
269
|
-
steps: [
|
|
270
|
-
"Open /parts in a private window.",
|
|
271
|
-
"Look above the grid of classifications for a search input.",
|
|
272
|
-
"Type RF and read the rows that appear.",
|
|
273
|
-
"Read the second line of each row.",
|
|
274
|
-
"Clear it and type zzzznope.",
|
|
275
|
-
"Scroll down and confirm the classification grid is still present.",
|
|
276
|
-
],
|
|
277
|
-
inputs: { query: "RF", control: "zzzznope" },
|
|
278
|
-
expectedBehaviour: "Before this the page was browse-only: 752 parts reachable only by clicking a classification and then a code, with no search input anywhere on the surface.",
|
|
279
|
-
expectedUiState: "A search box sits above the grid. 'RF' returns the part with its classification on a second line; 'zzzznope' says no part matches. The classification grid is still there underneath — the box adds a way in, it does not replace browsing.",
|
|
280
|
-
endResult: "Read-only; nothing persists.",
|
|
281
|
-
},
|
|
282
|
-
"checklist-content-discovery-search-search-facet-carries-through": {
|
|
283
|
-
roles: ["guest"],
|
|
284
|
-
startPage: "/search",
|
|
285
|
-
steps: [
|
|
286
|
-
"Open /search?q=beyblade in a private window.",
|
|
287
|
-
"Tick one facet chip, e.g. a brand.",
|
|
288
|
-
"Find that group's own 'See all →' link and read its href before clicking.",
|
|
289
|
-
"Click it.",
|
|
290
|
-
"Read the URL you land on and whether the listing page shows the same filter applied.",
|
|
291
|
-
],
|
|
292
|
-
inputs: { query: "beyblade" },
|
|
293
|
-
expectedBehaviour: "The refinement a visitor builds on /search must survive the jump to the real browse page — losing it means re-doing work they already did.",
|
|
294
|
-
expectedUiState: "The destination URL carries the same filter (e.g. a brand query parameter), and the browse page opens already narrowed to it, not showing the unfiltered full list.",
|
|
295
|
-
endResult: "Read-only; nothing persists.",
|
|
296
|
-
},
|
|
297
|
-
"checklist-content-discovery-search-search-admin-person-exact": {
|
|
298
|
-
roles: ["admin"],
|
|
299
|
-
startPage: "/admin/users",
|
|
300
|
-
steps: [
|
|
301
|
-
"Sign in as admin and open /admin/users.",
|
|
302
|
-
"Pick a real user and note their first name only.",
|
|
303
|
-
"Type just that first name into the search box.",
|
|
304
|
-
"Read the results.",
|
|
305
|
-
"Clear the box and type only the first 3-4 letters of that same first name — a prefix, not the whole word.",
|
|
306
|
-
"Read the results again.",
|
|
307
|
-
],
|
|
308
|
-
expectedBehaviour: "The admin search resolves through a whole-WORD index, not a whole-STRING exact match. Typing a first name alone must find a user whose displayName is 'First Last' — before this it required the exact full string. A PREFIX of the word must find nobody: the index is whole-word only on purpose, so it cannot be unpicked by counting partial-match frequencies.",
|
|
309
|
-
expectedUiState: "The full first name returns the user. The 3-4 letter prefix returns an empty list — not the same user, not anybody else.",
|
|
310
|
-
endResult: "Read-only; nothing persists.",
|
|
311
|
-
},
|
|
312
|
-
"checklist-content-discovery-search-search-no-plaintext-pii": {
|
|
313
|
-
roles: ["admin"],
|
|
314
|
-
startPage: "/admin/users",
|
|
315
|
-
steps: [
|
|
316
|
-
"With Firestore console access, open any `users` document.",
|
|
317
|
-
"Find the `nameTokensIndex` field and read its values.",
|
|
318
|
-
"Confirm every entry is an opaque hex string with an `hmac:` prefix, never a readable name fragment.",
|
|
319
|
-
"Separately, fetch the public search artifact's .json file (the one the header search downloads) and search its raw text for the word 'TokensIndex'.",
|
|
320
|
-
],
|
|
321
|
-
needsReview: true,
|
|
322
|
-
reviewNote: "Needs Firestore console access, which an automated browser session does not have — flagged for a human or an admin-tooling pass rather than answered null.",
|
|
323
|
-
expectedBehaviour: "A blind index lets admin search without ever decrypting anyone's name. If the stored values are readable, or if the field reaches the public artifact (a deterministic per-person identifier published to every browser, cross-referenceable even unbroken), the whole design has failed regardless of what the UI shows.",
|
|
324
|
-
expectedUiState: "Every `nameTokensIndex` entry is an `hmac:`-prefixed digest. The public artifact's raw text contains no occurrence of 'TokensIndex' at all.",
|
|
325
|
-
endResult: "Read-only; nothing persists.",
|
|
326
|
-
},
|
|
327
|
-
"checklist-content-discovery-search-faq-punctuation-search": {
|
|
328
|
-
roles: ["guest"],
|
|
329
|
-
startPage: "/faqs",
|
|
330
|
-
steps: [
|
|
331
|
-
"Open /faqs in a private window.",
|
|
332
|
-
"Type !!! into the FAQ search box.",
|
|
333
|
-
"Read the message shown and count the FAQs displayed.",
|
|
334
|
-
],
|
|
335
|
-
inputs: { punctuation: "!!!" },
|
|
336
|
-
expectedBehaviour: "GUARD CASE — pins behaviour that is already correct. A punctuation-only query has no searchable words, and must say so rather than silently falling through to 'no filter', which would return the entire FAQ catalogue disguised as search results.",
|
|
337
|
-
expectedUiState: "The page says the search had no searchable words. Zero FAQs are shown — not the full list.",
|
|
338
|
-
endResult: "Read-only; nothing persists.",
|
|
339
|
-
},
|
|
340
|
-
};
|
package/dist/features/tester/seed-data/authored/content-discovery__store-reviews-aggregate.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for content-discovery/store-reviews-aggregate.
|
|
3
|
-
* WHAT: 4 cases, keyed by full checklist id.
|
|
4
|
-
*
|
|
5
|
-
* 🛑 THIS TAB ANSWERED 200 WITH ZERO REVIEWS FOR EVERY STORE, for as long as it
|
|
6
|
-
* had existed, while 79 approved reviews sat in Firestore (Root Cause #100). It
|
|
7
|
-
* selected "the store's top 20 products by `itemsSold`" and fanned out a review
|
|
8
|
-
* query per product — and **no product carries `itemsSold`**, so Firestore's
|
|
9
|
-
* `orderBy` excluded all 95 of them and the endpoint returned nothing.
|
|
10
|
-
*
|
|
11
|
-
* The only symptom was "this store has no reviews yet", which reads as a fact
|
|
12
|
-
* about the store. That is why the first case names a store KNOWN to have
|
|
13
|
-
* reviews rather than asking whether the tab renders.
|
|
14
|
-
*
|
|
15
|
-
* Fixing it then exposed the next layer: the route returned the raw document,
|
|
16
|
-
* including the reviewer's name as `enc:v1:…` ciphertext and the HMAC blind
|
|
17
|
-
* index beside it. Hence the privacy case.
|
|
18
|
-
*
|
|
19
|
-
* @tag domain:tester
|
|
20
|
-
* @tag layer:seed
|
|
21
|
-
* @tag pattern:none
|
|
22
|
-
* @tag access:server-only
|
|
23
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
24
|
-
* @tag sideEffects:none
|
|
25
|
-
*/
|
|
26
|
-
export const authored = {
|
|
27
|
-
"checklist-content-discovery-store-reviews-aggregate-reviews-tab-not-empty": {
|
|
28
|
-
roles: ["guest"],
|
|
29
|
-
startPage: "/stores/store-beyblade-arena",
|
|
30
|
-
steps: [
|
|
31
|
-
"Open /stores/store-beyblade-arena — this store is known to have many approved reviews, which is the point of naming it.",
|
|
32
|
-
"Open its Reviews tab.",
|
|
33
|
-
"Wait for the content to finish loading before judging it.",
|
|
34
|
-
"Read how many reviews are reported and count the cards on the first page.",
|
|
35
|
-
],
|
|
36
|
-
expectedBehaviour: "Reviews are fetched by the store they belong to. Routing the lookup through a sample of the store's products makes the result depend on a field those products may not have — and an ordering field that is absent silently excludes every document, returning an empty list rather than an error.",
|
|
37
|
-
expectedUiState: "Review cards are listed and a total is shown. NOT 'No reviews yet' and not an empty tab.",
|
|
38
|
-
expectedData: { totalReviewsAtLeast: 1 },
|
|
39
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
40
|
-
},
|
|
41
|
-
"checklist-content-discovery-store-reviews-aggregate-average-matches-the-rows": {
|
|
42
|
-
roles: ["guest"],
|
|
43
|
-
startPage: "/stores/store-beyblade-arena",
|
|
44
|
-
steps: [
|
|
45
|
-
"Open the store's Reviews tab and write down the average rating and the total.",
|
|
46
|
-
"Read the star-distribution breakdown and write down the count beside each star level.",
|
|
47
|
-
"Add the five distribution counts together.",
|
|
48
|
-
"Compare that sum with the total.",
|
|
49
|
-
"Filter to 5-star reviews and compare the number of cards with the 5-star count from the breakdown.",
|
|
50
|
-
],
|
|
51
|
-
expectedBehaviour: "The aggregate covers the whole store, not a sample of it. Computing it from an arbitrary subset of products leaves the average and the distribution quietly wrong — and those two numbers are what a buyer judges a seller on.",
|
|
52
|
-
expectedUiState: "The distribution counts sum to the total, and the 5-star filter returns as many reviews as the breakdown claims.",
|
|
53
|
-
expectedData: { distributionSumsToTotal: true },
|
|
54
|
-
endResult: "Clearing the filter restores the full list.",
|
|
55
|
-
},
|
|
56
|
-
"checklist-content-discovery-store-reviews-aggregate-reviewer-name-is-masked": {
|
|
57
|
-
roles: ["guest"],
|
|
58
|
-
startPage: "/stores/store-beyblade-arena",
|
|
59
|
-
steps: [
|
|
60
|
-
"Open the store's Reviews tab.",
|
|
61
|
-
"Read the reviewer name shown on the first three cards.",
|
|
62
|
-
"Open the browser network panel and reload.",
|
|
63
|
-
"Find the request that fetched the reviews and read its response body.",
|
|
64
|
-
"Search that body for the text enc:v1 and for the field names userNameIndex, searchTxt and userId.",
|
|
65
|
-
],
|
|
66
|
-
expectedBehaviour: "A reviewer's name is PII, stored encrypted, and shown masked in public. The generic repository returns the document verbatim, so a route that does not go through the reviews repository serves ciphertext — and a payload built by spreading the document also carries the HMAC blind index, which lets a caller confirm a guessed name.",
|
|
67
|
-
expectedUiState: "Names render masked. maskName masks EVERY whitespace-separated word, and every seeded persona is literally 'Mock User N' — so the exact rendering is 'M*** U*** 3***', including the number. A two-word 'M*** U***' would mean the trailing word was dropped. No card shows a value beginning enc:v1.",
|
|
68
|
-
expectedData: { ciphertextInResponse: false, blindIndexInResponse: false },
|
|
69
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
70
|
-
},
|
|
71
|
-
"checklist-content-discovery-store-reviews-aggregate-review-search-matches-body-text": {
|
|
72
|
-
roles: ["guest"],
|
|
73
|
-
startPage: "/stores/store-beyblade-arena",
|
|
74
|
-
steps: [
|
|
75
|
-
"Open the store's Reviews tab and read one review card in full.",
|
|
76
|
-
"Pick a distinctive word that appears in that review's BODY text but not in its title and not in the product name.",
|
|
77
|
-
"Type that word into the reviews search box.",
|
|
78
|
-
"Read the results.",
|
|
79
|
-
"Clear the box and search for zzzznope.",
|
|
80
|
-
"Read the results again.",
|
|
81
|
-
],
|
|
82
|
-
inputs: { nonsenseQuery: "zzzznope" },
|
|
83
|
-
expectedBehaviour: "Search covers the review's body. The stored field for that text is `comment`; a filter reading a differently-named field matches nothing in the body and still returns rows via the title and the product name, so it looks like a working search that is merely strict.",
|
|
84
|
-
expectedUiState: "The body word returns at least the review it came from. 'zzzznope' returns an empty state rather than the unfiltered list.",
|
|
85
|
-
expectedData: { nonsenseResultCount: 0 },
|
|
86
|
-
endResult: "Clearing the box restores the full list.",
|
|
87
|
-
},
|
|
88
|
-
};
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the cta-layout/checkout-bottom-bar page.
|
|
3
|
-
* WHAT: 2 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
|
-
* Both cases are layout checks with an explicit BEFORE in their own description,
|
|
10
|
-
* so the procedure names the pixel symptom rather than asking whether the bar
|
|
11
|
-
* "looks right". 320px is the narrowest viewport worth supporting and is where
|
|
12
|
-
* every squeeze shows up first.
|
|
13
|
-
*
|
|
14
|
-
* 🛑 THE PAYMENT STEP DOES NOT OFFER PhonePe BY DEFAULT (corrected 2026-09-29).
|
|
15
|
-
* CheckoutRouteClient defaults are showCashOption = true, showPhonePe = false,
|
|
16
|
-
* showCod = false, and the payment branch picks the first ENABLED method in
|
|
17
|
-
* that order — so the primary CTA on a default site reads 'Pay via UPI / Cash'.
|
|
18
|
-
* The second case asserted 'Pay Online (PhonePe)' is shown complete, which on a
|
|
19
|
-
* default site means asserting a button that is not there. It now reads whatever
|
|
20
|
-
* CTA the enabled method produces and lists all four labels so the tester can
|
|
21
|
-
* recognise which one they got:
|
|
22
|
-
*
|
|
23
|
-
* showCashOption 'Pay via UPI / Cash' (default ON, and the longest)
|
|
24
|
-
* showPhonePe 'Pay Online (PhonePe)' (default OFF)
|
|
25
|
-
* showCod 'Cash on Delivery' (default OFF)
|
|
26
|
-
* emiVisible 'Pay in EMI'
|
|
27
|
-
*
|
|
28
|
-
* 🛑 AND THE BUYER HAS NO SAVED ADDRESS. Three addresses are seeded, owned by
|
|
29
|
-
* user-yugi-muto, user-seto-kaiba and user-admin-letitrip. rehan.sheikh has none,
|
|
30
|
-
* so 'select the first saved address' cannot be followed on a fresh project. The
|
|
31
|
-
* addresses collection is PRESERVE tier, so one may exist from an earlier run
|
|
32
|
-
* — the step now covers both, because a case that assumes either is wrong half
|
|
33
|
-
* the time.
|
|
34
|
-
*
|
|
35
|
-
* @tag domain:tester
|
|
36
|
-
* @tag layer:seed
|
|
37
|
-
* @tag pattern:none
|
|
38
|
-
* @tag access:server-only
|
|
39
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
40
|
-
* @tag sideEffects:none
|
|
41
|
-
*/
|
|
42
|
-
export const authored = {
|
|
43
|
-
"checklist-cta-layout-checkout-bottom-bar-back-not-squeezed": {
|
|
44
|
-
roles: ["buyer"],
|
|
45
|
-
startPage: "/checkout",
|
|
46
|
-
steps: [
|
|
47
|
-
"Resize the browser window to 320 pixels wide.",
|
|
48
|
-
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
49
|
-
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
50
|
-
"Open /checkout. Select a saved address if one is offered; if the list is empty, add one, since no address is seeded for this buyer.",
|
|
51
|
-
"Continue to the Extras step — checkout is Address, then Extras and fees, then Payment.",
|
|
52
|
-
"Read the two buttons in the bottom action bar and compare their widths.",
|
|
53
|
-
],
|
|
54
|
-
inputs: { viewportWidth: 320 },
|
|
55
|
-
expectedBehaviour: "Each button is sized by its own label rather than by a fixed share of the row, so the shorter label takes less space and the longer one takes more. A fixed split gives a two-letter button the same width as an eight-word one.",
|
|
56
|
-
expectedUiState: "'Back' reads in full — not clipped to 'Ba' inside a roughly 44px box. 'Continue to payment' also reads in full and is visibly the wider of the two. Neither shows an ellipsis or a cut-off word.",
|
|
57
|
-
endResult: "Layout-only; nothing persists. Restore the window width afterwards so later cases are not run at 320px by accident.",
|
|
58
|
-
},
|
|
59
|
-
"checklist-cta-layout-checkout-bottom-bar-no-truncation-anywhere": {
|
|
60
|
-
roles: ["buyer"],
|
|
61
|
-
startPage: "/checkout",
|
|
62
|
-
steps: [
|
|
63
|
-
"Resize the browser window to 320 pixels wide.",
|
|
64
|
-
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
65
|
-
"Open /products/product-beyblade-burst-valkyrie and click 'Add to Cart'.",
|
|
66
|
-
"Open /checkout, supply an address if none is saved, and continue through Extras to the Payment step.",
|
|
67
|
-
"Read the primary button's label in full and write down which of the four it is: 'Pay via UPI / Cash', 'Pay Online (PhonePe)', 'Cash on Delivery' or 'Pay in EMI'.",
|
|
68
|
-
"Select each payment method the page offers in turn and read the primary label after each.",
|
|
69
|
-
],
|
|
70
|
-
inputs: {
|
|
71
|
-
viewportWidth: 320,
|
|
72
|
-
defaultPrimaryCta: "Pay via UPI / Cash",
|
|
73
|
-
},
|
|
74
|
-
expectedBehaviour: "A label too long for one line makes its button taller rather than truncating. Height is cheap in a bottom bar; a clipped verb is not, because the buyer cannot tell what the button will do.",
|
|
75
|
-
expectedUiState: "Whichever CTA the enabled method produces is shown complete, wrapping onto two lines if it needs to. On a default site that is 'Pay via UPI / Cash' — the longest of the four, and therefore the one most likely to clip. An ellipsis anywhere in the bar is a failure, on any method. Do NOT record the absence of 'Pay Online (PhonePe)' as a defect: PhonePe is off by default and a separate admin case covers switching it on.",
|
|
76
|
-
endResult: "Layout-only; nothing persists. Restore the window width afterwards.",
|
|
77
|
-
},
|
|
78
|
-
};
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the cta-layout/dialog-footers page.
|
|
3
|
-
* WHAT: 2 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
|
-
* These two pull in OPPOSITE directions on purpose — a dialog footer stays
|
|
10
|
-
* compact while a mobile bar stretches — and that is exactly why they are one
|
|
11
|
-
* page. A single rule applied to both is what makes one of them wrong.
|
|
12
|
-
*
|
|
13
|
-
* 🛑 /admin/products HAS NO DELETE ROW ACTION (corrected 2026-09-29). Its row
|
|
14
|
-
* menu is Approve, Reject and Quick edit; nothing there opens a destructive
|
|
15
|
-
* dialog, so the first case could not start. It now uses the bundle editor's
|
|
16
|
-
* delete, which is a real ConfirmDeleteModal and names the record in its title.
|
|
17
|
-
*
|
|
18
|
-
* ConfirmDeleteModal's defaults are title 'Delete Item?', confirm 'Delete',
|
|
19
|
-
* cancel 'Cancel'; the bundle editor overrides the title to 'Delete this
|
|
20
|
-
* bundle?'. A dialog still reading the generic default IS the finding — a
|
|
21
|
-
* confirmation that does not say what it will destroy is barely a confirmation.
|
|
22
|
-
*
|
|
23
|
-
* The drawer footer's labels are exact and come from FilterDrawer itself:
|
|
24
|
-
* 'Reset all' (ghost) and 'Apply' (primary), which becomes 'Apply (N)' while
|
|
25
|
-
* changes are pending. A tester seeing the count variant is looking at correct
|
|
26
|
-
* behaviour, not a drifted label.
|
|
27
|
-
*
|
|
28
|
-
* @tag domain:tester
|
|
29
|
-
* @tag layer:seed
|
|
30
|
-
* @tag pattern:none
|
|
31
|
-
* @tag access:server-only
|
|
32
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
33
|
-
* @tag sideEffects:none
|
|
34
|
-
*/
|
|
35
|
-
export const authored = {
|
|
36
|
-
"checklist-cta-layout-dialog-footers-modal-footer-stays-compact-on-desktop": {
|
|
37
|
-
roles: ["admin"],
|
|
38
|
-
startPage: "/admin/bundles",
|
|
39
|
-
steps: [
|
|
40
|
-
"Resize the browser window to 1280 pixels wide.",
|
|
41
|
-
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
42
|
-
"Open /admin/bundles and open any bundle for editing.",
|
|
43
|
-
"Click its delete control to open the confirmation dialog. Do NOT confirm.",
|
|
44
|
-
"Read the dialog's title: it should name the record, not read 'Delete Item?'.",
|
|
45
|
-
"Read the two footer buttons, 'Cancel' and 'Delete', and where they sit horizontally.",
|
|
46
|
-
"Dismiss with Cancel.",
|
|
47
|
-
],
|
|
48
|
-
inputs: {
|
|
49
|
-
viewportWidth: 1280,
|
|
50
|
-
dialogTitle: "Delete this bundle?",
|
|
51
|
-
genericDefault: "Delete Item?",
|
|
52
|
-
},
|
|
53
|
-
expectedBehaviour: "A dialog footer packs its buttons to the right at content width. A destructive dialog also has to HAVE a confirmation to open at all — every danger-kind action carries its confirmation copy in the action registry, and one without it executes immediately with no warning.",
|
|
54
|
-
expectedUiState: "'Cancel' and 'Delete' are each about as wide as their own label and sit together at the right edge of the dialog. They do not stretch edge to edge like banners. The title names the bundle rather than reading the component default 'Delete Item?' — a confirmation that does not say what it will destroy is barely a confirmation.",
|
|
55
|
-
endResult: "Cancel closes the dialog and nothing is deleted. The bundle is still in /admin/bundles after a reload — dismissing must not be a silent confirm.",
|
|
56
|
-
},
|
|
57
|
-
"checklist-cta-layout-dialog-footers-filter-drawer-footer-stacks-when-narrow": {
|
|
58
|
-
roles: ["guest"],
|
|
59
|
-
startPage: "/products",
|
|
60
|
-
steps: [
|
|
61
|
-
"Resize the browser window to 320 pixels wide.",
|
|
62
|
-
"Open /products.",
|
|
63
|
-
"Click 'Filters' to open the drawer.",
|
|
64
|
-
"Scroll to the drawer's footer.",
|
|
65
|
-
"Read both buttons and note whether they sit side by side or one per line.",
|
|
66
|
-
],
|
|
67
|
-
inputs: {
|
|
68
|
-
viewportWidth: 320,
|
|
69
|
-
resetLabel: "Reset all",
|
|
70
|
-
applyLabel: "Apply",
|
|
71
|
-
},
|
|
72
|
-
expectedBehaviour: "Where a dialog footer stays compact, a drawer footer prefers legibility: if two buttons cannot both read at the available width they stack one per line rather than shrinking below their labels.",
|
|
73
|
-
expectedUiState: "'Reset all' and 'Apply' are both fully readable. If they cannot fit side by side at 320px they are stacked, one per line. Neither is crushed below its label and neither is truncated. The primary reads 'Apply (N)' once a facet has been changed but not yet applied, which is correct rather than a drifted label.",
|
|
74
|
-
endResult: "Layout-only; closing the drawer without applying changes nothing. Restore the window width afterwards.",
|
|
75
|
-
},
|
|
76
|
-
};
|