@mohasinac/appkit 4.57.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 +4 -4
- package/dist/_internal/server/features/beys/data.d.ts +44 -0
- package/dist/_internal/server/features/beys/data.js +107 -0
- package/dist/_internal/server/features/beys/og.d.ts +42 -0
- package/dist/_internal/server/features/beys/og.js +89 -0
- package/dist/_internal/server/features/parts/data.js +3 -2
- 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/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +86 -0
- package/dist/_internal/shared/types/base-document.d.ts +1 -1
- package/dist/client.d.ts +2 -0
- package/dist/client.js +1 -0
- package/dist/constants/api-endpoints.d.ts +12 -0
- package/dist/constants/api-endpoints.js +10 -0
- package/dist/constants/field-names.d.ts +46 -0
- package/dist/constants/field-names.js +46 -0
- package/dist/constants/seed-meta.d.ts +113 -0
- package/dist/constants/seed-meta.js +91 -0
- package/dist/features/admin/components/AdminBeysView.d.ts +27 -0
- package/dist/features/admin/components/AdminBeysView.js +178 -0
- package/dist/features/admin/components/AdminPartsView.d.ts +27 -0
- package/dist/features/admin/components/AdminPartsView.js +160 -0
- package/dist/features/admin/components/OwnerQuickActions.d.ts +19 -2
- package/dist/features/admin/components/OwnerQuickActions.js +31 -3
- package/dist/features/admin/components/RecordOwnerQuickActions.d.ts +31 -0
- package/dist/features/admin/components/RecordOwnerQuickActions.js +128 -0
- package/dist/features/admin/components/ReferenceRecordEditor.d.ts +45 -0
- package/dist/features/admin/components/ReferenceRecordEditor.js +153 -0
- package/dist/features/admin/schemas/firestore.d.ts +1 -1
- package/dist/features/auctions/components/MarketplaceAuctionCard.js +15 -2
- package/dist/features/auth/permissions/constants.d.ts +1 -1
- package/dist/features/auth/permissions/constants.js +12 -1
- package/dist/features/beys/components/BeyDetailPageView.d.ts +50 -0
- package/dist/features/beys/components/BeyDetailPageView.js +98 -0
- package/dist/features/beys/schemas/firestore.d.ts +417 -0
- package/dist/features/beys/schemas/firestore.js +65 -0
- package/dist/features/blog/components/BlogFeaturedCard.js +15 -2
- package/dist/features/blog/components/BlogPostView.js +2 -2
- package/dist/features/categories/components/BrandDetailPageView.js +4 -2
- package/dist/features/categories/components/BundleDetailView.js +2 -2
- package/dist/features/categories/components/CategoryDetailPageView.js +36 -3
- package/dist/features/categories/components/CategoryGrid.js +24 -2
- package/dist/features/categories/components/FranchiseDetailPageView.js +2 -3
- package/dist/features/events/components/EventCard.js +15 -2
- package/dist/features/grouped/components/GroupedListingDetailView.js +2 -3
- package/dist/features/homepage/components/CustomCardsSection.js +67 -50
- package/dist/features/homepage/components/ShopByCategorySection.js +23 -10
- package/dist/features/homepage/schemas/index.d.ts +10 -10
- package/dist/features/parts/components/PartDetailPageView.js +5 -3
- package/dist/features/parts/components/PartsSearchBox.js +79 -4
- package/dist/features/parts/schemas/admin-edit.d.ts +81 -0
- package/dist/features/parts/schemas/admin-edit.js +89 -0
- package/dist/features/parts/schemas/firestore.d.ts +2 -1
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +15 -2
- package/dist/features/products/components/MarketplaceBundleCard.js +15 -2
- package/dist/features/products/components/MarketplacePrizeDrawCard.js +15 -2
- package/dist/features/products/components/ProductGrid.js +18 -2
- package/dist/features/products/schemas/firestore.d.ts +18 -0
- package/dist/features/seller/components/CategoryInlineSelect.d.ts +10 -1
- package/dist/features/seller/components/CategoryInlineSelect.js +53 -5
- package/dist/features/seller/components/SellerProductShell.d.ts +39 -0
- package/dist/features/seller/components/SellerProductShell.js +31 -3
- package/dist/index.d.ts +6 -129
- package/dist/index.js +61 -292
- package/dist/next/routing/route-map.d.ts +13 -1
- package/dist/next/routing/route-map.js +37 -0
- package/dist/schemas/registry.d.ts +6 -6
- package/dist/server.d.ts +2 -69
- package/dist/server.js +8 -69
- package/dist/styles.css +468 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/PosterCard.d.ts +99 -0
- package/dist/ui/components/PosterCard.js +109 -0
- package/dist/ui/components/PosterCard.style.css +466 -0
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +2 -0
- package/package.json +4 -2
- package/scripts/seed-cli.mjs +177 -2
- 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/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 -1018
- package/dist/seed/index.d.ts +0 -98
- package/dist/seed/index.js +0 -112
- 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-seed-data.d.ts +0 -22
- package/dist/seed/products-catalogue-seed-data.js +0 -86384
- 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 -431
- 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,115 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for public-pages/store-tabs.
|
|
3
|
-
* WHAT: 6 cases, keyed by full checklist id.
|
|
4
|
-
*
|
|
5
|
-
* 🛑 THE DEFAULT TAB HAD NO CASE. Nine `/stores/[storeSlug]/*` tabs were
|
|
6
|
-
* untested, `products` among them — which is the first thing anyone sees after
|
|
7
|
-
* clicking a store.
|
|
8
|
-
*
|
|
9
|
-
* The reviews tab is included deliberately: it answered HTTP 200 with zero
|
|
10
|
-
* reviews for EVERY store until 2026-09-14 (Root Cause #100), and the only
|
|
11
|
-
* symptom was a sentence that reads as a fact about the store rather than as a
|
|
12
|
-
* defect. That is why the case names a store known to have reviews.
|
|
13
|
-
*
|
|
14
|
-
* @tag domain:tester
|
|
15
|
-
* @tag layer:seed
|
|
16
|
-
* @tag pattern:none
|
|
17
|
-
* @tag access:server-only
|
|
18
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
19
|
-
* @tag sideEffects:none
|
|
20
|
-
*/
|
|
21
|
-
export const authored = {
|
|
22
|
-
"checklist-public-pages-store-tabs-default-tab-lists-products": {
|
|
23
|
-
roles: ["guest"],
|
|
24
|
-
startPage: "/stores",
|
|
25
|
-
steps: [
|
|
26
|
-
"Open /stores and click through to Beyblade Arena. The store URL /stores/store-beyblade-arena redirects to /stores/store-beyblade-arena/products — that redirect IS the default-tab behaviour this case is checking, so landing on a /products URL is the pass condition rather than a surprise.",
|
|
27
|
-
"Note which tab is selected on arrival.",
|
|
28
|
-
"Count the listings shown and read the total the pager reports.",
|
|
29
|
-
"Open two of the cards and read which store each says it belongs to.",
|
|
30
|
-
],
|
|
31
|
-
inputs: { store: "store-beyblade-arena" },
|
|
32
|
-
expectedBehaviour: "A store opens on its Products tab with that store's listings. A listing carries its store as a denormalised field, so a card showing no seller — or the wrong one — means the listing was written without a store rather than that the tab filtered wrongly.",
|
|
33
|
-
expectedUiState: "Products is the selected tab on arrival, cards are listed, and each card names Beyblade Arena.",
|
|
34
|
-
expectedData: { defaultTab: "products" },
|
|
35
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
36
|
-
},
|
|
37
|
-
"checklist-public-pages-store-tabs-each-tab-lists-only-its-type": {
|
|
38
|
-
roles: ["guest"],
|
|
39
|
-
startPage: "/stores/store-beyblade-arena",
|
|
40
|
-
steps: [
|
|
41
|
-
"Open Beyblade Arena and open the Auctions tab.",
|
|
42
|
-
"Read the badge on each card shown.",
|
|
43
|
-
"Open the Pre-orders tab and read its badges.",
|
|
44
|
-
"Open the Digital Codes tab and read its badges.",
|
|
45
|
-
"Open the Art tab and read its badges.",
|
|
46
|
-
],
|
|
47
|
-
inputs: { store: "store-beyblade-arena" },
|
|
48
|
-
expectedBehaviour: "Each tab is a type filter over that one store. Tabs key on a slug that is a DIFFERENT id space from the listing type, so conflating the two either breaks the URL or silently returns nothing — and nothing looks exactly like an empty tab.",
|
|
49
|
-
expectedUiState: "Every card under a tab carries that tab's badge. No card of another type appears under any tab.",
|
|
50
|
-
expectedData: { mismatchedBadges: 0 },
|
|
51
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
52
|
-
},
|
|
53
|
-
"checklist-public-pages-store-tabs-empty-tab-says-empty": {
|
|
54
|
-
roles: ["guest"],
|
|
55
|
-
startPage: "/stores/store-letitrip-official",
|
|
56
|
-
steps: [
|
|
57
|
-
"Open /stores/store-letitrip-official and work through all twelve tabs in turn: Products, Auctions, Pre-orders, Prize Draws, Classified, Digital Codes, Live, Art, Bundles, Coupons, Reviews, About. 🛑 USE THIS STORE, NOT Beyblade Arena: the official store carries SIX listings and every one is a prize draw, so eleven of its twelve tabs are genuinely empty. Beyblade Arena has stock in every single type, so it has no empty tab to find and the case cannot be performed there at all.",
|
|
58
|
-
"Find one that lists nothing.",
|
|
59
|
-
"Wait for it to finish loading before judging it.",
|
|
60
|
-
"Read what it shows.",
|
|
61
|
-
],
|
|
62
|
-
inputs: { store: "store-beyblade-arena" },
|
|
63
|
-
expectedBehaviour: "An empty tab says it is empty. A spinner that never resolves and a blank panel both read as a failure, and an empty state is also how a genuinely broken query presents — so the wording should say what is absent rather than merely showing nothing.",
|
|
64
|
-
expectedUiState: "A worded empty state. Not a permanent skeleton and not a blank area below the tab bar.",
|
|
65
|
-
expectedData: { blankPanelFound: false },
|
|
66
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
67
|
-
},
|
|
68
|
-
"checklist-public-pages-store-tabs-tab-survives-a-reload": {
|
|
69
|
-
roles: ["guest"],
|
|
70
|
-
startPage: "/stores/store-beyblade-arena",
|
|
71
|
-
steps: [
|
|
72
|
-
"Open Beyblade Arena and switch to the Auctions tab.",
|
|
73
|
-
"Copy the URL from the address bar.",
|
|
74
|
-
"Reload the page.",
|
|
75
|
-
"Note which tab is selected.",
|
|
76
|
-
"Open the copied URL in a new tab and note which is selected there.",
|
|
77
|
-
],
|
|
78
|
-
inputs: { store: "store-beyblade-arena" },
|
|
79
|
-
expectedBehaviour: "The tab is in the URL, so a reload and a shared link both land on it. A tab held only in component state bounces to the default on reload, which makes the URL unshareable without any visible error.",
|
|
80
|
-
expectedUiState: "Both the reload and the fresh tab land on Auctions.",
|
|
81
|
-
expectedData: { tabAfterReload: "auctions" },
|
|
82
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
83
|
-
},
|
|
84
|
-
"checklist-public-pages-store-tabs-store-tabs-hide-other-stores-items": {
|
|
85
|
-
roles: ["guest"],
|
|
86
|
-
startPage: "/stores/store-letitrip-official",
|
|
87
|
-
steps: [
|
|
88
|
-
"Open /stores/store-letitrip-official — SIX listings, all of them prize draws, which is what makes a leak obvious: any card on any other tab belongs to someone else, and the Prize Draws tab should hold exactly six.",
|
|
89
|
-
"Work through all twelve tabs and read the store name on each card: Products, Auctions, Pre-orders, Prize Draws, Classified, Digital Codes, Live, Art, Bundles, Coupons, Reviews, About.",
|
|
90
|
-
"Note any card naming a different store.",
|
|
91
|
-
"Open one card and confirm on its detail page which store it belongs to.",
|
|
92
|
-
],
|
|
93
|
-
inputs: { store: "store-letitrip-official" },
|
|
94
|
-
expectedBehaviour: "A store page is scoped to one store on every tab. A small catalogue is chosen on purpose: on a store with sixty listings a handful of foreign cards is easy to miss.",
|
|
95
|
-
expectedUiState: "Every card on every tab names LetItRip Official.",
|
|
96
|
-
expectedData: { foreignStoreCards: 0 },
|
|
97
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
98
|
-
},
|
|
99
|
-
"checklist-public-pages-store-tabs-coupons-tab-shows-this-stores-coupons": {
|
|
100
|
-
roles: ["guest"],
|
|
101
|
-
startPage: "/stores/store-beyblade-arena",
|
|
102
|
-
steps: [
|
|
103
|
-
"Open Beyblade Arena and open its Coupons tab.",
|
|
104
|
-
"Write down every coupon code shown.",
|
|
105
|
-
"Open /stores/store-letitrip-official and open its Coupons tab.",
|
|
106
|
-
"Write down those codes.",
|
|
107
|
-
"Compare the two lists.",
|
|
108
|
-
],
|
|
109
|
-
inputs: { sellerCoupon: "ARENA25", otherStoreCoupon: "OFFICIAL10" },
|
|
110
|
-
expectedBehaviour: "A store's coupons tab shows that store's own coupons. A seller coupon is scoped to one storeId and a platform coupon has none, so a tab that does not filter shows every seller's codes to every other seller's customers.",
|
|
111
|
-
expectedUiState: "ARENA25 appears under Beyblade Arena and not under LetItRip Official. OFFICIAL10 appears under LetItRip Official and not under Beyblade Arena.",
|
|
112
|
-
expectedData: { crossStoreCouponShown: false },
|
|
113
|
-
endResult: "Nothing is changed; this case only reads.",
|
|
114
|
-
},
|
|
115
|
-
};
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the public-pages/stores-sellers-directories page.
|
|
3
|
-
* WHAT: 16 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
|
-
* 🛑 SEVERAL CASES HERE HINGE ON A DISTINCTION THAT IS EASY TO LOSE: a tab's URL
|
|
10
|
-
* segment and a listing type are DIFFERENT id spaces. Tab bars key on the URL
|
|
11
|
-
* segment, filter chips key on the listing type, and conflating them either
|
|
12
|
-
* breaks live URLs or silently returns zero rows. That is why the store tab cases
|
|
13
|
-
* name the tab by its visible label and the URL by its path, never interchangeably.
|
|
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-public-pages-stores-sellers-directories-store-directory": {
|
|
24
|
-
roles: ["guest"],
|
|
25
|
-
startPage: "/stores",
|
|
26
|
-
steps: [
|
|
27
|
-
"Open /stores in a private window with no session.",
|
|
28
|
-
"Read every store card — name, logo, verified badge and any rating.",
|
|
29
|
-
"Note whether any card names a tester sandbox store.",
|
|
30
|
-
"Use the status filter if one is offered, selecting each value in turn and reading the results.",
|
|
31
|
-
"Click into 'Beyblade Arena'.",
|
|
32
|
-
],
|
|
33
|
-
expectedBehaviour: "The directory lists public stores through a projection that names every field it emits. Sandbox stores are filtered out for signed-out visitors in the application layer — never by a Firestore inequality, which would exclude every document lacking the flag, i.e. all the real ones, and return only test data.",
|
|
34
|
-
expectedUiState: "Real stores are listed with names, logos and verified badges. No card names a sandbox store. Any status filter offered changes which stores appear — the seed carries a pending and a suspended store precisely so those chips are not permanently empty.",
|
|
35
|
-
expectedData: { sandboxStoresVisibleToGuest: 0 },
|
|
36
|
-
endResult: "Read-only; nothing persists.",
|
|
37
|
-
},
|
|
38
|
-
"checklist-public-pages-stores-sellers-directories-store-detail-tabs": {
|
|
39
|
-
roles: ["guest"],
|
|
40
|
-
startPage: "/stores/store-beyblade-arena",
|
|
41
|
-
steps: [
|
|
42
|
-
"Open /stores/store-beyblade-arena in a private window with no session.",
|
|
43
|
-
"Read the store header and the tab bar.",
|
|
44
|
-
"Click each tab in turn and read the URL and the content.",
|
|
45
|
-
"Open the browser's View Source and search for accessToken, wabaId, catalogId, adminNotes and customCommissionRate.",
|
|
46
|
-
],
|
|
47
|
-
inputs: { storeId: "store-beyblade-arena" },
|
|
48
|
-
expectedBehaviour: "Each tab is a real route whose URL segment is stable and bookmarkable. The page is built from a store projection, not from the raw document — four pages once passed the whole document into a client component behind a cast that has no runtime effect, publishing a decrypted WhatsApp token into the page HTML.",
|
|
49
|
-
expectedUiState: "Every tab navigates to its own URL and renders content. None of the five secret field names appears anywhere in the page source, including the data payload embedded at the bottom of the HTML.",
|
|
50
|
-
expectedData: { secretFieldsInHtml: 0 },
|
|
51
|
-
endResult: "Read-only; nothing persists. A hit on any of those names is a leak regardless of how the page renders.",
|
|
52
|
-
},
|
|
53
|
-
"checklist-public-pages-stores-sellers-directories-category-tabs-every-type-renders": {
|
|
54
|
-
roles: ["guest"],
|
|
55
|
-
startPage: "/categories/category-beyblade-burst",
|
|
56
|
-
steps: [
|
|
57
|
-
"Open /categories/category-beyblade-burst in a private window with no session.",
|
|
58
|
-
"Read every tab offered and write the list down.",
|
|
59
|
-
"Click each tab in turn and read what renders beneath it.",
|
|
60
|
-
"Write down any tab that opens to a blank panel.",
|
|
61
|
-
],
|
|
62
|
-
expectedBehaviour: "Every tab that is OFFERED has a render branch behind it. The tab array and the panel that renders each type are two lists, and when one grows and the other does not, the extra tabs are clickable and open to nothing.",
|
|
63
|
-
expectedUiState: "Each tab opens to either real content or a named empty state. Not one opens to a blank panel with no message. A tab that is silently dropped from the panel switch is the failure, and it looks exactly like a slow load.",
|
|
64
|
-
expectedData: { blankPanelCount: 0 },
|
|
65
|
-
endResult: "Read-only; nothing persists.",
|
|
66
|
-
},
|
|
67
|
-
"checklist-public-pages-stores-sellers-directories-brand-tabs-every-type-offered": {
|
|
68
|
-
roles: ["guest"],
|
|
69
|
-
startPage: "/brands/brand-beyblade",
|
|
70
|
-
steps: [
|
|
71
|
-
"Open /categories/category-beyblade-burst in a private window and write down every tab it offers.",
|
|
72
|
-
"Open /brands/brand-beyblade and write down every tab it offers.",
|
|
73
|
-
"Compare the two lists, ignoring the Stores tab which categories have and brands do not.",
|
|
74
|
-
"Look specifically for Classifieds, Digital Codes, Live Items and Art & Stickers on the brand page.",
|
|
75
|
-
],
|
|
76
|
-
expectedBehaviour: "A brand page offers the same listing-type tabs as a category page minus Stores. The two components are deliberate near-duplicates with different scoping, and four types were silently missing from one of them while present in the other.",
|
|
77
|
-
expectedUiState: "Apart from Stores, the two tab lists match. Classifieds, Digital Codes, Live Items and Art & Stickers are all present on the brand page rather than quietly absent.",
|
|
78
|
-
endResult: "Read-only; nothing persists. A missing tab is invisible unless the two pages are compared side by side, which is why both lists are written down.",
|
|
79
|
-
},
|
|
80
|
-
"checklist-public-pages-stores-sellers-directories-category-brand-tab-counts-match": {
|
|
81
|
-
roles: ["guest"],
|
|
82
|
-
startPage: "/categories/category-beyblade-burst",
|
|
83
|
-
steps: [
|
|
84
|
-
"Open /categories/category-beyblade-burst in a private window.",
|
|
85
|
-
"Write down the count badge on every tab.",
|
|
86
|
-
"Open each tab in turn and count the items it actually shows, paging to the end.",
|
|
87
|
-
"Compare each pair.",
|
|
88
|
-
"Repeat on /brands/brand-beyblade.",
|
|
89
|
-
],
|
|
90
|
-
expectedBehaviour: "Counts come from one derivation over the same tab array, so a badge cannot describe a tab that no longer exists or miss one that does. A count that fails must come back as unknown rather than zero — failing to zero would hide a tab holding real stock on a transient error.",
|
|
91
|
-
expectedUiState: "Every badge matches the number of items in its tab. A badge of zero on a tab that has items, or a populated badge over an empty tab, are both failures.",
|
|
92
|
-
expectedData: { mismatchedBadgeCount: 0 },
|
|
93
|
-
endResult: "Read-only; nothing persists.",
|
|
94
|
-
},
|
|
95
|
-
"checklist-public-pages-stores-sellers-directories-empty-tabs-hidden": {
|
|
96
|
-
roles: ["guest"],
|
|
97
|
-
startPage: "/stores/store-beyblade-arena",
|
|
98
|
-
steps: [
|
|
99
|
-
"Open /stores/store-beyblade-arena in a private window and write down every tab offered.",
|
|
100
|
-
"Open each tab and note which are empty.",
|
|
101
|
-
"Open /stores/store-letitrip-official — a store whose whole catalogue is prize draws — and write down its tabs.",
|
|
102
|
-
"Compare the two stores' tab lists.",
|
|
103
|
-
],
|
|
104
|
-
expectedBehaviour: "A tab is hidden when its count is genuinely zero, and shown when the count could not be computed. That distinction is the whole rule: a count map that does not cover an option returns undefined, which reads as unknown and keeps the tab — so an uncovered option is structurally unhideable while a covered one vanishes correctly.",
|
|
105
|
-
expectedUiState: "Neither store shows a tab for a listing type it has none of. The two stores offer different tab sets, which is the proof that hiding is happening at all — identical tab bars on stores with different catalogues means nothing is being hidden.",
|
|
106
|
-
endResult: "Read-only; nothing persists.",
|
|
107
|
-
},
|
|
108
|
-
"checklist-public-pages-stores-sellers-directories-store-art-stickers-tab-shows-items": {
|
|
109
|
-
roles: ["guest"],
|
|
110
|
-
startPage: "/stores/store-beyblade-arena/art",
|
|
111
|
-
steps: [
|
|
112
|
-
"Open /stores/store-beyblade-arena/art in a private window with no session.",
|
|
113
|
-
"Read the grid and every card title.",
|
|
114
|
-
"Check whether the items are art prints and sticker sheets rather than ordinary products.",
|
|
115
|
-
"Read the availability tabs and click the middle one.",
|
|
116
|
-
],
|
|
117
|
-
expectedBehaviour: "Art and stickers are real listing types with their own filter value. Adding a type to the union and to the plugin registry is not enough — it must also be in the repository's filter-alias map, and a type missing there makes the alias return an empty string that is then dropped, so the query runs with NO listing-type filter and returns everything.",
|
|
118
|
-
expectedUiState: "The grid holds art prints and sticker sheets — 'Dranzer Phoenix Rising — Fan Art Poster' and similar — and not ordinary Beyblade products. It is not an empty grid. The middle availability tab shows the sold-out art fixture.",
|
|
119
|
-
expectedData: { ordinaryProductsInArtTab: 0 },
|
|
120
|
-
endResult: "Read-only; nothing persists. A grid full of ordinary products is the dropped-filter failure; an empty grid is a different one.",
|
|
121
|
-
},
|
|
122
|
-
"checklist-public-pages-stores-sellers-directories-store-tab-counts-match-contents": {
|
|
123
|
-
roles: ["guest"],
|
|
124
|
-
startPage: "/stores/store-beyblade-arena",
|
|
125
|
-
steps: [
|
|
126
|
-
"Open /stores/store-beyblade-arena in a private window.",
|
|
127
|
-
"Write down the count badge on each of Products, Auctions, Pre-Orders, Prize Draws, Classifieds, Digital Codes, Live Items and Art & Stickers.",
|
|
128
|
-
"Open each of those tabs and count the items, paging to the end of each.",
|
|
129
|
-
"Compare each pair and note any mismatch.",
|
|
130
|
-
],
|
|
131
|
-
expectedBehaviour: "Each badge is computed from the same query its tab runs, under the same availability scope. A badge counted without the availability filter over-reports by every sold or ended row.",
|
|
132
|
-
expectedUiState: "All eight badges match their tab contents. A badge that counts sold-out items the Available tab then hides is the most likely mismatch and is still a mismatch.",
|
|
133
|
-
expectedData: { mismatchedBadgeCount: 0 },
|
|
134
|
-
endResult: "Read-only; nothing persists.",
|
|
135
|
-
},
|
|
136
|
-
"checklist-public-pages-stores-sellers-directories-store-tab-sort-survives-reload": {
|
|
137
|
-
roles: ["guest"],
|
|
138
|
-
startPage: "/stores/store-beyblade-arena/auctions",
|
|
139
|
-
steps: [
|
|
140
|
-
"Open /stores/store-beyblade-arena/auctions in a private window.",
|
|
141
|
-
"Read the sort dropdown's selection and the order of the cards.",
|
|
142
|
-
"Change the sort to a different option.",
|
|
143
|
-
"Read the new card order and the URL.",
|
|
144
|
-
"Reload the page.",
|
|
145
|
-
"Read the sort dropdown's selection and the card order again, before touching anything.",
|
|
146
|
-
],
|
|
147
|
-
expectedBehaviour: "Sort lives in the URL, so the server's first paint and the dropdown agree. When the server renders a default the client does not share, the first paint shows one order and the dropdown claims another — and because the client caches the server's data indefinitely, the disagreement never resolves itself.",
|
|
148
|
-
expectedUiState: "After the reload the dropdown shows the chosen sort AND the cards are in that order on first paint — not the default order that then re-sorts a moment later.",
|
|
149
|
-
endResult: "Read-only; nothing persists beyond the URL.",
|
|
150
|
-
},
|
|
151
|
-
"checklist-public-pages-stores-sellers-directories-store-preorders-tab-default-sort": {
|
|
152
|
-
roles: ["guest"],
|
|
153
|
-
startPage: "/stores/store-beyblade-arena/pre-orders",
|
|
154
|
-
steps: [
|
|
155
|
-
"Open /pre-orders in a private window and read the sort dropdown's default selection.",
|
|
156
|
-
"Open /stores/store-beyblade-arena/pre-orders and read its sort dropdown's default selection.",
|
|
157
|
-
"Compare the two.",
|
|
158
|
-
"Read the delivery dates on the store tab's cards from the top down.",
|
|
159
|
-
],
|
|
160
|
-
expectedBehaviour: "Both surfaces derive their sort options and default from the listing type's own plugin, so they cannot disagree. Store tabs once carried local shadow copies of the sort array which had drifted in both labels and default, so the same data opened newest-first in one place and earliest-delivery-first in the other.",
|
|
161
|
-
expectedUiState: "Both dropdowns show earliest-delivery-first. The store tab's dates ascend down the page. Two different defaults for the same listing type is the failure.",
|
|
162
|
-
endResult: "Read-only; nothing persists.",
|
|
163
|
-
},
|
|
164
|
-
"checklist-public-pages-stores-sellers-directories-store-classified-live-facets-filter": {
|
|
165
|
-
roles: ["guest"],
|
|
166
|
-
startPage: "/stores/store-beyblade-arena/classified",
|
|
167
|
-
steps: [
|
|
168
|
-
"Open /stores/store-beyblade-arena/classified in a private window and read the result count.",
|
|
169
|
-
"Open the filters and select the city Mumbai, then apply.",
|
|
170
|
-
"Read the result count and each card's city.",
|
|
171
|
-
"Clear that, tick 'negotiable', apply, and read the count.",
|
|
172
|
-
"Clear that, tick 'accepts shipping', apply, and read the count.",
|
|
173
|
-
"Open the store's Live Items tab and repeat with the species, sex and jurisdiction facets.",
|
|
174
|
-
],
|
|
175
|
-
inputs: { city: "Mumbai" },
|
|
176
|
-
expectedBehaviour: "Per-type facets reach the query. A facet can render, count toward the filter badge and change nothing at all — that happens when it emits a field the query allowlist does not carry, or carries a field the document does not have, and neither failure raises anything.",
|
|
177
|
-
expectedUiState: "Every facet visibly changes the result count and the cards shown. Selecting Mumbai leaves only Mumbai listings. A facet that leaves the count identical while the filter badge increments is the exact failure.",
|
|
178
|
-
expectedData: { inertFacetCount: 0 },
|
|
179
|
-
endResult: "Read-only; nothing persists beyond the URL.",
|
|
180
|
-
},
|
|
181
|
-
"checklist-public-pages-stores-sellers-directories-store-tab-empty-state-not-error": {
|
|
182
|
-
roles: ["guest"],
|
|
183
|
-
startPage: "/stores/store-letitrip-official",
|
|
184
|
-
steps: [
|
|
185
|
-
"Open /stores/store-letitrip-official in a private window with no session. 🛑 NOT store-vintage-vault-co, which this case used to name: that store is SUSPENDED with isPublic false, and getStoreBySlug returns null unless status is ACTIVE and isPublic is true — so its public page calls notFound(). A tester would meet a 404 and have to judge an empty state on a page that does not exist.",
|
|
186
|
-
"Open every tab offered and find one that is genuinely empty. This store carries SIX listings, all prize draws, so eleven of its twelve tabs are empty and one is not — which gives both halves of the comparison.",
|
|
187
|
-
"Read exactly what is shown in that empty tab.",
|
|
188
|
-
"Wait 10 seconds and read it again.",
|
|
189
|
-
"Check for any error toast anywhere on the page.",
|
|
190
|
-
],
|
|
191
|
-
expectedBehaviour: "An empty tab shows a named empty state. The two failure modes to separate are a spinner that never resolves — which is what a data fetch that neither succeeds nor reports failure looks like — and a missing-index error surfaced as a toast, which is a real backend fault dressed as a UI hiccup.",
|
|
192
|
-
expectedUiState: "The empty tab shows a friendly message inside the normal layout. Not a blank white area, not a spinner still turning after 10 seconds, and no toast mentioning an index or a failed precondition.",
|
|
193
|
-
endResult: "Read-only; nothing persists.",
|
|
194
|
-
},
|
|
195
|
-
"checklist-public-pages-stores-sellers-directories-sellers-directory": {
|
|
196
|
-
roles: ["guest"],
|
|
197
|
-
startPage: "/sellers",
|
|
198
|
-
steps: [
|
|
199
|
-
"Open /sellers in a private window with no session.",
|
|
200
|
-
"Read every seller card — name, avatar and any stats.",
|
|
201
|
-
"Search the page source for an email address and for a phone number.",
|
|
202
|
-
"Click into one seller and read where it lands.",
|
|
203
|
-
],
|
|
204
|
-
expectedBehaviour: "The directory lists sellers with public-facing detail only. Email and phone are PII-encrypted at rest and have no place on a public directory in any form.",
|
|
205
|
-
expectedUiState: "Cards render with names and avatars. Neither the rendered page nor its source contains an email address or a phone number. Each card links to a real seller page rather than a 404.",
|
|
206
|
-
expectedData: { piiInSource: 0 },
|
|
207
|
-
endResult: "Read-only; nothing persists.",
|
|
208
|
-
},
|
|
209
|
-
"checklist-public-pages-stores-sellers-directories-seller-detail-page": {
|
|
210
|
-
roles: ["guest"],
|
|
211
|
-
startPage: "/stores/store-beyblade-arena",
|
|
212
|
-
steps: [
|
|
213
|
-
"Open /stores/store-beyblade-arena in a private window.",
|
|
214
|
-
"Read the header, the tabs and the listings.",
|
|
215
|
-
"Open the store's own listing-type dropdown, if it offers one, and select each option in turn.",
|
|
216
|
-
"Note any option that returns nothing.",
|
|
217
|
-
],
|
|
218
|
-
inputs: { storeId: "store-beyblade-arena" },
|
|
219
|
-
expectedBehaviour: "This store carries standard products, auctions, pre-orders, classifieds, digital codes, live items, art and stickers — every type except prize draws, which all belong to store-letitrip-official. So the dropdown must offer the eight it has and not the one it does not: an option for an absent type silently returns nothing, which reads as a broken query rather than an empty catalogue.",
|
|
220
|
-
expectedUiState: "The page renders with its header and tabs. Every option the listing-type dropdown offers returns at least one item, and Prize Draws is not offered. An offered option that returns nothing means either the type is absent from this store or it is being dropped from the query.",
|
|
221
|
-
expectedData: { emptyTypeOptionCount: 0 },
|
|
222
|
-
endResult: "Read-only; nothing persists.",
|
|
223
|
-
},
|
|
224
|
-
"checklist-public-pages-stores-sellers-directories-scams-registry": {
|
|
225
|
-
roles: ["guest"],
|
|
226
|
-
startPage: "/scams",
|
|
227
|
-
steps: [
|
|
228
|
-
"Open /scams in a private window with no session.",
|
|
229
|
-
"Read the list and the filters offered.",
|
|
230
|
-
"Select each status filter value in turn and read the results.",
|
|
231
|
-
"Open one scammer profile and read its fields.",
|
|
232
|
-
"Search that page's source for any unmasked full phone number or email.",
|
|
233
|
-
],
|
|
234
|
-
expectedBehaviour: "The registry lists reported profiles with filters whose values match the real stored status set. A filter chip whose value is not a real stored status returns zero rows forever with no error — the comparison is byte-exact, so a wrong word or wrong case is a permanently empty chip.",
|
|
235
|
-
expectedUiState: "Every status filter value returns rows or a named empty state, and at least one returns rows. The profile page shows the report detail. Identifiers are masked rather than published in full.",
|
|
236
|
-
endResult: "Read-only; nothing persists.",
|
|
237
|
-
},
|
|
238
|
-
"checklist-public-pages-stores-sellers-directories-scam-related-profiles-sections": {
|
|
239
|
-
roles: ["guest"],
|
|
240
|
-
startPage: "/scams",
|
|
241
|
-
steps: [
|
|
242
|
-
"Open /scams in a private window and open a scammer profile that has cross-links.",
|
|
243
|
-
"Find the 'Related Profiles' section and read its entries.",
|
|
244
|
-
"Find the separately-labelled 'Similar Scam Reports' section and read its entries.",
|
|
245
|
-
"Check that the two sections are distinct and separately headed.",
|
|
246
|
-
"Check whether the current profile appears in either.",
|
|
247
|
-
],
|
|
248
|
-
expectedBehaviour: "Same-identity cross-links and same-pattern matches are two different claims and must never be merged. 'Related Profiles' asserts these are the same person; 'Similar Scam Reports' asserts only that the reports share a scam type. Presenting the second as the first accuses someone of being a person they are not.",
|
|
249
|
-
expectedUiState: "Two sections with distinct headings. Related Profiles holds only explicit cross-links; Similar Scam Reports holds same-type matches. Neither includes the profile currently open.",
|
|
250
|
-
expectedData: { selfLinkCount: 0 },
|
|
251
|
-
endResult: "Read-only; nothing persists. One merged section is the failure even if every entry in it is individually correct.",
|
|
252
|
-
},
|
|
253
|
-
};
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the search-and-nav/employee-permissions 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
|
-
* 🛑 THE SEED ALREADY HAS BOTH EMPLOYEE PERSONAS — user-employee-blog carries the
|
|
10
|
-
* blog_poster permission and user-employee-trust carries trust_and_safety. Neither
|
|
11
|
-
* case needs to invite anyone; signing in as them is the whole setup. The `users`
|
|
12
|
-
* collection is PRESERVED by a tester run, so they survive teardown, but a fresh
|
|
13
|
-
* project needs `npx appkit-seed load --collections users` once before they exist.
|
|
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
|
-
/*
|
|
23
|
-
* Measured on 2026-09-29 with `node scripts/diff-employee-sidebar.mjs`, which
|
|
24
|
-
* exists for exactly this and computes what every preset sees:
|
|
25
|
-
*
|
|
26
|
-
* total 90 items across 12 groups (the case said 91)
|
|
27
|
-
* blog_poster sees 5
|
|
28
|
-
* trust_and_safety sees 24
|
|
29
|
-
* maintenance_employee sees 77 (the most permissive preset)
|
|
30
|
-
* 20 presets in all, and the SMALLEST is 5
|
|
31
|
-
*
|
|
32
|
-
* The nine groups the first case names as vanishing for the blog employee are
|
|
33
|
-
* exactly the nine the script reports: Finance, Procurement, Catalog, Testing,
|
|
34
|
-
* Site, Events, Trust & Safety, System, Maintenance. That is a strong
|
|
35
|
-
* confirmation, so the case is kept as written apart from the count.
|
|
36
|
-
*
|
|
37
|
-
* 🛑 THE SECOND CASE ASKED FOR 20 SIGN-IN CYCLES to prove something the repo
|
|
38
|
-
* already computes. Setting each preset as admin, signing in as the employee
|
|
39
|
-
* and counting, twenty times over, is most of a session; and the answer is in
|
|
40
|
-
* the script above, where the smallest preset is 5 and no preset reaches zero.
|
|
41
|
-
* It now checks two presets by hand and defers the sweep to the script, which
|
|
42
|
-
* is the difference between a case a tester will run and one they will skip.
|
|
43
|
-
*
|
|
44
|
-
* Two things the script itself reports and neither case mentioned:
|
|
45
|
-
*
|
|
46
|
-
* — 45 distinct preset permissions gate NO sidebar entry at all; they gate
|
|
47
|
-
* routes and actions instead. So a preset can differ from another in
|
|
48
|
-
* permissions and not differ in sidebar count, and identical counts
|
|
49
|
-
* between two presets are not automatically the bug.
|
|
50
|
-
* — An employee with hand-picked `permissions[]` rather than a preset is NOT
|
|
51
|
-
* covered by any of this. That is a real coverage gap, recorded here
|
|
52
|
-
* rather than silently left out.
|
|
53
|
-
*/
|
|
54
|
-
export const authored = {
|
|
55
|
-
"checklist-search-and-nav-employee-permissions-employee-sees-only-their-permissions": {
|
|
56
|
-
roles: ["employee", "admin"],
|
|
57
|
-
startPage: "/admin",
|
|
58
|
-
steps: [
|
|
59
|
-
"Sign in as employee-blog@letitrip.in / TempPass123!.",
|
|
60
|
-
"Open /admin and count every entry in the sidebar.",
|
|
61
|
-
"Read every group heading that is present.",
|
|
62
|
-
"Look specifically for Finance, Procurement, Catalog, Testing, Site, Events, Trust & Safety, System and Maintenance.",
|
|
63
|
-
"Sign out and sign in as employee-trust@letitrip.in / TempPass123!.",
|
|
64
|
-
"Open /admin and count the sidebar entries again.",
|
|
65
|
-
"Sign out and sign in as admin@letitrip.in / TempPass123!, then open /admin and count the entries.",
|
|
66
|
-
],
|
|
67
|
-
inputs: { blogEmployee: "employee-blog@letitrip.in", trustEmployee: "employee-trust@letitrip.in" },
|
|
68
|
-
expectedBehaviour: "Nav filtering keys on each item's own id to look up its required permission. `filterNavItems` opens with `if (!item.id) return true;` and no item in the config had one — so all 90 entries passed for everybody and every requiredPermission was decorative. A group left with no visible children is removed entirely rather than rendering an empty heading.",
|
|
69
|
-
expectedUiState: "The blog employee sees FIVE entries, not 90. Finance, Procurement, Catalog, Testing, Site, Events, Trust & Safety and System and Maintenance are absent as HEADINGS, not present-and-empty. The trust employee sees 24. The admin sees all 90 across 12 groups. Three genuinely different counts is the pass; three identical counts is the exact bug — and 90 for all three is the specific bug this replaced.",
|
|
70
|
-
expectedData: { blogEntries: 5, trustEntries: 24, adminEntries: 90, adminGroups: 12 },
|
|
71
|
-
endResult: "Read-only; nothing persists. Comparing two presets against each other AND against admin is what distinguishes real filtering from a filter that happens to hide the same fixed set from everyone.",
|
|
72
|
-
},
|
|
73
|
-
"checklist-search-and-nav-employee-permissions-employee-sidebar-never-empty": {
|
|
74
|
-
roles: ["admin", "employee"],
|
|
75
|
-
startPage: "/admin/team",
|
|
76
|
-
steps: [
|
|
77
|
-
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
78
|
-
"Open /admin/team and open the editor for employee-blog@letitrip.in.",
|
|
79
|
-
"Read every permission preset the editor offers and count them — there are 20.",
|
|
80
|
-
"Set the account to blog_poster, the smallest preset, and save.",
|
|
81
|
-
"Sign out, sign in as employee-blog@letitrip.in / TempPass123!, open /admin and count the sidebar entries.",
|
|
82
|
-
"Sign back in as admin, set the account to maintenance_employee, the most permissive preset, and save.",
|
|
83
|
-
"Sign in as the employee again and count the entries.",
|
|
84
|
-
"Sign back in as admin and set the account back to blog_poster as the last step.",
|
|
85
|
-
"For the remaining 18 presets, run `node scripts/diff-employee-sidebar.mjs` rather than signing in 18 more times — it computes every preset's count from the same config the sidebar reads.",
|
|
86
|
-
],
|
|
87
|
-
inputs: { employee: "employee-blog@letitrip.in" },
|
|
88
|
-
expectedBehaviour: "No preset produces a completely blank sidebar. At minimum every employee reaches the dashboard itself, so the portal is navigable from the moment they sign in. Measured: the smallest of the 20 presets is blog_poster at 5 entries and the largest is maintenance_employee at 77, so the floor is well clear of zero.",
|
|
89
|
-
expectedUiState: "Both presets checked by hand show entries — 5 for blog_poster and 77 for maintenance_employee — and the script reports no preset below 5. A blank sidebar is the failure: an employee cannot tell it from a broken account and will report it as one, which is a support ticket the permission system caused rather than prevented.",
|
|
90
|
-
expectedData: { blogPosterEntries: 5, maintenanceEmployeeEntries: 77, presetCount: 20 },
|
|
91
|
-
endResult: "The account is back on blog_poster, which the case above depends on. Leaving it on another preset silently breaks that case's expected count of exactly 5.",
|
|
92
|
-
},
|
|
93
|
-
};
|