@mohasinac/appkit 4.34.0 → 4.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +32 -2
- package/dist/_internal/server/features/seo/sitemap.js +2 -2
- package/dist/_internal/server/functions/scheduled.d.ts +1 -2
- package/dist/_internal/server/functions/scheduled.js +8 -9
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +15 -0
- package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +15 -6
- package/dist/_internal/server/jobs/handlers/index.d.ts +0 -1
- package/dist/_internal/server/jobs/handlers/index.js +0 -1
- package/dist/features/auth/schemas/firestore.d.ts +1 -0
- package/dist/features/tester/components/TesterChecklistStepRow.d.ts +9 -1
- package/dist/features/tester/components/TesterChecklistStepRow.js +31 -2
- package/dist/features/tester/components/TesterHubView.js +8 -0
- package/dist/features/tester/repository/tester-checklist-item.repository.d.ts +16 -1
- package/dist/features/tester/repository/tester-checklist-item.repository.js +32 -6
- package/dist/features/tester/schemas/firestore.d.ts +109 -0
- package/dist/features/tester/schemas/firestore.js +14 -0
- package/dist/features/tester/seed-data/_money-flows.d.ts +23 -0
- package/dist/features/tester/seed-data/_money-flows.js +430 -0
- package/dist/features/tester/seed-data/authored/_types.d.ts +33 -0
- package/dist/features/tester/seed-data/authored/_types.js +35 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +207 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +298 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +33 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +138 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +36 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +75 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +72 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +54 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +39 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +226 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +82 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +177 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.js +97 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +232 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +306 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +158 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +78 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +261 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +151 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.js +214 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +160 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +104 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +350 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +105 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.js +590 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +235 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +569 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.js +417 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +653 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +533 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +379 -0
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__cart.js +1171 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +140 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +257 -0
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__offers.js +1111 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +252 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +387 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.js +152 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +242 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.js +113 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +283 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +167 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +90 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +344 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +53 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +76 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +93 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +149 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +121 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +207 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +318 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +65 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +147 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +332 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +53 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +52 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +141 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +95 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +191 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +158 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +106 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +88 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +204 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +301 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +407 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +214 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +275 -0
- package/dist/features/tester/seed-data/authored/index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/index.js +237 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +102 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +50 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +66 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +115 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +136 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.js +69 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +263 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +102 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +234 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +126 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +255 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +59 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +88 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +51 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +35 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +94 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +107 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +285 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +326 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +136 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +128 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +167 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +117 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +88 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +151 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +105 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +33 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +347 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +166 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +89 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +195 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +180 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +164 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +116 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +111 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.js +91 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +122 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +105 -0
- package/dist/features/tester/seed-data/events-tester-seed-data.js +77 -5
- package/dist/features/tester/seed-data/offers-tester-seed-data.js +23 -9
- package/dist/features/tester/seed-data/products-tester-seed-data.js +65 -49
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +744 -1
- package/dist/features/tester/seed-data/tester-window.d.ts +25 -0
- package/dist/features/tester/seed-data/tester-window.js +66 -0
- package/dist/seed/carousel-slides-seed-data.js +1 -1
- package/dist/seed/products-standard-seed-data.js +2 -2
- package/dist/seed/reviews-seed-data.js +6 -1
- package/dist/seed/users-seed-data.js +107 -4
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +6 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the page-wiring/detail-pages 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
|
+
* @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-page-wiring-detail-pages-detail-page-matches-list-modal": {
|
|
18
|
+
roles: ["admin"],
|
|
19
|
+
startPage: "/admin/bids",
|
|
20
|
+
steps: [
|
|
21
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
22
|
+
"Open /admin/bids and open the first bid row so its modal appears.",
|
|
23
|
+
"Write down every field label the modal shows, in order.",
|
|
24
|
+
"Copy the bid's id and close the modal.",
|
|
25
|
+
"Open /admin/bids/{id}/view directly, substituting the copied id.",
|
|
26
|
+
"Write down every field label that page shows, in order.",
|
|
27
|
+
"Compare the two lists.",
|
|
28
|
+
],
|
|
29
|
+
expectedBehaviour: "The modal and the page are two renderings of ONE field builder, so their field sets are identical by construction. Any difference means a second copy of the builder has appeared, and two copies of a field list drift the first time one is edited.",
|
|
30
|
+
expectedUiState: "Both surfaces show the same labels, in the same order, with the same values. A field present in one and missing from the other is the failure — including a field the page adds that the modal does not have.",
|
|
31
|
+
endResult: "Read-only; nothing persists. Comparing labels rather than layout is deliberate: the two are allowed to look different, they are not allowed to say different things.",
|
|
32
|
+
},
|
|
33
|
+
"checklist-page-wiring-detail-pages-detail-page-hides-identity-per-portal": {
|
|
34
|
+
roles: ["admin", "buyer"],
|
|
35
|
+
startPage: "/admin/bids",
|
|
36
|
+
steps: [
|
|
37
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
38
|
+
"Open /admin/bids and find a bid placed by rehan.sheikh@gmail.com on an auction that other people have also bid on.",
|
|
39
|
+
"Copy that bid's id and open /admin/bids/{id}/view.",
|
|
40
|
+
"Write down every bidder name and identifier shown anywhere on the page.",
|
|
41
|
+
"Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
42
|
+
"Open /user/bids/{id}/view with the same id.",
|
|
43
|
+
"Write down every bidder name and identifier shown anywhere on that page, including in the page source.",
|
|
44
|
+
],
|
|
45
|
+
expectedBehaviour: "One viewer argument decides what each portal reveals, in one place. The admin view may name other bidders because moderating a dispute requires it; the buyer's own view must not, because a competitor's identity is not the buyer's to see.",
|
|
46
|
+
expectedUiState: "The admin page may show other bidders' identities. The buyer page shows only their own bid, with any other bidder masked or absent — and that holds in the page source too, not merely in what is rendered. A real name anywhere in the buyer view is a leak.",
|
|
47
|
+
expectedData: { otherBidderNamesInBuyerView: 0 },
|
|
48
|
+
endResult: "Read-only; nothing persists. A buyer view that shows nothing at all also fails — the buyer must still see their own bid.",
|
|
49
|
+
},
|
|
50
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the page-wiring/drawer-pages 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
|
+
* @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-page-wiring-drawer-pages-page-drawer-opens-already-open": {
|
|
18
|
+
roles: ["admin"],
|
|
19
|
+
startPage: "/admin/team/new",
|
|
20
|
+
steps: [
|
|
21
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
22
|
+
"Open /admin/team/new directly in the address bar.",
|
|
23
|
+
"Read what is on screen without clicking anything.",
|
|
24
|
+
"Close the panel and read the address bar.",
|
|
25
|
+
"Open /admin/navigation/new directly and read what is on screen.",
|
|
26
|
+
"Close it and read the address bar.",
|
|
27
|
+
"Open /admin/tester-checklist/new directly and read what is on screen.",
|
|
28
|
+
"Close it and read the address bar.",
|
|
29
|
+
],
|
|
30
|
+
expectedBehaviour: "An editor that exists as both a drawer and a page opens with its panel ALREADY open when reached by URL. Closing it returns to the list the editor belongs to, so the page is a real destination rather than a dead end.",
|
|
31
|
+
expectedUiState: "Each of the three URLs renders its form immediately — an invite form, a nav-item form, a checklist-case form — with no blank page and nothing to click first. Closing lands on /admin/team, /admin/navigation and /admin/tester-checklist respectively, not on a 404 and not on the dashboard.",
|
|
32
|
+
endResult: "Nothing is created — close each panel rather than saving. A blank page behind a closed drawer is the failure this catches.",
|
|
33
|
+
},
|
|
34
|
+
"checklist-page-wiring-drawer-pages-page-drawer-deep-link-survives-reload": {
|
|
35
|
+
roles: ["admin"],
|
|
36
|
+
startPage: "/admin/team",
|
|
37
|
+
steps: [
|
|
38
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
39
|
+
"Open /admin/team and open the editor for employee-blog@letitrip.in.",
|
|
40
|
+
"Copy the URL from the address bar.",
|
|
41
|
+
"Reload the page.",
|
|
42
|
+
"Read whether the panel is open and which record it holds.",
|
|
43
|
+
"Open the copied URL in a new tab and read the same two things.",
|
|
44
|
+
],
|
|
45
|
+
inputs: { record: "employee-blog@letitrip.in" },
|
|
46
|
+
expectedBehaviour: "The record's identity is in the URL, so a reload and a fresh tab both restore the same open editor. This is the entire reason these pages exist alongside the drawers — a drawer alone cannot be bookmarked, shared with a colleague, or reopened after a crash.",
|
|
47
|
+
expectedUiState: "After the reload the panel is still open on employee-blog@letitrip.in with its fields populated. The new tab shows the same. A panel that closes on reload, or reopens empty, both fail.",
|
|
48
|
+
endResult: "Read-only; close without saving. Nothing persists.",
|
|
49
|
+
},
|
|
50
|
+
"checklist-page-wiring-drawer-pages-every-new-editor-route-opens": {
|
|
51
|
+
roles: ["admin", "seller"],
|
|
52
|
+
startPage: "/admin/categories/new",
|
|
53
|
+
steps: [
|
|
54
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
55
|
+
"Open each of these by URL in turn: /admin/categories/new, /admin/brands/new, /admin/bundles/new, /admin/faqs/new, /admin/ads/new, /admin/shipments/new, /admin/addresses/new, /admin/grouped-listings/new, /admin/sublisting-categories/new, /admin/carousel/new, /admin/carousels/new.",
|
|
56
|
+
"On each, note whether the form is already open or the page is blank.",
|
|
57
|
+
"Close or cancel each and note where the browser lands.",
|
|
58
|
+
"Sign in as tyson@beybladearena.in / TempPass123! and repeat for /store/addresses/new, /store/sublisting-categories/new, /store/stickers/new, /store/pre-orders/new and /store/listing-templates/new.",
|
|
59
|
+
"Record every route that arrives blank and every cancel that lands nowhere.",
|
|
60
|
+
],
|
|
61
|
+
expectedBehaviour: "Every editor-as-a-page route opens with its form showing and cancels back to its own list. Three of these were already covered by name; the other thirteen are the same route shape and were never named anywhere, so a blank one is a working URL with nothing on it and no error to report.",
|
|
62
|
+
expectedUiState: "All sixteen arrive with the form open and cancel back to the matching list. Each blank arrival is a finding, and so is each cancel that lands on a dead route â both named by route.",
|
|
63
|
+
expectedData: { blankEditorRoutes: 0 },
|
|
64
|
+
endResult: "Nothing is saved.",
|
|
65
|
+
},
|
|
66
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the page-wiring/reachability 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
|
+
* Every case here is the same shape: something was fully built and had no way in.
|
|
10
|
+
* A page with no nav entry and a nav entry with no page are the two halves of one
|
|
11
|
+
* defect, and both ship as "half done" without anything failing.
|
|
12
|
+
*
|
|
13
|
+
* @tag domain:tester
|
|
14
|
+
* @tag layer:seed
|
|
15
|
+
* @tag pattern:none
|
|
16
|
+
* @tag access:server-only
|
|
17
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
18
|
+
* @tag sideEffects:none
|
|
19
|
+
*/
|
|
20
|
+
export const authored = {
|
|
21
|
+
"checklist-page-wiring-reachability-lottery-can-be-created-without-seeding": {
|
|
22
|
+
roles: ["admin", "buyer"],
|
|
23
|
+
startPage: "/admin/events/new",
|
|
24
|
+
steps: [
|
|
25
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
26
|
+
"Open /admin/events/new and read every option in the event type picker.",
|
|
27
|
+
"Select Lottery as the type.",
|
|
28
|
+
"Type 'QA Event lottery-created-without-seeding' as the title, set a start date of today and an end date one week out, and save.",
|
|
29
|
+
"Open /admin/lotteries and open the new event's slot editor.",
|
|
30
|
+
"Add three slots numbered 1, 2 and 3, give each a name, and save.",
|
|
31
|
+
"Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
32
|
+
"Open the new lottery's public page and pull slot 1.",
|
|
33
|
+
],
|
|
34
|
+
inputs: { eventTitle: "QA Event lottery-created-without-seeding", slotCount: 3, pulledSlot: 1 },
|
|
35
|
+
expectedBehaviour: "A lottery can be built entirely through the UI. The event and its slots are edited in different places on purpose — the slot editor has no fields for title, dates, status or media, so a lottery created there alone would have no dates, and the draw window is measured from them.",
|
|
36
|
+
expectedUiState: "Lottery appears in the event type picker, which is where it was missing entirely. The event saves, its slot editor accepts three slots, and the public page renders them as a pullable grid. Slot 1 becomes booked after the pull.",
|
|
37
|
+
expectedData: { lotteryInTypePicker: true },
|
|
38
|
+
endResult: "A working lottery exists that no seed script created. Delete the event afterwards. Until this was fixed, lottery events could only come from the seeder.",
|
|
39
|
+
},
|
|
40
|
+
"checklist-page-wiring-reachability-carousel-can-be-renamed": {
|
|
41
|
+
roles: ["admin"],
|
|
42
|
+
startPage: "/admin/carousels",
|
|
43
|
+
steps: [
|
|
44
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
45
|
+
"Open /admin/carousels and read the list.",
|
|
46
|
+
"Open the first carousel and look for an 'Edit carousel' control.",
|
|
47
|
+
"Change its name to 'QA Carousel can-be-renamed' and change its status.",
|
|
48
|
+
"Save.",
|
|
49
|
+
"RELOAD /admin/carousels and read the name and status.",
|
|
50
|
+
"Set both back to their original values.",
|
|
51
|
+
],
|
|
52
|
+
inputs: { newName: "QA Carousel can-be-renamed" },
|
|
53
|
+
expectedBehaviour: "A named carousel can be edited after creation. The group editor was create-only, so a carousel's name was fixed for its entire life with no path to change it — and /admin/carousels rendered the flat slide editor rather than a list of named carousels at all.",
|
|
54
|
+
expectedUiState: "The list page shows named carousels, not a bare slide editor. 'Edit carousel' exists, opens with the current values, and after saving and reloading the new name and status are shown.",
|
|
55
|
+
expectedData: { editControlPresent: true },
|
|
56
|
+
endResult: "The name and status are restored by the final step. Other cases read this carousel by its seeded name.",
|
|
57
|
+
},
|
|
58
|
+
"checklist-page-wiring-reachability-grouped-listing-members-editable-from-its-own-page": {
|
|
59
|
+
roles: ["seller"],
|
|
60
|
+
startPage: "/store/grouped-listings/new",
|
|
61
|
+
steps: [
|
|
62
|
+
"Sign in as tyson@beybladearena.in / TempPass123!.",
|
|
63
|
+
"Open /store/grouped-listings/new.",
|
|
64
|
+
"Read the form and look for a product picker, a minimum-active-members field and a cover-image field.",
|
|
65
|
+
"Type 'QA Group members-editable' as the title.",
|
|
66
|
+
"Add product-beyblade-burst-valkyrie and product-beyblade-x-wizard-arrow as members.",
|
|
67
|
+
"Set minimum active members to 2 and attach public/test-media/sample-image.png as the cover image.",
|
|
68
|
+
"Save.",
|
|
69
|
+
"RELOAD the group's page and read its members, minimum and cover image.",
|
|
70
|
+
],
|
|
71
|
+
inputs: {
|
|
72
|
+
title: "QA Group members-editable",
|
|
73
|
+
member1: "product-beyblade-burst-valkyrie",
|
|
74
|
+
member2: "product-beyblade-x-wizard-arrow",
|
|
75
|
+
minActiveMembers: 2,
|
|
76
|
+
coverImage: "public/test-media/sample-image.png",
|
|
77
|
+
},
|
|
78
|
+
expectedBehaviour: "Members are chosen while the group is being created, in the same form. productIds was hardcoded to an empty array, so a group could only ever be created empty and populated from somewhere else — and neither the minimum-active-members nor the cover-image field had an input anywhere in the app.",
|
|
79
|
+
expectedUiState: "All three controls are present on the create form. After saving and reloading, the group holds both products, a minimum of 2, and the uploaded cover image. A group that saves with zero members is the failure.",
|
|
80
|
+
expectedData: { memberCount: 2, minActiveMembers: 2 },
|
|
81
|
+
endResult: "Delete the group afterwards so it does not accumulate across runs.",
|
|
82
|
+
},
|
|
83
|
+
"checklist-page-wiring-reachability-public-nav-and-footer-resolve": {
|
|
84
|
+
roles: ["guest"],
|
|
85
|
+
startPage: "/",
|
|
86
|
+
steps: [
|
|
87
|
+
"Open / in a private window with no session.",
|
|
88
|
+
"Click every link in the public header navigation in turn, reading each destination and going back.",
|
|
89
|
+
"Open the sidebar support links and click each one, reading each destination.",
|
|
90
|
+
"Scroll to the footer and click every link in every column, reading each destination.",
|
|
91
|
+
"Write down any link that lands on a not-found page, an empty shell, or back on the homepage.",
|
|
92
|
+
],
|
|
93
|
+
expectedBehaviour: "Every public-facing link resolves to a real page with content. The nav audit only ever checked the three portal sidebars, so not one of these 55 hrefs was covered by anything — a rename anywhere in the public surface rotted silently.",
|
|
94
|
+
expectedUiState: "All 55 destinations render real content. None shows a 404, none renders chrome with an empty body, and none silently redirects back to / — a redirect to the homepage looks like a working link and is not one.",
|
|
95
|
+
expectedData: { brokenLinkCount: 0 },
|
|
96
|
+
endResult: "Read-only; nothing persists. Record every broken href in the comment, not just the first — one report naming all of them is worth more than a verdict.",
|
|
97
|
+
},
|
|
98
|
+
"checklist-page-wiring-reachability-user-tester-hub-reachable-from-user-sidebar": {
|
|
99
|
+
roles: ["buyer"],
|
|
100
|
+
startPage: "/user",
|
|
101
|
+
steps: [
|
|
102
|
+
"Sign in as tester@letitrip.in / TempPass123!, which carries the tester flag.",
|
|
103
|
+
"Open /user and read the sidebar.",
|
|
104
|
+
"Find the Testing group and click Tester Hub.",
|
|
105
|
+
"Read where it lands.",
|
|
106
|
+
"Sign out and sign in as rehan.sheikh@gmail.com / TempPass123!, which does not carry the flag.",
|
|
107
|
+
"Open /user and read the sidebar for a Testing group.",
|
|
108
|
+
],
|
|
109
|
+
inputs: { testerAccount: "tester@letitrip.in", nonTesterAccount: "rehan.sheikh@gmail.com" },
|
|
110
|
+
expectedBehaviour: "The Testing group is injected at runtime for accounts carrying the tester flag and is empty for everyone else. An empty group must not render as a heading with nothing under it.",
|
|
111
|
+
expectedUiState: "The tester sees a Testing group containing Tester Hub, and clicking it opens /user/tester with the checklist. The non-tester sees no Testing group at all — not a heading with no children, and not a link that leads to a 'Testers only' warning.",
|
|
112
|
+
expectedData: { testingGroupVisibleForNonTester: false },
|
|
113
|
+
endResult: "Read-only; nothing persists. Checking both accounts is the case — a group that renders for everybody would pass the first half alone.",
|
|
114
|
+
},
|
|
115
|
+
};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the public-pages/auth-error-pages 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
|
+
* @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-public-pages-auth-error-pages-register-page": {
|
|
18
|
+
roles: ["guest"],
|
|
19
|
+
startPage: "/auth/register",
|
|
20
|
+
steps: [
|
|
21
|
+
"Open /auth/register in a private window with no session.",
|
|
22
|
+
"Click 'Create account' with every field empty and read where the errors appear.",
|
|
23
|
+
"Type 'QA Register register-page' as the full name and 'not-an-email' as the email, then click 'Create account'.",
|
|
24
|
+
"Type qa-register-1@mailnull.com as the email — if that address already has an account from a previous run, increment the number.",
|
|
25
|
+
"Type TestPass123! in the password field and Different123! in the confirm field, then click 'Create account'.",
|
|
26
|
+
"Correct the confirm field to TestPass123!, tick the terms checkbox, and click 'Create account'.",
|
|
27
|
+
],
|
|
28
|
+
inputs: {
|
|
29
|
+
fullName: "QA Register register-page",
|
|
30
|
+
email: "qa-register-1@mailnull.com",
|
|
31
|
+
password: "TestPass123!",
|
|
32
|
+
mismatchedConfirm: "Different123!",
|
|
33
|
+
},
|
|
34
|
+
expectedBehaviour: "Each rule reports on the field that broke it — required, email format, password match, terms accepted — before any request is sent, and the account is created only once all four pass.",
|
|
35
|
+
expectedUiState: "The empty submit marks the individual fields rather than showing one banner. 'not-an-email' is rejected on the email field. The mismatched confirm is rejected on the confirm field, not the password field. The final submit signs the browser in and leaves /auth/register.",
|
|
36
|
+
endResult: "The account exists and persists. This case creates a real row that teardown does not remove, which is why the address is numbered rather than fixed.",
|
|
37
|
+
},
|
|
38
|
+
"checklist-public-pages-auth-error-pages-forgot-reset-password-pages": {
|
|
39
|
+
roles: ["guest"],
|
|
40
|
+
startPage: "/auth/forgot-password",
|
|
41
|
+
steps: [
|
|
42
|
+
"Open /auth/forgot-password in a private window with no session.",
|
|
43
|
+
"Click 'Send reset link' with the field empty and read where the error appears.",
|
|
44
|
+
"Type not-an-email and click 'Send reset link'.",
|
|
45
|
+
"Type divya.funko@gmail.com and click 'Send reset link'.",
|
|
46
|
+
"Open that inbox, open the reset link, and read the page it lands on.",
|
|
47
|
+
"Submit the reset form with two different passwords typed into its two fields.",
|
|
48
|
+
"Set both fields to QaAuthPages654! and submit.",
|
|
49
|
+
"Request another link for the same address and use it to set the password back to TempPass123!.",
|
|
50
|
+
],
|
|
51
|
+
inputs: {
|
|
52
|
+
email: "divya.funko@gmail.com",
|
|
53
|
+
newPassword: "QaAuthPages654!",
|
|
54
|
+
restoredPassword: "TempPass123!",
|
|
55
|
+
},
|
|
56
|
+
expectedBehaviour: "Both pages validate on the field before submitting, and the reset page enforces that the two password entries match. The link's action code is what authorises the change — reaching the inbox is the proof of identity.",
|
|
57
|
+
expectedUiState: "Empty and malformed emails are marked on the field. A real address produces the generic 'if an account exists' message. The reset page rejects mismatched passwords on the confirm field and accepts matching ones with a confirmation.",
|
|
58
|
+
endResult: "The password is back at TempPass123! by the final step. This case shares divya.funko@gmail.com with the single-use-link case in signup-login and with nothing else, deliberately — the seeder never resets an existing password, so a changed one outlives every future re-seed.",
|
|
59
|
+
},
|
|
60
|
+
"checklist-public-pages-auth-error-pages-verify-email-page": {
|
|
61
|
+
roles: ["guest"],
|
|
62
|
+
startPage: "/auth/register",
|
|
63
|
+
steps: [
|
|
64
|
+
"Open /auth/register in a private window and create an account with an inbox you can open, using TestPass123! as the password.",
|
|
65
|
+
"Open the inbox and find the verification email.",
|
|
66
|
+
"Open the verification link and read the page it lands on.",
|
|
67
|
+
"Open /user and look for an unverified-email warning.",
|
|
68
|
+
"Open the same verification link a second time and read the page.",
|
|
69
|
+
],
|
|
70
|
+
inputs: { password: "TestPass123!" },
|
|
71
|
+
expectedBehaviour: "The verify-email page consumes the action code, reports the outcome, and offers a way onward. A second visit finds the code spent and says so rather than reporting a second success.",
|
|
72
|
+
expectedUiState: "The first visit shows a clear confirmation and a link into the site. /user then carries no unverified-email warning. The second visit shows a readable already-used or expired message — not a blank page, not a raw Firebase error code, and not another success.",
|
|
73
|
+
expectedData: { emailVerified: true },
|
|
74
|
+
endResult: "The account is verified and stays verified across a sign-out and sign-in.",
|
|
75
|
+
},
|
|
76
|
+
"checklist-public-pages-auth-error-pages-oauth-loading-redirect": {
|
|
77
|
+
roles: ["guest"],
|
|
78
|
+
startPage: "/auth/login",
|
|
79
|
+
steps: [
|
|
80
|
+
"Open /auth/login in a private window with no session.",
|
|
81
|
+
"Click 'Sign in with Google'.",
|
|
82
|
+
"Complete the Google popup and watch what the site shows while it finishes.",
|
|
83
|
+
"Wait up to 30 seconds without clicking anything.",
|
|
84
|
+
"Read where the browser ends up.",
|
|
85
|
+
],
|
|
86
|
+
expectedBehaviour: "The interstitial waits for the sign-in signal and then moves on by itself. It must not be a terminal state: a page that shows a spinner and never navigates is the same to a user as a crash, and it is the state a dropped realtime signal produces.",
|
|
87
|
+
expectedUiState: "A loading state appears briefly and then the browser navigates to / or /user with the header showing a signed-in avatar. It does not sit on the loading page indefinitely and it does not land back on /auth/login as though nothing happened.",
|
|
88
|
+
endResult: "The session is established and survives a reload. Needs a Google account — answer null with that reason if none is available.",
|
|
89
|
+
},
|
|
90
|
+
"checklist-public-pages-auth-error-pages-checkout-success-page": {
|
|
91
|
+
roles: ["buyer"],
|
|
92
|
+
startPage: "/checkout",
|
|
93
|
+
steps: [
|
|
94
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
95
|
+
"Open /products/product-tester-standard-1 and click 'Add to Cart'.",
|
|
96
|
+
"Open /checkout, select the first saved address, continue through the add-ons step, choose Cash on Delivery and place the order.",
|
|
97
|
+
"Read the success page for an order number, the item, the address and the total.",
|
|
98
|
+
"Copy the URL and reload it.",
|
|
99
|
+
"Open the same URL in a private window with no session.",
|
|
100
|
+
],
|
|
101
|
+
inputs: { productId: "product-tester-standard-1", price: 199, paymentMethod: "Cash on Delivery" },
|
|
102
|
+
expectedBehaviour: "The success page reads the real order rather than whatever the checkout had in memory, so it survives a reload. It is also order-scoped data, so a signed-out visitor with the URL must not be shown someone's delivery address.",
|
|
103
|
+
expectedUiState: "The page names an order number, 'Test Gadget — Standard Listing #1' at ₹199.00, the delivery address and a total. After the reload it shows the same. In the private window it does not render the order details — it asks for sign-in or reports not-found.",
|
|
104
|
+
expectedData: { orderTotal: 199 },
|
|
105
|
+
endResult: "The order exists in /user/orders. A success page that goes blank on reload was rendering from checkout state and not from the order.",
|
|
106
|
+
},
|
|
107
|
+
"checklist-public-pages-auth-error-pages-unauthorized-404-pages": {
|
|
108
|
+
roles: ["guest", "buyer"],
|
|
109
|
+
startPage: "/",
|
|
110
|
+
steps: [
|
|
111
|
+
"Open /this-page-does-not-exist-qa in a private window and read the page.",
|
|
112
|
+
"Click whatever the page offers as a way back and read where it lands.",
|
|
113
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
114
|
+
"Open /admin/site and read the page.",
|
|
115
|
+
"Open /unauthorized directly and read the page.",
|
|
116
|
+
],
|
|
117
|
+
expectedBehaviour: "Both error pages render as real pages inside the site chrome and offer a way out. A buyer reaching an admin route gets the unauthorized page rather than a crash or a raw framework error, and neither page leaks anything about what it was protecting.",
|
|
118
|
+
expectedUiState: "The 404 shows a readable message and at least one working link back into the site. The unauthorized page does the same. Neither shows a stack trace, a file path, or an error digest presented as the whole page, and neither renders as an unstyled white page outside the site's own layout.",
|
|
119
|
+
endResult: "Read-only; nothing persists. A blank white page for either is the failure — it reads as the site being down rather than as one route being unavailable.",
|
|
120
|
+
},
|
|
121
|
+
"checklist-public-pages-auth-error-pages-auth-close-terminates-popup": {
|
|
122
|
+
roles: ["guest"],
|
|
123
|
+
startPage: "/auth/login",
|
|
124
|
+
steps: [
|
|
125
|
+
"Open /auth/login in a private window with no session.",
|
|
126
|
+
"Start a Google sign-in so the popup opens.",
|
|
127
|
+
"Complete it and watch the popup window rather than the page behind it.",
|
|
128
|
+
"Check the popup closes itself rather than sitting on a page.",
|
|
129
|
+
"Read the original page and check it is now signed in.",
|
|
130
|
+
"If the popup stays open, read what it shows and whether the opener ever updates.",
|
|
131
|
+
],
|
|
132
|
+
expectedBehaviour: "The popup terminator closes its own window and hands the result back to the opener. A popup that renders and stays open leaves the opener waiting forever — the sign-in genuinely succeeded, and the site never learns it, which is indistinguishable to the visitor from a failed login.",
|
|
133
|
+
expectedUiState: "The popup closes on its own and the original page becomes signed in without a manual reload. A popup left open is the finding, with whatever it displays.",
|
|
134
|
+
endResult: "Signed out.",
|
|
135
|
+
},
|
|
136
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the public-pages/bug-hunters page.
|
|
3
|
+
* WHAT: 3 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 leaderboard exists to credit PEOPLE, which is why the bot account carries
|
|
10
|
+
* isBot and must not appear on it — a runner that works all 994 cases would top
|
|
11
|
+
* the board permanently and make it worthless as recognition.
|
|
12
|
+
*
|
|
13
|
+
* @tag domain:tester
|
|
14
|
+
* @tag layer:seed
|
|
15
|
+
* @tag pattern:none
|
|
16
|
+
* @tag access:server-only
|
|
17
|
+
* @tag consumers:seed-data/authored/index.ts
|
|
18
|
+
* @tag sideEffects:none
|
|
19
|
+
*/
|
|
20
|
+
export const authored = {
|
|
21
|
+
"checklist-public-pages-bug-hunters-leaderboard-loads": {
|
|
22
|
+
roles: ["guest"],
|
|
23
|
+
startPage: "/bug-hunters",
|
|
24
|
+
steps: [
|
|
25
|
+
"Open /bug-hunters in a private window with no session.",
|
|
26
|
+
"Read the rows from the top and note each name and confirmed-bug count.",
|
|
27
|
+
"Check that the counts descend from the first row to the last.",
|
|
28
|
+
"Look for 'Mock User 18' and read the count beside it.",
|
|
29
|
+
"Look for the Claude tester account by name anywhere in the list.",
|
|
30
|
+
],
|
|
31
|
+
inputs: { seededHunter: "Mock User 18", seededBugCount: 1 },
|
|
32
|
+
expectedBehaviour: "The board ranks testers by confirmed-bug count, highest first, and is fed by the demo fixture under Admin (Testing) → Bug Hunter Rewards. The bot account is excluded because it carries isBot — credit belongs to people, and a runner working the whole checklist would otherwise sit at the top forever.",
|
|
33
|
+
expectedUiState: "'Mock User 18' appears with 1 confirmed bug. Counts never increase as you read down the list. The Claude tester account does not appear at all.",
|
|
34
|
+
expectedData: { botAccountOnLeaderboard: 0 },
|
|
35
|
+
endResult: "Read-only; nothing persists. A bot row on the board is a fail even if the ordering is otherwise correct.",
|
|
36
|
+
},
|
|
37
|
+
"checklist-public-pages-bug-hunters-leaderboard-empty-state": {
|
|
38
|
+
roles: ["admin", "guest"],
|
|
39
|
+
startPage: "/bug-hunters",
|
|
40
|
+
steps: [
|
|
41
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
42
|
+
"Open /admin/tester-feedback and find the confirmed bug credited to 'Mock User 18'.",
|
|
43
|
+
"Un-confirm it, so no confirmed bugs remain.",
|
|
44
|
+
"Open /bug-hunters in a private window with no session.",
|
|
45
|
+
"Read the page.",
|
|
46
|
+
"Return to /admin/tester-feedback and confirm the bug again.",
|
|
47
|
+
"Reload /bug-hunters in the private window.",
|
|
48
|
+
],
|
|
49
|
+
expectedBehaviour: "With nothing to rank the page shows a named empty state rather than a blank container or an error. Zero rows is a normal condition for this page on a new install, not a failure.",
|
|
50
|
+
expectedUiState: "With no confirmed bugs the page reads 'No confirmed bugs yet' or equivalent, inside the normal site chrome. It is not a blank white page, not an error boundary, and not a heading with nothing under it. After re-confirming, 'Mock User 18' is back.",
|
|
51
|
+
expectedData: { emptyStateShown: true },
|
|
52
|
+
endResult: "The confirmation is restored by the final step, so the leaderboard-loads case above still has its fixture. Leaving it un-confirmed silently breaks that case.",
|
|
53
|
+
},
|
|
54
|
+
"checklist-public-pages-bug-hunters-leaderboard-footer-link": {
|
|
55
|
+
roles: ["guest"],
|
|
56
|
+
startPage: "/",
|
|
57
|
+
steps: [
|
|
58
|
+
"Open / in a private window with no session.",
|
|
59
|
+
"Scroll to the footer and find the Support column.",
|
|
60
|
+
"Read the links in that column.",
|
|
61
|
+
"Click 'Bug Hunters'.",
|
|
62
|
+
"Read the address bar and the page.",
|
|
63
|
+
],
|
|
64
|
+
expectedBehaviour: "The leaderboard is reachable from the footer. A page with no nav entry is exactly as unfinished as a nav entry with no page — this is the first half of that pair.",
|
|
65
|
+
expectedUiState: "A 'Bug Hunters' link is present in the footer's Support column and clicking it lands on /bug-hunters with the leaderboard rendered. Not a 404 and not a redirect to /.",
|
|
66
|
+
expectedData: { footerLinkHref: "/bug-hunters" },
|
|
67
|
+
endResult: "Read-only; nothing persists.",
|
|
68
|
+
},
|
|
69
|
+
};
|