@mohasinac/appkit 4.34.1 → 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/features/tester/components/TesterChecklistStepRow.d.ts +9 -1
- package/dist/features/tester/components/TesterChecklistStepRow.js +31 -2
- package/dist/features/tester/components/TesterHubView.js +8 -0
- package/dist/features/tester/schemas/firestore.d.ts +109 -0
- package/dist/features/tester/schemas/firestore.js +14 -0
- package/dist/features/tester/seed-data/_money-flows.d.ts +23 -0
- package/dist/features/tester/seed-data/_money-flows.js +430 -0
- package/dist/features/tester/seed-data/authored/_types.d.ts +33 -0
- package/dist/features/tester/seed-data/authored/_types.js +35 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__profile-settings.js +207 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__signup-login.js +298 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program--admin.js +33 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/account-auth__testing-program.js +138 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__address-filters.js +36 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-lookup.js +75 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__postal-validation.js +72 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__state-picker.js +54 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/addresses__unban-request.js +39 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bans-and-trust.js +226 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__blog-faqs.js +82 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bulk-actions.js +177 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__bundles.js +97 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__buyer-data-admin.js +232 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__catalog-listings.js +306 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__category-brand-authoring.js +158 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__classifieds-digitalcodes-live.js +78 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-deletes.js +261 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__content-marketing.js +151 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__coupons.js +214 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__events-raffles-spin.js +160 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__media-watermark.js +104 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__orders-fulfillment.js +350 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__prize-draws-lotteries.js +105 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__site-system.js +590 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__uncovered-admin-pages.js +235 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/admin__users-trust.js +569 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__bidding.js +417 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +653 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +533 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +379 -0
- package/dist/features/tester/seed-data/authored/buying__cart.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__cart.js +1171 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +140 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +257 -0
- package/dist/features/tester/seed-data/authored/buying__offers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__offers.js +1111 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__order-status-lifecycle.js +252 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +387 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__return-request.js +152 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +242 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__reviews.js +113 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +283 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-navigation.js +167 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__user-uncovered-pages.js +90 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/buying__wishlist-history.js +344 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__public-profile.js +53 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/community-support__support-tickets.js +76 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__blog.js +93 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__category-brand-relations.js +149 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +121 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__event-participation.js +207 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +318 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__faq-help.js +65 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +147 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/content-discovery__search.js +332 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +53 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__dialog-footers.js +52 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__editor-action-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__navbar-ctas.js +141 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/cta-layout__product-bottom-bar.js +35 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +95 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__carousel-arrow-bounds.js +191 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__dashboard-layout.js +158 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__footer-theme.js +106 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__form-validation-errors.js +88 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +204 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__hand-mode-layout.js +301 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__homepage-carousels.js +407 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +214 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +275 -0
- package/dist/features/tester/seed-data/authored/index.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/index.js +237 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +102 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__detail-pages.js +50 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__drawer-pages.js +66 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +115 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +136 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__bug-hunters.js +69 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +263 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-how-it-works.js +102 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__help-scams-guides-subpages.js +234 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__legal-policy-pages.js +126 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +255 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__employee-permissions.js +59 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__header-search.js +88 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__settings-deep-links.js +51 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/search-and-nav__sidebar-search.js +35 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +94 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__final-sale-authoring.js +107 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +285 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +326 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__listing-type-fields-roundtrip.js +136 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__media-limits.js +128 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__sectionised-forms.js +167 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-analytics-payouts.js +117 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-bids-bundles-filters.js +88 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-catalog-org.js +151 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-custom-brands.js +105 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-guide.js +33 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +347 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-marketing-extras.js +166 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-ops-comms.js +89 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-orders.js +195 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__seller-shipping-payouts-setup.js +180 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-dashboard-navigation.js +164 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/selling__store-uncovered-pages.js +116 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__canonical-and-host.js +111 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__og-images.js +91 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +122 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.d.ts +2 -0
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +105 -0
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +744 -1
- 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/package.json +1 -1
- package/scripts/seed-cli.mjs +6 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the account-auth/testing-program checklist 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
|
+
* This page used to be split across two modules, `--admin` and nothing else, a
|
|
10
|
+
* convention the deleted authoring bot needed because it batched a page by the
|
|
11
|
+
* identity it ran as. Hand-written, one file per page is the whole rule, and the
|
|
12
|
+
* split only made the five buyer-side cases easy to lose track of — which is what
|
|
13
|
+
* happened: five of six sat unauthored while the page looked started.
|
|
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-account-auth-testing-program-admin-tester-access": {
|
|
24
|
+
roles: ["admin"],
|
|
25
|
+
startPage: "/user/tester",
|
|
26
|
+
steps: [
|
|
27
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
28
|
+
"Open /user/tester.",
|
|
29
|
+
"Read the group headings down the page.",
|
|
30
|
+
"Expand the 'Buying' group and then the 'Cart' page inside it.",
|
|
31
|
+
"Expand the 'Admin (Testing)' group.",
|
|
32
|
+
],
|
|
33
|
+
inputs: { email: "admin@letitrip.in" },
|
|
34
|
+
expectedBehaviour: "An admin reaches the Tester Hub on the strength of their role alone, without an isTester flag, and sees the same catalogue a tester does — including the adminOnly cases, which a plain tester without canTestAdmin does not get.",
|
|
35
|
+
expectedUiState: "/user/tester renders the grouped checklist rather than a 'Testers only' warning. The Buying group expands to its pages and the Admin (Testing) group is present and expandable.",
|
|
36
|
+
expectedData: { adminOnlyGroupVisible: true },
|
|
37
|
+
endResult: "Reloading /user/tester still shows the full checklist. Nothing is written by this case; it is a read-only access check.",
|
|
38
|
+
},
|
|
39
|
+
"checklist-account-auth-testing-program-admin-testing-section": {
|
|
40
|
+
roles: ["admin"],
|
|
41
|
+
startPage: "/admin/dashboard",
|
|
42
|
+
steps: [
|
|
43
|
+
"Sign in as admin@letitrip.in / TempPass123!.",
|
|
44
|
+
"Open /admin/dashboard.",
|
|
45
|
+
"Expand the 'Testing' section in the admin sidebar.",
|
|
46
|
+
"Click 'Test Cases' and note where it lands.",
|
|
47
|
+
"Go back to /admin/dashboard and expand 'Testing' again.",
|
|
48
|
+
"Click 'Results' and note where it lands.",
|
|
49
|
+
],
|
|
50
|
+
inputs: { email: "admin@letitrip.in" },
|
|
51
|
+
expectedBehaviour: "The Testing section carries both links and each one reaches a real page — 'Test Cases' to /admin/tester-checklist, the admin-managed catalogue, and 'Results' to /admin/tester-feedback, where answers are triaged. A nav entry pointing at a page that does not exist is the failure this catches.",
|
|
52
|
+
expectedUiState: "The sidebar shows a 'Testing' section holding exactly the links 'Test Cases' and 'Results'. Clicking each renders its page with content, not a 404 and not an empty shell.",
|
|
53
|
+
expectedData: {
|
|
54
|
+
testCasesHref: "/admin/tester-checklist",
|
|
55
|
+
resultsHref: "/admin/tester-feedback",
|
|
56
|
+
},
|
|
57
|
+
endResult: "After reload the Testing section still holds both links and both still resolve. Read-only; nothing persists.",
|
|
58
|
+
},
|
|
59
|
+
"checklist-account-auth-testing-program-tester-flag-live-refresh": {
|
|
60
|
+
roles: ["admin", "buyer"],
|
|
61
|
+
startPage: "/user/tester",
|
|
62
|
+
steps: [
|
|
63
|
+
"In browser window A, sign in as karthik.new@gmail.com / TempPass123! and open /user/tester.",
|
|
64
|
+
"Leave window A open on that page without reloading it for the rest of this case.",
|
|
65
|
+
"In a separate browser window B, sign in as admin@letitrip.in / TempPass123!.",
|
|
66
|
+
"In window B open /admin/users and search for karthik.new@gmail.com.",
|
|
67
|
+
"Open that user and set the 'Is tester' flag to on, then save.",
|
|
68
|
+
"Return to window A and navigate between /user and /user/tester using the sidebar, without reloading.",
|
|
69
|
+
"Keep navigating that way for up to 6 minutes.",
|
|
70
|
+
"In window B, set 'Is tester' back to off for karthik.new@gmail.com and save.",
|
|
71
|
+
],
|
|
72
|
+
inputs: { testerEmail: "karthik.new@gmail.com", isTester: true },
|
|
73
|
+
expectedBehaviour: "The client session re-reads role, isTester, canTestAdmin, disabled and storeId on the 5-minute activity ping, so a flag an admin flips reaches an already-open tab without a sign-out. Before this was fixed those fields refreshed only on login or a full page reload, so the grant was invisible for as long as the tab stayed open.",
|
|
74
|
+
expectedUiState: "Window A starts on /user/tester showing 'Testers only' — karthik.new@gmail.com has no tester flag. Within about 5 minutes, and with no reload and no re-login, the same page starts rendering the checklist instead. What must not happen is the warning persisting indefinitely until the tab is reloaded.",
|
|
75
|
+
expectedData: { isTester: true },
|
|
76
|
+
endResult: "Window A gains access without reloading. The flag is set back to off in the final step so karthik.new@gmail.com stays a plain buyer for other cases.",
|
|
77
|
+
},
|
|
78
|
+
"checklist-account-auth-testing-program-tester-hub-answer-saves": {
|
|
79
|
+
roles: ["buyer"],
|
|
80
|
+
startPage: "/user/tester",
|
|
81
|
+
steps: [
|
|
82
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
83
|
+
"Open /user/tester.",
|
|
84
|
+
"Expand the 'Buying' group and then the 'Cart' page.",
|
|
85
|
+
"Click 'Yes' on the first case in that page.",
|
|
86
|
+
"Type 'QA Comment testing-program-tester-hub-answer-saves' in that case's comment box.",
|
|
87
|
+
"Wait for the save indicator to settle without touching the browser reload button.",
|
|
88
|
+
"Reload the page.",
|
|
89
|
+
"Expand the 'Buying' group and then the 'Cart' page.",
|
|
90
|
+
],
|
|
91
|
+
inputs: {
|
|
92
|
+
answer: "yes",
|
|
93
|
+
comment: "QA Comment testing-program-tester-hub-answer-saves",
|
|
94
|
+
},
|
|
95
|
+
expectedBehaviour: "The answer and the comment are written against a document keyed on tester and case together, so re-answering updates that one row rather than accumulating duplicates. The page does not navigate or reload to save.",
|
|
96
|
+
expectedUiState: "The 'Yes' control becomes selected and a saved indicator appears, with no full-page flash. After reload the same case still shows 'Yes' selected and the comment text still in its box.",
|
|
97
|
+
expectedData: {
|
|
98
|
+
answer: "yes",
|
|
99
|
+
comment: "QA Comment testing-program-tester-hub-answer-saves",
|
|
100
|
+
},
|
|
101
|
+
endResult: "The answer and comment survive the reload. A save that appears to work and is gone after F5 is exactly the failure this case exists to catch.",
|
|
102
|
+
},
|
|
103
|
+
"checklist-account-auth-testing-program-tester-hub-loads": {
|
|
104
|
+
roles: ["buyer"],
|
|
105
|
+
startPage: "/user/tester",
|
|
106
|
+
steps: [
|
|
107
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
108
|
+
"Open /user/tester.",
|
|
109
|
+
"Read the group headings down the page.",
|
|
110
|
+
"Expand the 'Buying' group.",
|
|
111
|
+
"Expand the 'Cart' page inside it.",
|
|
112
|
+
"Expand a case's 'Steps' toggle.",
|
|
113
|
+
],
|
|
114
|
+
inputs: { email: "tester@letitrip.in" },
|
|
115
|
+
expectedBehaviour: "The whole catalogue loads, grouped and then sub-grouped by page, and each case can be opened to reveal its roles, start page, steps, input values, expectations and end result. A tester without canTestAdmin does not see the Admin (Testing) group at all.",
|
|
116
|
+
expectedUiState: "Group headings are visible — Account & Auth, Buying, Selling, Content & Discovery, Community & Support, Design & UX, Public & Marketing Pages, Page Wiring, CTA & Action Rows, Addresses, Search & navigation, Money Flows. Expanding Buying reveals its pages, and expanding a case shows its procedure rather than only the one-line label.",
|
|
117
|
+
expectedData: { adminOnlyGroupVisible: false },
|
|
118
|
+
endResult: "Reloading keeps the checklist rendered. Read-only; nothing is written. An empty hub, or one showing labels with no procedure behind them, both fail.",
|
|
119
|
+
},
|
|
120
|
+
"checklist-account-auth-testing-program-tester-hub-search": {
|
|
121
|
+
roles: ["buyer"],
|
|
122
|
+
startPage: "/user/tester",
|
|
123
|
+
steps: [
|
|
124
|
+
"Sign in as tester@letitrip.in / TempPass123!.",
|
|
125
|
+
"Open /user/tester.",
|
|
126
|
+
"Type coupon in the search box.",
|
|
127
|
+
"Read the results.",
|
|
128
|
+
"Clear the box and type /store/payouts instead.",
|
|
129
|
+
"Read the results.",
|
|
130
|
+
"Clear the box and type zzzznope instead.",
|
|
131
|
+
"Read the results.",
|
|
132
|
+
],
|
|
133
|
+
inputs: { titleQuery: "coupon", routeQuery: "/store/payouts", nonsenseQuery: "zzzznope" },
|
|
134
|
+
expectedBehaviour: "Search matches on the case title AND on the route it links to, so a tester who knows only the page they are on can find its cases. It filters — it does not merely highlight while still listing everything.",
|
|
135
|
+
expectedUiState: "'coupon' narrows the list to coupon-related cases. '/store/payouts' returns the payout cases, which is the whole point of route matching — those titles do not contain the word 'payouts' as typed with a slash. 'zzzznope' returns an empty state with a readable message, NOT the full unfiltered checklist.",
|
|
136
|
+
endResult: "The nonsense query is the control: if it returns everything, the box is not filtering and the two real queries proved nothing. Read-only; nothing persists.",
|
|
137
|
+
},
|
|
138
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the addresses/address-filters 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-addresses-address-filters-filters-actually-filter": {
|
|
18
|
+
roles: ["buyer"],
|
|
19
|
+
startPage: "/user/addresses",
|
|
20
|
+
steps: [
|
|
21
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
22
|
+
"Open /user/addresses and add a second address named 'QA Address filters-second', '7 Test Lane', Indore, Madhya Pradesh, 452010, if only one exists.",
|
|
23
|
+
"Make sure exactly one of the addresses is marked as the default.",
|
|
24
|
+
"Open the filter drawer and read every facet it offers.",
|
|
25
|
+
"Tick the Default facet and apply.",
|
|
26
|
+
"Read which addresses are listed.",
|
|
27
|
+
"Clear the filter, tick the Standing facet and apply.",
|
|
28
|
+
"Read which addresses are listed.",
|
|
29
|
+
],
|
|
30
|
+
inputs: { secondAddressName: "QA Address filters-second" },
|
|
31
|
+
expectedBehaviour: "Every facet offered reads a field the address document actually has. Three facets — Address Type, Verified and Active — named fields that have never existed on this document, so each compared against an empty string and could never match a row while still counting toward the filter badge.",
|
|
32
|
+
expectedUiState: "The drawer offers only Default and Standing. Ticking Default lists only the default address; ticking Standing changes the list too. Address Type, Verified and Active are not offered at all. A facet that changes nothing while incrementing the badge is the exact failure being checked.",
|
|
33
|
+
expectedData: { facetCount: 2 },
|
|
34
|
+
endResult: "Nothing persists; filter state lives in the URL. Delete the second address afterwards.",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the addresses/postal-lookup 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 three cases are hit / don't-clobber / miss. The miss is the one that
|
|
10
|
+
* matters most: coverage is thinner than India Post's, so an unrecognised code
|
|
11
|
+
* is the COMMON path and has to be a non-event rather than an error state.
|
|
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-addresses-postal-lookup-pin-fills-city-and-state": {
|
|
22
|
+
roles: ["buyer"],
|
|
23
|
+
startPage: "/user/addresses/new",
|
|
24
|
+
steps: [
|
|
25
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
26
|
+
"Open /user/addresses/new.",
|
|
27
|
+
"Select India as the country.",
|
|
28
|
+
"Leave the City and State fields empty.",
|
|
29
|
+
"Type 560001 in the PIN code field.",
|
|
30
|
+
"Wait one second without typing anything else.",
|
|
31
|
+
"Read the City and State fields, and read the rest of the form.",
|
|
32
|
+
],
|
|
33
|
+
inputs: { country: "India", pincode: "560001" },
|
|
34
|
+
expectedBehaviour: "A complete PIN code triggers one debounced lookup that fills only City and State. Nothing else on the form moves — a lookup that also rewrites the street or the label is doing more than it was asked and the user has no way to undo it.",
|
|
35
|
+
expectedUiState: "Within about half a second City and State are filled with the values for 560001. Every other field holds exactly what it held before, including any name or street already typed. No spinner is left running and no error appears.",
|
|
36
|
+
expectedData: { pincode: "560001" },
|
|
37
|
+
endResult: "Nothing is saved unless the form is submitted. Two dead modules once carried the shape of a lookup that had been removed, which is why this looked built long before it was.",
|
|
38
|
+
},
|
|
39
|
+
"checklist-addresses-postal-lookup-lookup-never-overwrites": {
|
|
40
|
+
roles: ["buyer"],
|
|
41
|
+
startPage: "/user/addresses/new",
|
|
42
|
+
steps: [
|
|
43
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
44
|
+
"Open /user/addresses/new.",
|
|
45
|
+
"Select India as the country.",
|
|
46
|
+
"Type Whitefield in the City field FIRST, before touching the PIN code.",
|
|
47
|
+
"Type 560001 in the PIN code field.",
|
|
48
|
+
"Wait one second.",
|
|
49
|
+
"Read the City field.",
|
|
50
|
+
],
|
|
51
|
+
inputs: { country: "India", city: "Whitefield", pincode: "560001" },
|
|
52
|
+
expectedBehaviour: "Autofill only ever lands in an EMPTY field. A lookup that corrects deliberate typing produces a bug the user cannot report — they simply watch their own text disappear and assume they mistyped.",
|
|
53
|
+
expectedUiState: "City still reads 'Whitefield' after the lookup completes. State, which was empty, has been filled. Nothing flashes the typed value away and back.",
|
|
54
|
+
expectedData: { city: "Whitefield" },
|
|
55
|
+
endResult: "Nothing persists until the form is submitted. 'Whitefield' is chosen because it is a real Bengaluru locality that the 560001 lookup will not return — a city name the lookup agrees with would prove nothing.",
|
|
56
|
+
},
|
|
57
|
+
"checklist-addresses-postal-lookup-lookup-miss-is-a-non-event": {
|
|
58
|
+
roles: ["buyer"],
|
|
59
|
+
startPage: "/user/addresses/new",
|
|
60
|
+
steps: [
|
|
61
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
62
|
+
"Open /user/addresses/new.",
|
|
63
|
+
"Select India as the country.",
|
|
64
|
+
"Type 999999 in the PIN code field.",
|
|
65
|
+
"Wait two seconds and read the whole form.",
|
|
66
|
+
"Type 'QA Address lookup-miss' as the name, '3 Test Lane' as the street, 'Indore' as the city and 'Madhya Pradesh' as the state.",
|
|
67
|
+
"Save the address.",
|
|
68
|
+
],
|
|
69
|
+
inputs: { country: "India", pincode: "999999", city: "Indore", state: "Madhya Pradesh" },
|
|
70
|
+
expectedBehaviour: "An unknown but well-formed code resolves to nothing and the form carries on. The code is still valid — six digits — so it must save; only the convenience lookup missed.",
|
|
71
|
+
expectedUiState: "No error banner, no red PIN code field, no disabled Save. City and State stay empty and editable, and the typed values are accepted. The address saves with PIN code 999999.",
|
|
72
|
+
expectedData: { pincode: "999999", saved: true },
|
|
73
|
+
endResult: "The address exists in /user/addresses after a reload. Delete it afterwards. Treating a miss as a validation failure would block every address in the many areas the lookup does not cover.",
|
|
74
|
+
},
|
|
75
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the addresses/postal-validation 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
|
+
* @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-addresses-postal-validation-letters-rejected-on-the-field": {
|
|
18
|
+
roles: ["buyer"],
|
|
19
|
+
startPage: "/user/addresses/new",
|
|
20
|
+
steps: [
|
|
21
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
22
|
+
"Open /user/addresses/new.",
|
|
23
|
+
"Select India as the country.",
|
|
24
|
+
"Type 'QA Address letters-rejected' as the name, '4 Test Lane' as the street, 'Indore' as the city and 'Madhya Pradesh' as the state.",
|
|
25
|
+
"Type abcdef in the PIN code field.",
|
|
26
|
+
"Click Save.",
|
|
27
|
+
"Read where the error appears.",
|
|
28
|
+
],
|
|
29
|
+
inputs: { country: "India", pincode: "abcdef" },
|
|
30
|
+
expectedBehaviour: "The format is checked in the browser against the country's own rule, so the request is never sent. A length-only rule passes 'abcdef' — six characters — which is exactly how one admin route treated it as a valid Indian PIN code.",
|
|
31
|
+
expectedUiState: "An error appears directly under the PIN code field naming the format, before any network request. There is no server 400 with nothing marked, and no error banner detached from the field that caused it.",
|
|
32
|
+
expectedData: { saved: false },
|
|
33
|
+
endResult: "No address is created. The form keeps the other typed values so the user only has to fix the one field.",
|
|
34
|
+
},
|
|
35
|
+
"checklist-addresses-postal-validation-country-decides-the-rule": {
|
|
36
|
+
roles: ["buyer"],
|
|
37
|
+
startPage: "/user/addresses/new",
|
|
38
|
+
steps: [
|
|
39
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
40
|
+
"Open /user/addresses/new.",
|
|
41
|
+
"Select Canada as the country.",
|
|
42
|
+
"Read the label on the postal code field.",
|
|
43
|
+
"Type K1A 0B1 in that field and fill the rest of the form with 'QA Address country-rule', '5 Test Lane', 'Ottawa' and 'Ontario'.",
|
|
44
|
+
"Click Save.",
|
|
45
|
+
"Open the address for editing, switch the country to India, and type K1A 0B1 in the PIN code field.",
|
|
46
|
+
"Type 560001 instead and read the field.",
|
|
47
|
+
],
|
|
48
|
+
inputs: { canadaPostcode: "K1A 0B1", indiaPincode: "560001" },
|
|
49
|
+
expectedBehaviour: "The postal rule and its label both follow the selected country. An India-only six-digit rule made every real Canadian postcode unsaveable from every surface in the app.",
|
|
50
|
+
expectedUiState: "With Canada selected the field is labelled 'Postal code' and K1A 0B1 saves. With India selected the field is labelled 'PIN code', K1A 0B1 is rejected, and 560001 is accepted. The rejection is on the field, not a banner.",
|
|
51
|
+
expectedData: { canadaAccepted: true, indiaRejectsCanadaFormat: true },
|
|
52
|
+
endResult: "Delete the address afterwards. The reversal is the whole case — a rule that accepts both formats for both countries is not country-aware, it is just permissive.",
|
|
53
|
+
},
|
|
54
|
+
"checklist-addresses-postal-validation-unknown-country-never-blocks": {
|
|
55
|
+
roles: ["buyer"],
|
|
56
|
+
startPage: "/user/addresses/new",
|
|
57
|
+
steps: [
|
|
58
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
59
|
+
"Open /user/addresses/new.",
|
|
60
|
+
"Select United Arab Emirates as the country.",
|
|
61
|
+
"Type 'QA Address unknown-country' as the name, '6 Test Lane' as the street and 'Dubai' as the city.",
|
|
62
|
+
"Type 00000 in the postal code field.",
|
|
63
|
+
"Click Save.",
|
|
64
|
+
"Open the address for editing, replace the postal code with ABC-1234, and save again.",
|
|
65
|
+
],
|
|
66
|
+
inputs: { country: "United Arab Emirates", firstCode: "00000", secondCode: "ABC-1234" },
|
|
67
|
+
expectedBehaviour: "For a country with no known format any plausible 3-to-12 character code is accepted. A postal rule exists to catch a typo, never to refuse a real address whose pattern we simply do not have.",
|
|
68
|
+
expectedUiState: "Both codes save without an error. The field is not marked red and Save is never disabled. What must not happen is India's six-digit rule being applied by default to a country it does not describe.",
|
|
69
|
+
expectedData: { bothCodesAccepted: true },
|
|
70
|
+
endResult: "The address holds ABC-1234 after a reload. Delete it afterwards.",
|
|
71
|
+
},
|
|
72
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the addresses/state-picker 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-addresses-state-picker-state-is-a-picker-for-india": {
|
|
18
|
+
roles: ["buyer"],
|
|
19
|
+
startPage: "/user/addresses/new",
|
|
20
|
+
steps: [
|
|
21
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
22
|
+
"Open /user/addresses/new.",
|
|
23
|
+
"Select India as the country.",
|
|
24
|
+
"Click the State field and try to type free text into it.",
|
|
25
|
+
"Type karn in the picker's search box and read the options offered.",
|
|
26
|
+
"Select Karnataka.",
|
|
27
|
+
"Change the country to United Arab Emirates.",
|
|
28
|
+
"Click the State field again and try to type free text.",
|
|
29
|
+
],
|
|
30
|
+
inputs: { country: "India", stateSearch: "karn", state: "Karnataka" },
|
|
31
|
+
expectedBehaviour: "Where a country's regions are enumerated, State is a searchable picker; where they are not, it is a plain text box. The picker is what stops one column holding 'Karnataka', 'karnataka' and 'KA' depending on which screen created the row — which is what happened while this form and the seller drawer wrote free text into the same field the admin editor filled from a 36-option list.",
|
|
32
|
+
expectedUiState: "With India selected, State cannot be typed into freely and searching 'karn' narrows a list of India's 36 states and union territories to Karnataka. With United Arab Emirates selected, State becomes an ordinary text input that accepts anything.",
|
|
33
|
+
expectedData: { indiaStateOptionCount: 36 },
|
|
34
|
+
endResult: "Nothing persists unless the form is submitted. A picker offering 28 or 29 options is missing the union territories.",
|
|
35
|
+
},
|
|
36
|
+
"checklist-addresses-state-picker-changing-country-clears-state": {
|
|
37
|
+
roles: ["buyer"],
|
|
38
|
+
startPage: "/user/addresses/new",
|
|
39
|
+
steps: [
|
|
40
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
41
|
+
"Open /user/addresses/new.",
|
|
42
|
+
"Select India as the country.",
|
|
43
|
+
"Select Karnataka in the State picker.",
|
|
44
|
+
"Change the country to Canada.",
|
|
45
|
+
"Read the State field.",
|
|
46
|
+
"Change the country back to India and read it again.",
|
|
47
|
+
],
|
|
48
|
+
inputs: { firstCountry: "India", state: "Karnataka", secondCountry: "Canada" },
|
|
49
|
+
expectedBehaviour: "Changing the country clears the state, because a state only means something inside the country it belongs to. An address carrying Karnataka under Canada is a row nothing can group, rate for shipping, or tax correctly.",
|
|
50
|
+
expectedUiState: "After switching to Canada the State field is empty and offers Canadian provinces. Switching back to India leaves it empty too — it does not restore 'Karnataka' from before, which would reintroduce the mismatch the clear exists to prevent.",
|
|
51
|
+
expectedData: { stateAfterCountryChange: "" },
|
|
52
|
+
endResult: "Nothing persists unless the form is submitted. A retained 'Karnataka' under Canada is the failure.",
|
|
53
|
+
},
|
|
54
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: Authored six-part procedures for the addresses/unban-request 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-addresses-unban-request-empty-note-says-why": {
|
|
18
|
+
roles: ["buyer"],
|
|
19
|
+
startPage: "/user/addresses",
|
|
20
|
+
steps: [
|
|
21
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
22
|
+
"Open /user/addresses and find an address showing a banned state.",
|
|
23
|
+
"Click 'Request Unban'.",
|
|
24
|
+
"Leave the note box completely empty and click Submit.",
|
|
25
|
+
"Read where any message appears.",
|
|
26
|
+
"Type 'Too short' in the note box and click Submit.",
|
|
27
|
+
"Type 'This address was banned in error; it is my registered home address.' and click Submit.",
|
|
28
|
+
],
|
|
29
|
+
inputs: {
|
|
30
|
+
shortNote: "Too short",
|
|
31
|
+
validNote: "This address was banned in error; it is my registered home address.",
|
|
32
|
+
minimumLength: 20,
|
|
33
|
+
},
|
|
34
|
+
expectedBehaviour: "Submitting with an empty or too-short note fails loudly on the field and names the 20-character minimum. The note is the ENTIRE case a reviewer reads, so a request without one is not a request — but a disabled button with a bare return in its handler tells the user nothing about why.",
|
|
35
|
+
expectedUiState: "The Submit button is enabled even when the box is empty. Pressing it puts an error on the note field naming the minimum length. 'Too short' produces the same error. The full sentence is accepted and a confirmation appears.",
|
|
36
|
+
expectedData: { minimumNoteLength: 20 },
|
|
37
|
+
endResult: "One unban request exists, carrying the full note. A silently disabled button that does nothing when pressed is the failure — the user cannot tell it from a broken page.",
|
|
38
|
+
},
|
|
39
|
+
};
|