@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,138 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/seller-analytics-payouts page.
|
|
3
|
-
* WHAT: 6 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
|
-
* 🛑 A PAYOUT IS MONEY LEAVING THE PLATFORM, so several cases here read the FULL
|
|
10
|
-
* deduction breakdown rather than only the net figure. A net amount alone cannot
|
|
11
|
-
* distinguish a correct deduction from a wrong one, and the seller-side deduction
|
|
12
|
-
* is deliberately uncapped where the buyer-facing platform fee is capped — so the
|
|
13
|
-
* two are not expected to agree and a case that assumes they do is wrong.
|
|
14
|
-
*
|
|
15
|
-
* @tag domain:tester
|
|
16
|
-
* @tag layer:seed
|
|
17
|
-
* @tag pattern:none
|
|
18
|
-
* @tag access:server-only
|
|
19
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
20
|
-
* @tag sideEffects:none
|
|
21
|
-
*/
|
|
22
|
-
export const authored = {
|
|
23
|
-
"checklist-selling-seller-analytics-payouts-view-analytics": {
|
|
24
|
-
roles: ["seller"],
|
|
25
|
-
startPage: "/store/analytics",
|
|
26
|
-
steps: [
|
|
27
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
28
|
-
"Open the store's analytics page and read every figure and chart on it.",
|
|
29
|
-
"Write down any figure reading zero, a dash, or 'undefined'.",
|
|
30
|
-
"Change the date range if one is offered and read the figures again.",
|
|
31
|
-
"Compare the order count shown against the number of orders in /store/orders.",
|
|
32
|
-
"Reload the page and check the figures are the same.",
|
|
33
|
-
],
|
|
34
|
-
expectedBehaviour: "Analytics read from pre-computed rollups rather than scanning every order per request — that is the pattern this codebase uses to keep a dashboard load inside its read budget. A figure that fails to compute must read as unknown rather than as zero: zero is a claim, and it is the wrong one.",
|
|
35
|
-
expectedUiState: "Figures and charts render with real values. The order count is consistent with the orders list. A dash for a genuinely unavailable metric is acceptable; a confident zero beside a list that clearly has rows is not.",
|
|
36
|
-
endResult: "Read-only; nothing persists. Note any metric reading zero against visible data — that is the failure this case exists for.",
|
|
37
|
-
},
|
|
38
|
-
"checklist-selling-seller-analytics-payouts-view-payouts": {
|
|
39
|
-
roles: ["seller"],
|
|
40
|
-
startPage: "/store/payouts",
|
|
41
|
-
steps: [
|
|
42
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
43
|
-
"Open /store/payouts and read every row — period, gross, deductions, net and status.",
|
|
44
|
-
"Read every status filter offered and select each in turn.",
|
|
45
|
-
"Write down any filter returning zero rows, then check the unfiltered list for rows of that status.",
|
|
46
|
-
"Read the sort dropdown's default and confirm it is one of the offered options.",
|
|
47
|
-
"Open one payout row.",
|
|
48
|
-
],
|
|
49
|
-
expectedBehaviour: "The list shows each payout with its own deductions rather than a bare net figure. Status filters use the values payouts actually hold — and a default sort that is not among the offered options opens the dropdown with nothing selected, which is a real defect on this listing family.",
|
|
50
|
-
expectedUiState: "Rows show period, gross, deductions and net. Every status filter either returns its own rows or is empty with none in the unfiltered list either. The sort default is one of the options. Rows open a detail view.",
|
|
51
|
-
endResult: "Read-only; nothing persists beyond the URL.",
|
|
52
|
-
},
|
|
53
|
-
"checklist-selling-seller-analytics-payouts-payouts-checkbox-select": {
|
|
54
|
-
roles: ["seller"],
|
|
55
|
-
startPage: "/store/payouts",
|
|
56
|
-
steps: [
|
|
57
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
58
|
-
"Open /store/payouts and tick the checkbox on one row.",
|
|
59
|
-
"Read the bulk action bar that appears and the count it states.",
|
|
60
|
-
"Click the row itself, away from the checkbox, and read what happens.",
|
|
61
|
-
"Tick a second row and read the count again.",
|
|
62
|
-
"Use select-all and read the count against the number of rows on the page.",
|
|
63
|
-
"Clear the selection and check the bar disappears.",
|
|
64
|
-
],
|
|
65
|
-
expectedBehaviour: "Selecting rows and opening a row are separate gestures — merely WIRING selection must not disable navigation. A card or row that stops opening the moment a selection handler exists, regardless of whether anything is selected, is the specific defect this checks.",
|
|
66
|
-
expectedUiState: "Ticking a checkbox shows a bulk bar with an accurate count. Clicking the row body with nothing selected still opens the payout. Select-all matches the visible row count. Clearing hides the bar without leaving an empty strip behind.",
|
|
67
|
-
endResult: "Clear the selection; nothing is mutated. A row that will not open while a checkbox exists is the failure.",
|
|
68
|
-
},
|
|
69
|
-
"checklist-selling-seller-analytics-payouts-payouts-detail-panel": {
|
|
70
|
-
roles: ["seller"],
|
|
71
|
-
startPage: "/store/payouts",
|
|
72
|
-
steps: [
|
|
73
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
74
|
-
"Open /store/payouts and open a payout's detail panel from the list.",
|
|
75
|
-
"Write down every field label it shows, in order.",
|
|
76
|
-
"Read the deduction lines and check they add up to gross minus net.",
|
|
77
|
-
"Read the list of orders included in the payout.",
|
|
78
|
-
"Close the panel and check the list is unchanged behind it.",
|
|
79
|
-
],
|
|
80
|
-
expectedBehaviour: "The panel shows the full breakdown — gross, each deduction, net — and the orders that make it up. The arithmetic is the check: a net figure alone cannot distinguish a correct deduction from a wrong one, and a payout is money actually leaving.",
|
|
81
|
-
expectedUiState: "Gross minus the listed deductions equals the net shown, to the paisa. The included orders are listed and identifiable. Any rounding gap is a finding, not a rounding artefact.",
|
|
82
|
-
expectedData: { deductionsReconcile: true },
|
|
83
|
-
endResult: "Read-only; close the panel without acting.",
|
|
84
|
-
},
|
|
85
|
-
"checklist-selling-seller-analytics-payouts-payouts-reminder-toggle": {
|
|
86
|
-
roles: ["seller"],
|
|
87
|
-
startPage: "/store/payouts",
|
|
88
|
-
steps: [
|
|
89
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
90
|
-
/*
|
|
91
|
-
* 🛑 THE TOGGLE IS PER-PAYOUT, LABELLED 'Remind me', AND SAVES ITSELF.
|
|
92
|
-
*
|
|
93
|
-
* This said "open /store/payouts and find the payout reminder toggle",
|
|
94
|
-
* then "turn it OFF and save if a save is required", then back on. Three
|
|
95
|
-
* things were wrong and each one alone would strand a tester:
|
|
96
|
-
*
|
|
97
|
-
* - it is not on the page. It lives inside a SELECTED payout's detail
|
|
98
|
-
* panel, so a payout has to be opened first.
|
|
99
|
-
* - it is labelled 'Remind me', with the helper text "Flag this payout
|
|
100
|
-
* for a personal follow-up". Nothing reads "reminder".
|
|
101
|
-
* - there is no save. handleToggleReminder PATCHes immediately and
|
|
102
|
-
* toasts 'Reminder set.' or 'Reminder cleared.', so waiting for a save
|
|
103
|
-
* button means never completing the step.
|
|
104
|
-
*
|
|
105
|
-
* And the direction was backwards: no seeded payout sets
|
|
106
|
-
* `sellerReminderFlag`, and the control reads
|
|
107
|
-
* `checked={Boolean(payout.sellerReminderFlag)}` — so it starts OFF.
|
|
108
|
-
* "Turn it OFF" first was a no-op that would have made the reload check
|
|
109
|
-
* pass trivially.
|
|
110
|
-
*/
|
|
111
|
-
"Open /store/payouts and open any payout to show its detail panel.",
|
|
112
|
-
"Find the 'Remind me' toggle in that panel and read its current state — it starts OFF, because no seeded payout carries the flag.",
|
|
113
|
-
"Turn it ON. It saves immediately; look for the toast reading 'Reminder set.' rather than a save button.",
|
|
114
|
-
"RELOAD the page, reopen the SAME payout, and read the toggle's state.",
|
|
115
|
-
"Turn it back off, confirming the toast reads 'Reminder cleared.', and reload once more to confirm.",
|
|
116
|
-
],
|
|
117
|
-
expectedBehaviour: "The preference persists server-side. Off is the direction worth testing when the default is on: a toggle that never saves reads back as its default and passes a test that only ever turns it on.",
|
|
118
|
-
expectedUiState: "After the reload the reopened payout's 'Remind me' toggle is still ON. A toggle that has reverted to off is the failure — and the PATCH will have reported success and toasted 'Reminder set.', which is exactly what makes it invisible without the reload.",
|
|
119
|
-
expectedData: { reminderEnabled: false },
|
|
120
|
-
endResult: "The toggle is back on by the final step, so payout reminders are not left suppressed.",
|
|
121
|
-
},
|
|
122
|
-
"checklist-selling-seller-analytics-payouts-seller-payout-detail-full-page": {
|
|
123
|
-
roles: ["seller"],
|
|
124
|
-
startPage: "/store/payouts",
|
|
125
|
-
steps: [
|
|
126
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
127
|
-
"Open /store/payouts and open a payout's detail panel from the list.",
|
|
128
|
-
"Write down every field label it shows.",
|
|
129
|
-
"Note the payout's id and close the panel.",
|
|
130
|
-
"Open that payout's standalone detail page directly by URL.",
|
|
131
|
-
"Write down every field label it shows and compare the two lists.",
|
|
132
|
-
"Reload the standalone page and confirm it still renders.",
|
|
133
|
-
],
|
|
134
|
-
expectedBehaviour: "The panel and the page render from one shared content component, so their fields are identical by construction. The standalone page exists because a panel cannot be bookmarked, shared with a colleague, or reopened after a crash — and a payout is exactly the record someone needs to send to someone else.",
|
|
135
|
-
expectedUiState: "Both surfaces show the same fields with the same values. The standalone page survives a reload with the same payout loaded. A field present in one and missing from the other means a second copy of the content component has appeared.",
|
|
136
|
-
endResult: "Read-only; nothing persists.",
|
|
137
|
-
},
|
|
138
|
-
};
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/seller-bids-bundles-filters page.
|
|
3
|
-
* WHAT: 4 case(s), keyed by full checklist id.
|
|
4
|
-
*
|
|
5
|
-
* Written by hand, case by case, against the label each one states. There is no
|
|
6
|
-
* generator: the authoring scripts were deleted once it was clear they were
|
|
7
|
-
* scaffolding around work that is simply writing.
|
|
8
|
-
*
|
|
9
|
-
* 🛑 A FILTER CHIP'S id IS PASSED STRAIGHT INTO AN EQUALITY, and the comparison is
|
|
10
|
-
* byte-exact. A chip whose value is a display label, a wrong case, or a status the
|
|
11
|
-
* documents never hold returns zero rows forever with no error anywhere — so every
|
|
12
|
-
* case here reads the chip's ROWS, not merely that the chip responds.
|
|
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-selling-seller-bids-bundles-filters-seller-bids-status-filter": {
|
|
23
|
-
roles: ["seller"],
|
|
24
|
-
startPage: "/store/bids",
|
|
25
|
-
steps: [
|
|
26
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
27
|
-
"Open the store's bids page and note the total row count with no filter applied.",
|
|
28
|
-
"Read every status chip offered and write the list down.",
|
|
29
|
-
"Select each chip in turn and read the row count and the statuses shown in the rows.",
|
|
30
|
-
"Write down any chip that returns zero rows.",
|
|
31
|
-
"For each such chip, check the unfiltered list for rows carrying that status.",
|
|
32
|
-
],
|
|
33
|
-
expectedBehaviour: "Every chip offered corresponds to a status bids actually hold. The last step is what separates an empty chip from a broken one: a chip returning nothing while the unfiltered list contains rows of that status is a wrong filter value, and it fails silently because a byte-exact equality that matches nothing is not an error.",
|
|
34
|
-
expectedUiState: "Each chip either returns rows of its own status, or returns none AND the unfiltered list has none either. A chip that is empty while matching rows are visible unfiltered is the failure, named by chip.",
|
|
35
|
-
expectedData: { chipsEmptyWithMatchingRows: 0 },
|
|
36
|
-
endResult: "Read-only; nothing persists beyond the URL.",
|
|
37
|
-
},
|
|
38
|
-
"checklist-selling-seller-bids-bundles-filters-seller-bids-sort-dropdown": {
|
|
39
|
-
roles: ["seller"],
|
|
40
|
-
startPage: "/store/bids",
|
|
41
|
-
steps: [
|
|
42
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
43
|
-
"Open the store's bids page and read the sort dropdown's default selection and the row order.",
|
|
44
|
-
"Select each other sort option in turn, reading the row order after each.",
|
|
45
|
-
"Write down any option that does not change the order.",
|
|
46
|
-
"Check that the dropdown's default is one of the options it offers.",
|
|
47
|
-
"Reload with a sort applied and read the order on first paint.",
|
|
48
|
-
],
|
|
49
|
-
expectedBehaviour: "Every sort option reorders the rows. An option whose field is not marked sortable is dropped before the query runs, so the dropdown selection changes and nothing moves. A default that is not among the offered options opens the dropdown with nothing selected.",
|
|
50
|
-
expectedUiState: "Each option produces a visibly different order. The default is one of the listed options. After the reload the rows are in the selected order on first paint, not the default order that then re-sorts.",
|
|
51
|
-
expectedData: { inertSortOptions: 0 },
|
|
52
|
-
endResult: "Read-only; nothing persists beyond the URL.",
|
|
53
|
-
},
|
|
54
|
-
"checklist-selling-seller-bids-bundles-filters-seller-bids-bidder-search": {
|
|
55
|
-
roles: ["seller"],
|
|
56
|
-
startPage: "/store/bids",
|
|
57
|
-
steps: [
|
|
58
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
59
|
-
"Open the store's bids page and read a bidder identifier from any row.",
|
|
60
|
-
"Read the search box's placeholder or helper text for how it matches.",
|
|
61
|
-
"Type that identifier exactly and read the results.",
|
|
62
|
-
"Clear the box, type only the first half of it, and read the results.",
|
|
63
|
-
"Clear the box, type zzzznope, and read the results.",
|
|
64
|
-
],
|
|
65
|
-
inputs: { nonsenseQuery: "zzzznope" },
|
|
66
|
-
expectedBehaviour: "Bidder identities are PII-encrypted at rest, so they can only be matched exactly through a blind index — a partial match is impossible by design rather than by omission. The box must SAY so, because otherwise a partial search returning nothing reads as broken.",
|
|
67
|
-
expectedUiState: "The exact identifier returns its rows. The partial one returns none, and the box states that matching is exact. 'zzzznope' returns none rather than the full list.",
|
|
68
|
-
expectedData: { nonsenseResultCount: 0 },
|
|
69
|
-
endResult: "Read-only. Bidder names shown in these rows should be masked — an unmasked full name here is a separate and more serious finding than anything about the search.",
|
|
70
|
-
},
|
|
71
|
-
"checklist-selling-seller-bids-bundles-filters-seller-bundles-active-filter": {
|
|
72
|
-
roles: ["seller"],
|
|
73
|
-
startPage: "/store/bundles",
|
|
74
|
-
steps: [
|
|
75
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
76
|
-
/*
|
|
77
|
-
* 🛑 THE SELLER OWNS NO SEEDED BUNDLE, SO THE CASE HAS TO MAKE ONE.
|
|
78
|
-
*
|
|
79
|
-
* /store/bundles filters on `b.createdByStoreId === store.id`, and
|
|
80
|
-
* `createdByStoreId` appears ZERO times across every seed file — all 11
|
|
81
|
-
* seeded bundles are `createdByType: "admin"`, authored by
|
|
82
|
-
* user-admin-letitrip. They are platform bundles and correctly invisible
|
|
83
|
-
* here.
|
|
84
|
-
*
|
|
85
|
-
* So the page is empty for every seller, and a case that opens it and
|
|
86
|
-
* "notes the total row count" could only ever be answered "could not
|
|
87
|
-
* test". Creating one first makes the case self-sufficient, and the
|
|
88
|
-
* created row is disposable: `categories` is SEED_OWNED, so the next
|
|
89
|
-
* lifecycle wipe removes it.
|
|
90
|
-
*/
|
|
91
|
-
"Open /store/bundles/new and create a bundle named 'QA Bundle active-filter' with at least two of this store's products as members, leaving it Active.",
|
|
92
|
-
"Create a second one named 'QA Bundle inactive-probe' and set it Inactive.",
|
|
93
|
-
"Open the store's bundles page and note the total row count.",
|
|
94
|
-
"Read the active filter's options.",
|
|
95
|
-
"Select active and read the rows and their states.",
|
|
96
|
-
"Select inactive and read the rows and their states.",
|
|
97
|
-
"Confirm the two counts add up to the unfiltered total.",
|
|
98
|
-
"Open one bundle and check its member list is populated rather than reading zero items.",
|
|
99
|
-
"Delete both QA bundles afterwards.",
|
|
100
|
-
],
|
|
101
|
-
expectedBehaviour: "The two filter states partition the list, so their counts sum to the total. The member check matters separately: a bundle's members are mirrored onto the bundle for index-friendly reads, and a reader trusting only that mirror shows an empty bundle whenever a write path forgot to update it.",
|
|
102
|
-
expectedUiState: "Active and inactive each return their own rows and the counts sum to the unfiltered total. The opened bundle lists its members with titles and images rather than reading '0 items'.",
|
|
103
|
-
expectedData: { partitionSumsToTotal: true },
|
|
104
|
-
endResult: "Both QA bundles are deleted, leaving the store's bundle list as it was — empty, since no seeded bundle belongs to a store. If the delete fails, say so: `categories` is SEED_OWNED and the next lifecycle wipe clears them anyway, so a leftover is untidy rather than harmful.",
|
|
105
|
-
},
|
|
106
|
-
};
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/seller-catalog-org page.
|
|
3
|
-
* WHAT: 8 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
|
-
* 🛑 THREE DIFFERENT THINGS HERE ARE ALL CALLED "CATEGORY", and conflating them is
|
|
10
|
-
* how the first version of this file described the wrong object twice:
|
|
11
|
-
*
|
|
12
|
-
* /store/categories STOREFRONT shelves. Own collection
|
|
13
|
-
* (`storeCategoriesRepository`), scoped to one
|
|
14
|
-
* store, and the field is **Label**, not Name.
|
|
15
|
-
* /store/sublisting-categories the seller's sub-groupings, with DERIVED page
|
|
16
|
-
* metadata that must be recomputed on rename.
|
|
17
|
-
* the product form's picker the GLOBAL taxonomy. Its inline-create posts to
|
|
18
|
-
* the admin categories endpoint — which admits
|
|
19
|
-
* sellers deliberately (ROLES_STORE_WRITE, with a
|
|
20
|
-
* comment saying it is for this picker).
|
|
21
|
-
*
|
|
22
|
-
* 🛑 A PRODUCT CARRIES ITS FULL ANCESTOR CHAIN so a parent category page can match
|
|
23
|
-
* on its own id alone — and since 2026-09-14 that chain IS derived on write, by
|
|
24
|
-
* `ProductRepository.deriveTaxonomy()`, from both `create` and `update`. This file
|
|
25
|
-
* used to say the opposite and instruct the tester to REPORT a one-element chain as
|
|
26
|
-
* a known gap; that is now a false bug report. `deep-category-chain-derived` is the
|
|
27
|
-
* case that can actually fail if the derivation regresses.
|
|
28
|
-
*
|
|
29
|
-
* The inline-create form sends only name/slug/description/isActive — there is **no
|
|
30
|
-
* parent field** — so a category created that way is always a root and correctly
|
|
31
|
-
* shows exactly one link. One link there is arithmetic, not a defect.
|
|
32
|
-
*
|
|
33
|
-
* @tag domain:tester
|
|
34
|
-
* @tag layer:seed
|
|
35
|
-
* @tag pattern:none
|
|
36
|
-
* @tag access:server-only
|
|
37
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
38
|
-
* @tag sideEffects:none
|
|
39
|
-
*/
|
|
40
|
-
export const authored = {
|
|
41
|
-
"checklist-selling-seller-catalog-org-seller-categories-crud": {
|
|
42
|
-
roles: ["seller"],
|
|
43
|
-
startPage: "/store/categories",
|
|
44
|
-
steps: [
|
|
45
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
46
|
-
"Open the store's categories page and read the list. These are STOREFRONT shelves scoped to this store — not the global taxonomy the product form's category picker offers.",
|
|
47
|
-
"Create one and save. The field is labelled 'Label', not 'Name' — type 'QA Shelf catalog-org' into it. Leave the slug blank, it is optional on create.",
|
|
48
|
-
"RELOAD and confirm it is listed under that label.",
|
|
49
|
-
"Change the Label to 'QA Shelf catalog-org renamed' WITHOUT touching the slug field, save, then RELOAD and read both the label and the slug.",
|
|
50
|
-
"Delete it and RELOAD to confirm it is gone.",
|
|
51
|
-
],
|
|
52
|
-
inputs: {
|
|
53
|
-
label: "QA Shelf catalog-org",
|
|
54
|
-
renamed: "QA Shelf catalog-org renamed",
|
|
55
|
-
},
|
|
56
|
-
expectedBehaviour: "Create, rename and delete all persist against this store. The rename is the one worth watching: slug is its own editable field here rather than something derived from the label, so editing the label alone must leave the slug exactly as it was — a slug that silently re-derives would break every link to the shelf.",
|
|
57
|
-
expectedUiState: "Each operation survives its reload. After the rename the new label is shown and the slug is byte-identical to what it was before. A validation error naming a field the form does not show is also a failure — the create schema requires only the label.",
|
|
58
|
-
endResult: "The shelf is deleted by the final step. Nothing in the global category taxonomy is touched by this case.",
|
|
59
|
-
},
|
|
60
|
-
"checklist-selling-seller-catalog-org-seller-sublisting-categories-crud": {
|
|
61
|
-
roles: ["seller"],
|
|
62
|
-
startPage: "/store/sublisting-categories",
|
|
63
|
-
steps: [
|
|
64
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
65
|
-
"Open the store's sublisting-categories page and read the list.",
|
|
66
|
-
"Create one named 'QA Sublisting catalog-org' with a description and save.",
|
|
67
|
-
"RELOAD and read every field.",
|
|
68
|
-
"Rename it to 'QA Sublisting catalog-org renamed', save, and RELOAD.",
|
|
69
|
-
"Read the page title and description shown for it, and check they reflect the new name.",
|
|
70
|
-
"Delete it.",
|
|
71
|
-
],
|
|
72
|
-
inputs: {
|
|
73
|
-
name: "QA Sublisting catalog-org",
|
|
74
|
-
renamed: "QA Sublisting catalog-org renamed",
|
|
75
|
-
},
|
|
76
|
-
expectedBehaviour: "A sublisting category's derived page metadata is recomputed on rename. Deriving it only at creation freezes the title and description at the original name, so the page keeps describing itself as something it is no longer called — a create-time transform the update path does not repeat.",
|
|
77
|
-
expectedUiState: "After the rename and reload, both the name AND the derived title and description reflect the new name. Metadata still naming the original is the failure.",
|
|
78
|
-
endResult: "The sublisting category is deleted by the final step.",
|
|
79
|
-
},
|
|
80
|
-
"checklist-selling-seller-catalog-org-sublisting-categories-standard-toolbar": {
|
|
81
|
-
roles: ["seller"],
|
|
82
|
-
startPage: "/store/sublisting-categories",
|
|
83
|
-
steps: [
|
|
84
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
85
|
-
"Open the store's sublisting-categories page and write down every toolbar control, left to right.",
|
|
86
|
-
"Open /store/products and write down its toolbar controls the same way.",
|
|
87
|
-
"Compare the two orderings.",
|
|
88
|
-
"Type zzzznope into the search box and read the result count.",
|
|
89
|
-
"Look for any empty gap in the toolbar where a control would sit.",
|
|
90
|
-
],
|
|
91
|
-
inputs: { nonsenseQuery: "zzzznope" },
|
|
92
|
-
expectedBehaviour: "This listing uses the shared toolbar scaffold, so its controls match every other listing's in kind and order. The nonsense query is the control that proves the search box filters rather than decorates.",
|
|
93
|
-
expectedUiState: "The two toolbars present the same controls in the same order. 'zzzznope' returns zero rows and an empty state, not the full list. No empty gap where a control was removed.",
|
|
94
|
-
expectedData: { nonsenseResultCount: 0 },
|
|
95
|
-
endResult: "Read-only; nothing persists beyond the URL.",
|
|
96
|
-
},
|
|
97
|
-
"checklist-selling-seller-catalog-org-seller-listing-templates-crud": {
|
|
98
|
-
roles: ["seller"],
|
|
99
|
-
startPage: "/store/listing-templates",
|
|
100
|
-
steps: [
|
|
101
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
102
|
-
"Open /store/listing-templates and read the list.",
|
|
103
|
-
"Create a template named 'QA Template catalog-org' with a category, a condition and a description filled in, and save.",
|
|
104
|
-
"RELOAD and read every field of the saved template.",
|
|
105
|
-
"Open /store/products/new and apply that template.",
|
|
106
|
-
"Read which fields it populated.",
|
|
107
|
-
"Delete the template.",
|
|
108
|
-
],
|
|
109
|
-
inputs: { name: "QA Template catalog-org" },
|
|
110
|
-
expectedBehaviour: "A template stores a reusable set of field values and applying it populates them in a new listing form. There are two template features in this codebase — an older product-template one superseded by this listing-template one — so confirming which page is reachable from the sidebar matters as much as the CRUD itself.",
|
|
111
|
-
expectedUiState: "The template survives its reload with every field. Applying it in the product form fills those fields rather than only the name. A template that saves but populates nothing is the failure.",
|
|
112
|
-
endResult: "The template is deleted by the final step; leave the product editor without saving.",
|
|
113
|
-
},
|
|
114
|
-
"checklist-selling-seller-catalog-org-seller-category-inline-create": {
|
|
115
|
-
roles: ["seller"],
|
|
116
|
-
startPage: "/store/products/new",
|
|
117
|
-
steps: [
|
|
118
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
119
|
-
"Open /store/products/new and find the category picker.",
|
|
120
|
-
"Type QA Category inline-create into its search box.",
|
|
121
|
-
"Read what the picker offers when nothing matches.",
|
|
122
|
-
"Use the create control and complete the form it opens.",
|
|
123
|
-
"Read the picker's selection afterwards.",
|
|
124
|
-
],
|
|
125
|
-
inputs: { categoryName: "QA Category inline-create" },
|
|
126
|
-
expectedBehaviour: "The category picker offers inline creation for the same reason the brand picker does — a seller listing something genuinely new should not have to abandon the form. The created option is auto-selected.",
|
|
127
|
-
expectedUiState: "A create control appears when the search matches nothing, and after saving the picker shows the new category as selected without being re-opened.",
|
|
128
|
-
endResult: "A category exists. Leave the editor without saving — it is what the next case reads.",
|
|
129
|
-
},
|
|
130
|
-
"checklist-selling-seller-catalog-org-seller-category-inline-create-persists": {
|
|
131
|
-
roles: ["seller", "guest"],
|
|
132
|
-
startPage: "/store/products/new",
|
|
133
|
-
steps: [
|
|
134
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
135
|
-
"Open /store/products/new, search the category picker for QA Category inline-create, and confirm it is offered.",
|
|
136
|
-
"Type 'QA Product inline-category' as the title, select that category, type 400 as the price, and publish.",
|
|
137
|
-
"Open the product's public page and read its category links below the title.",
|
|
138
|
-
"Count how many category links are shown.",
|
|
139
|
-
"Click the one naming QA Category inline-create and confirm the product is listed on the page it opens.",
|
|
140
|
-
"Delete the product and the category afterwards.",
|
|
141
|
-
],
|
|
142
|
-
inputs: {
|
|
143
|
-
categoryName: "QA Category inline-create",
|
|
144
|
-
title: "QA Product inline-category",
|
|
145
|
-
price: 400,
|
|
146
|
-
},
|
|
147
|
-
expectedBehaviour: "The category persists across a reload and the product is genuinely filed under it — reachable from the category's own page, not merely named on the product.",
|
|
148
|
-
expectedUiState: "The category is offered after a reload and the product's public page links it. EXACTLY ONE link is correct here and is not a defect: the inline-create form sends only name, slug, description and active — it has no parent field — so the category it makes is a root with no ancestors to list. A product under a DEEP category is a different assertion and has its own case.",
|
|
149
|
-
expectedData: { categoryLinksShown: 1 },
|
|
150
|
-
endResult: "The product and the category are deleted by the final step. Do not report the single link as a missing ancestor chain — that was this case's own stale claim and it is wrong.",
|
|
151
|
-
},
|
|
152
|
-
"checklist-selling-seller-catalog-org-deep-category-chain-derived": {
|
|
153
|
-
roles: ["seller", "guest"],
|
|
154
|
-
startPage: "/store/products/new",
|
|
155
|
-
steps: [
|
|
156
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
157
|
-
"Open /store/products/new and search the category picker for 'Heavy Metal System' — a seeded tier-3 category whose ancestors are Original Tops, Beyblade Original and Spinning Tops.",
|
|
158
|
-
"Select it, type 'QA Product deep-chain' as the title and 500 as the price, and publish.",
|
|
159
|
-
"Open the product's public page and count the category links below the title.",
|
|
160
|
-
"Read the names in order and compare them against the four expected.",
|
|
161
|
-
"Open /categories/category-spinning-tops — the ROOT, three levels above the category chosen — and look for this product.",
|
|
162
|
-
"Delete the product afterwards.",
|
|
163
|
-
],
|
|
164
|
-
inputs: {
|
|
165
|
-
categoryName: "Heavy Metal System",
|
|
166
|
-
categoryId: "category-original-hms",
|
|
167
|
-
title: "QA Product deep-chain",
|
|
168
|
-
price: 500,
|
|
169
|
-
},
|
|
170
|
-
expectedBehaviour: "A product filed against a deep category is written with its FULL ancestor chain, so every ancestor page matches on its own id alone. The repository derives this on create and update; a form payload cannot supply it, because the create schema strips any categorySlugs it is sent. This is the assertion that fails if that derivation regresses — and the failure is silent, because the product's own page looks completely normal with one link.",
|
|
171
|
-
expectedUiState: "FOUR category links: Heavy Metal System, Original Tops, Beyblade Original, Spinning Tops. The product appears on the root Spinning Tops page. One link, or a root page that does not list it, is the failure — and note that every SEEDED product shows four, so a new listing showing one is a write-path defect rather than a display one.",
|
|
172
|
-
expectedData: { categoryLinksShown: 4, foundOnRootCategoryPage: true },
|
|
173
|
-
endResult: "The product is deleted by the final step. Check the root page before deleting — that is the half a tester is most likely to skip, and it is the half that proves the chain is queryable rather than merely printed.",
|
|
174
|
-
},
|
|
175
|
-
"checklist-selling-seller-catalog-org-seller-category-inline-create-duplicate-rejected": {
|
|
176
|
-
roles: ["seller"],
|
|
177
|
-
startPage: "/store/products/new",
|
|
178
|
-
steps: [
|
|
179
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
180
|
-
"Open /store/products/new and open the category picker.",
|
|
181
|
-
"Use the create control and type the name of a category that already exists — Beyblade Burst.",
|
|
182
|
-
"Save and read the message shown on the form.",
|
|
183
|
-
"Open the picker and search that name, counting the matching options.",
|
|
184
|
-
"Try again with a case variant: beyblade BURST. The form derives the slug by lowercasing and hyphenating, so this collides on the SAME slug and must be refused for the same reason.",
|
|
185
|
-
],
|
|
186
|
-
inputs: { existingCategory: "Beyblade Burst", caseVariant: "beyblade BURST" },
|
|
187
|
-
expectedBehaviour: "A duplicate category is refused on its SLUG, which is what makes the case variant collide too. Categories are matched by id on the read side rather than by name, so a duplicate is less immediately destructive than a duplicate brand — but it splits a seller's own catalogue across two near-identical entries with no way to merge them.",
|
|
188
|
-
expectedUiState: "Both attempts are refused with a readable message — the server answers 409 'A category with this slug already exists' — and exactly one option matches the name in the picker. A refusal that surfaces only as a silent no-op, or as a raw 409 with no message on the form, is a failure even though nothing was created.",
|
|
189
|
-
expectedData: { matchingOptionCount: 1 },
|
|
190
|
-
endResult: "Leave the editor without saving.",
|
|
191
|
-
},
|
|
192
|
-
};
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/seller-custom-brands page.
|
|
3
|
-
* WHAT: 5 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
|
-
* 🛑 A BRAND PAGE MATCHES ITS PRODUCTS BY DISPLAY NAME, not by slug. So a brand
|
|
10
|
-
* created here and the brand string written onto the product must agree exactly,
|
|
11
|
-
* and the public brand page is the only place that disagreement becomes visible —
|
|
12
|
-
* the seller's own dashboard shows the product filed correctly either way.
|
|
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-selling-seller-custom-brands-seller-brand-inline-create": {
|
|
23
|
-
roles: ["seller"],
|
|
24
|
-
startPage: "/store/products/new",
|
|
25
|
-
steps: [
|
|
26
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
27
|
-
"Open /store/products/new and find the brand picker.",
|
|
28
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create, and its six fields are Product Name, Category, Price (₹), Stock Quantity, Description and Product Image — there is NO brand field on it at all. The brand picker exists only on the advanced form.",
|
|
29
|
-
"Type QA Brand inline-create into its search box.",
|
|
30
|
-
"Read what the picker offers when nothing matches.",
|
|
31
|
-
"Use the create control the picker offers and fill the form it opens.",
|
|
32
|
-
"Save the new brand and read the picker's selection afterwards.",
|
|
33
|
-
],
|
|
34
|
-
inputs: { brandName: "QA Brand inline-create" },
|
|
35
|
-
expectedBehaviour: "A picker with more than five options is searchable, and where a seller might legitimately need a value that does not exist it offers inline creation. The newly created option is auto-selected — making the seller find it again in the list is the half-finished version of this feature.",
|
|
36
|
-
expectedUiState: "Searching a name that does not exist shows a create control rather than only an empty state. After saving, the picker shows 'QA Brand inline-create' as the current selection without the seller re-opening it.",
|
|
37
|
-
endResult: "A brand exists. Leave the product editor without saving — the brand is what the next cases read.",
|
|
38
|
-
},
|
|
39
|
-
"checklist-selling-seller-custom-brands-seller-brand-inline-create-persists": {
|
|
40
|
-
roles: ["seller"],
|
|
41
|
-
startPage: "/store/products/new",
|
|
42
|
-
steps: [
|
|
43
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
44
|
-
"Open /store/products/new and open the brand picker.",
|
|
45
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create, and its six fields are Product Name, Category, Price (₹), Stock Quantity, Description and Product Image — there is NO brand field on it at all. The brand picker exists only on the advanced form.",
|
|
46
|
-
"Search for QA Brand inline-create.",
|
|
47
|
-
"Read whether it is offered as an existing option.",
|
|
48
|
-
"Reload the page and search for it again.",
|
|
49
|
-
"Open /store/auctions/new — a different creation form — and search for it there. Note that route exists even though /store/auctions itself is a redirect-only shim to the products list.",
|
|
50
|
-
],
|
|
51
|
-
inputs: { brandName: "QA Brand inline-create" },
|
|
52
|
-
expectedBehaviour: "The brand was written to the shared categories collection as a brand-typed row, so it is available to every form that reads brands, not only the one that created it. A value that exists only in the creating form's local state disappears on reload.",
|
|
53
|
-
expectedUiState: "The brand is offered as an existing option in the product form, after a reload, and in the auction form. Being absent from any of the three is the failure.",
|
|
54
|
-
endResult: "Leave every editor without saving.",
|
|
55
|
-
},
|
|
56
|
-
"checklist-selling-seller-custom-brands-seller-brand-inline-create-duplicate-rejected": {
|
|
57
|
-
roles: ["seller"],
|
|
58
|
-
startPage: "/store/products/new",
|
|
59
|
-
steps: [
|
|
60
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
61
|
-
"Open /store/products/new and open the brand picker.",
|
|
62
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create, and its six fields are Product Name, Category, Price (₹), Stock Quantity, Description and Product Image — there is NO brand field on it at all. The brand picker exists only on the advanced form.",
|
|
63
|
-
"Use the create control and type QA Brand inline-create — the name that already exists.",
|
|
64
|
-
"Save and read the message.",
|
|
65
|
-
"Open the picker again and search that name.",
|
|
66
|
-
"Count how many options match it.",
|
|
67
|
-
"Try once more with the same name in different case: qa brand INLINE-CREATE.",
|
|
68
|
-
],
|
|
69
|
-
inputs: { brandName: "QA Brand inline-create", caseVariant: "qa brand INLINE-CREATE" },
|
|
70
|
-
expectedBehaviour: "A duplicate is refused rather than creating a second row. Because a brand page matches products by DISPLAY NAME, two rows with the same name are two brands the read side cannot tell apart — and a case-differing duplicate is the same problem wearing a disguise.",
|
|
71
|
-
expectedUiState: "The duplicate attempt is refused with a readable message. Exactly one option matches the name in the picker. The case-differing attempt is refused too — accepting it creates the ambiguity this rule exists to prevent.",
|
|
72
|
-
expectedData: { matchingOptionCount: 1 },
|
|
73
|
-
endResult: "Leave the editor without saving.",
|
|
74
|
-
},
|
|
75
|
-
"checklist-selling-seller-custom-brands-seller-brand-product-saves-with-new-brand": {
|
|
76
|
-
roles: ["seller"],
|
|
77
|
-
startPage: "/store/products/new",
|
|
78
|
-
steps: [
|
|
79
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
80
|
-
"Open /store/products/new and type 'QA Product custom-brand' as the title.",
|
|
81
|
-
"Click 'Show all fields (advanced)' first. 🛑 /store/products/new opens the QUICK form for a standard create, and its six fields are Product Name, Category, Price (₹), Stock Quantity, Description and Product Image — there is NO brand field on it at all. The brand picker exists only on the advanced form.",
|
|
82
|
-
"Select QA Brand inline-create in the brand picker.",
|
|
83
|
-
"Type 500 as the price, fill every other required field, and publish.",
|
|
84
|
-
"RELOAD the product's editor and read the brand.",
|
|
85
|
-
"Open the product's public page at /products/{its slug} and read the brand link below the title.",
|
|
86
|
-
"Click that link.",
|
|
87
|
-
],
|
|
88
|
-
inputs: { title: "QA Product custom-brand", brandName: "QA Brand inline-create", price: 500 },
|
|
89
|
-
expectedBehaviour: "The product stores both the brand's slug and its display name, and the two stay in lockstep. The public page's brand link resolves to the brand's own page — a link built from one field while the page matches on the other lands somewhere empty.",
|
|
90
|
-
expectedUiState: "After the reload the editor shows the brand. The public page shows a brand link reading 'QA Brand inline-create' and clicking it opens that brand's page rather than a 404.",
|
|
91
|
-
endResult: "The product exists and is the fixture the next case reads. Delete it after that case.",
|
|
92
|
-
},
|
|
93
|
-
"checklist-selling-seller-custom-brands-seller-brand-appears-on-public-brands-page": {
|
|
94
|
-
roles: ["guest"],
|
|
95
|
-
startPage: "/brands",
|
|
96
|
-
steps: [
|
|
97
|
-
"Open /brands in a private window with no session.",
|
|
98
|
-
"Look for QA Brand inline-create in the list.",
|
|
99
|
-
"Open its brand page.",
|
|
100
|
-
"Read the product grid and look for 'QA Product custom-brand'.",
|
|
101
|
-
"Open the sort control and choose 'Most Products'. ALL brands should be listed, seeded ones included — Takara-Tomy, Beyblade, Hasbro and Independent Keepers. The seed file writes no `metrics` on brand rows, but `onProductWrite` is a documentWritten trigger on products/{productId}: it fires on seed writes too and increments `metrics.productCount` on the brand as well as the category, creating the field. A brand MISSING from this sort means the trigger did not run for its products.",
|
|
102
|
-
],
|
|
103
|
-
inputs: { brandName: "QA Brand inline-create", productTitle: "QA Product custom-brand" },
|
|
104
|
-
expectedBehaviour: "A seller-created brand becomes a real public brand page listing its products. The match is on display name, so this page is where a name-versus-slug mismatch finally shows — the brand page renders and its grid is empty, which reads as a brand with no stock rather than as a broken link.",
|
|
105
|
-
expectedUiState: "The brand is listed on /brands and its page shows 'QA Product custom-brand' in the grid. An empty grid on a brand that demonstrably has a product is the failure this whole page builds toward. Under 'Most Products' every brand with products is listed, seeded ones included. An orderBy does silently exclude a document lacking the ordering field, so a brand absent HERE is real evidence that onProductWrite never ran for its products — which is why this sort is worth opening at all.",
|
|
106
|
-
expectedData: { productsOnBrandPage: 1 },
|
|
107
|
-
endResult: "NOTHING is cleaned up here and that is deliberate: this case is signed out, and the harness gives a guest batch no session at all, so a 'sign in and delete' step could never be performed. The QA product and brand are removed by the seller-side case that created them; if this case runs alone, say so and leave them.",
|
|
108
|
-
},
|
|
109
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* WHY: Authored six-part procedures for the selling/seller-guide page.
|
|
3
|
-
* WHAT: 1 case, 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
|
-
* @tag domain:tester
|
|
10
|
-
* @tag layer:seed
|
|
11
|
-
* @tag pattern:none
|
|
12
|
-
* @tag access:server-only
|
|
13
|
-
* @tag consumers:seed-data/authored/index.ts
|
|
14
|
-
* @tag sideEffects:none
|
|
15
|
-
*/
|
|
16
|
-
export const authored = {
|
|
17
|
-
"checklist-selling-seller-guide-seller-guide-pages": {
|
|
18
|
-
roles: ["seller"],
|
|
19
|
-
startPage: "/store/guide",
|
|
20
|
-
steps: [
|
|
21
|
-
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
22
|
-
"Open /store and find the 'Guides' group in the sidebar. It is the LAST group and it defaults CLOSED (defaultOpen: false), so expand it — seven entries: All Guides, Listings Guide, Orders Guide, Finance Guide, Settings, Capabilities, WhatsApp Catalog Sync.",
|
|
23
|
-
"Click 'All Guides' to reach /store/guide. It is a hub and it links the same six sub-guides, so each one has two routes in — check both agree.",
|
|
24
|
-
"Open each of the six in turn and read its content: /store/guide/listings, /store/guide/orders, /store/guide/finance, /store/guide/settings, /store/guide/capabilities, /store/guide/whatsapp.",
|
|
25
|
-
"Write down any that renders empty, 404s, or repeats another page's text.",
|
|
26
|
-
"Check each guide against the feature it describes — open that feature and confirm the guide's instructions match what is on screen.",
|
|
27
|
-
"Follow every link inside the guides and note where each lands.",
|
|
28
|
-
],
|
|
29
|
-
expectedBehaviour: "Every seller guide renders its own content and every link in it resolves. A guide describing a screen that has since changed is worse than no guide, because the seller trusts it and then cannot find what it names. The sidebar group defaulting closed is deliberate — guides are reference, not daily work — so a tester who does not expand it will wrongly conclude they are missing.",
|
|
30
|
-
expectedUiState: "All six guides show a heading and body specific to their topic, with no two identical, and both the sidebar group and the hub reach all of them. Every internal link lands on a real page. Instructions match the current screens — a guide naming a control that no longer exists is the finding, quoted exactly.",
|
|
31
|
-
expectedData: { brokenGuideLinks: 0 },
|
|
32
|
-
endResult: "Read-only; nothing persists. Report stale instructions with the guide's name and the sentence that is wrong, not just that the page loads.",
|
|
33
|
-
},
|
|
34
|
-
};
|