Skip to content

Test cases: Vendor marketing & gallery

VersionDate (UTC)Summary
1.0.02026-05-13Initial sheet — vendor/banners, vendor/gallery, UI routes under marketing + products

  • HTTP: vendor/banners · vendor/gallery — multipart upload, list query, delete, batch delete (apps/backend/src/modules/vendor/*).
  • App: apps/vendor-webVENDOR_ROUTES.marketing.banners, VENDOR_ROUTES.products.gallery; modals BannerModal, CategoryModal, VendorGalleryImagePickerModal (Frontend applications).
  • Pair with: Vendor customers, staff & settings for nav-only smoke; this sheet owns TC-VMG- detail.

IDClassScenarioAutomation
TC-VMG-001HappyBanners list loads; create opens modal with valid defaultsE2E*
TC-VMG-002HappyEdit banner saves image/title fields; list refetchesE2E*
TC-VMG-003UnhappyValidation error from API maps to toast / field (module guard 403 if missing)E2E*
TC-VMG-004UnhappyDelete banner confirms then handles API errorE2E*
TC-VMG-005HappyBanner modal gallery picker opens; selecting image closes modal with selectionE2E*
TC-VMG-006HappyBanner modal adds multiple slide images (reorder/remove); save persists data.slider_images (max 12) and image = first slideE2E*
TC-VMG-007HappyActive retail banners feed POS customer display idle slideshow (sale-pageuseVendorCustomerDisplayBannerSlides)E2E*

Banner slider contract: URLs live in banners.data under key slider_images; legacy image remains the first slide for list thumbnails. Create/update requires at least one image (400 when empty). Shared helpers: packages/shared/src/lib/banner-slider-data.ts; backend normalize: apps/backend/src/common/banner-slider-persist.util.ts.

Section titled “Media gallery (/dashboard/products/gallery)”
IDClassScenarioAutomation
TC-VMG-010HappyGET /vendor/gallery — list paginates; search + MIME filter query params match UIUnit✓ (apps/backend/src/modules/vendor/vendor-gallery.controller.spec.ts) + E2E*
TC-VMG-011HappyUpload file → POST /vendor/gallery multipart → row appears; TanStack invalidates ["vendor","gallery"]E2E*
TC-VMG-012HappySingle delete + batch delete; response shows deleted / skipped countsE2E*
TC-VMG-013UnhappyUpload rejects oversize or invalid MIME → error toast (no silent failure)E2E*
TC-VMG-014UnhappyRead-only user sees readOnlyHint; upload / delete disabledE2E*
TC-VMG-015HappyGrid vs table view toggles without losing selection state (where implemented)E2E*
IDClassScenarioAutomation
TC-VMG-020HappyPicker loads search results; pick applies file_key / URL rules (apps/vendor-web/src/lib/product-image-for-save.ts)E2E*
TC-VMG-021UnhappyPicker load error shows getApiErrorMessage fallback stringE2E*

  • New vendor/gallery or vendor/banners DTO fields get a TC-VMG- row before release
  • @RequireVendorModule matrix for gallery (product + store) documented when keys change
  • Storage path contract /public/storage/vendor-gallery/ aligned with Backend architecture uploads

Parent index: System test cases (index)