Files
descrybe/docs/qa-local-demo.md
greeneclipse 8580c996c3 Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
2026-08-09 22:47:43 +02:00

4.8 KiB

QA — Local Demo Co

Outdated naming: demo@ now lands on Platform Demo, not Local Demo Co / A1. Canonical isolation: safe-test-fixtures.md. Treat checklist counts/company ids below as a historical snapshot.

Local smoke checklist for Descrybe v2 after migrate + seed-demo.

Login

Web http://localhost:5174/login
API http://localhost:8080
Email demo@descrybe.local
Password DemoPass123!

After login you should land on Platform Demo (not A1). For A1 catalog use a1-primary@descrybe.local. See safe-test-fixtures.md.

Re-seed:

cd apps/api
$env:DATABASE_URL = "postgres://descrybe:descrybe@localhost:5433/descrybe?sslmode=disable"
go run ./cmd/seed-demo -postgres $env:DATABASE_URL

What should appear

Area Expect
Dashboard Welcome / tutorial entry; company = Local Demo Co
Products Catalog for Local Demo Co (~4323 processed). If the Processed tab looks empty, switch to Unprocessed (or wait for auto-fallback). Raw inventory can show ~23744 (or ~5640 on a thinner tenant) depending on the query — confirm company id ee246275-…
Feeds 12 input feeds with mappings (11 mapping rows)
Categories / attributes Taxonomy present (~120 categories on Local Demo Co; 303 attributes)
Export feeds ~2 export feeds
Uploads (/files) List of CSV uploads after imports
Brand kit (/brand) Form + logo file upload (PNG/JPEG/WebP) and/or logo URL
Marketing Campaigns, Content Calendar (/marketing/calendar), SEO, Reviews (→ Woo reviews tab)
Search Products accept q or search; feed_id filters work

Nav status (local)

All primary sidebar routes should return 200 (no 404s):

/dashboard, /products, /files, /categories, /attributes, /standard-fields, /feeds, /export-feeds, /woocommerce, /campaigns, /marketing/calendar, /seo, /brand, /processing, /billing, /settings, /integrations/email, /admin (admin only).

Path Notes
/reviews 307/woocommerce?tab=reviews (intentional alias)
/processing 200 — Background Tasks UI; jobs load client-side from GET /api/processing/jobs (empty list is fine)

Uploads (verified)

Action How
Product CSV Dashboard Upload CSV, or /products upload UI; POST /api/products/upload (aliases: /import, /upload-eans)
Category CSV /categories upload UI; POST /api/categories/upload
Attribute CSV /attributes upload UI; POST /api/attributes/upload
Upload history /files
Brand logo /brand → Upload logo; POST /api/brand/logo

Tips from recent fixes

  1. Empty Products UI — default Processed tab can look empty while Unprocessed/raw has data. UI now auto-falls back to unprocessed when processed is empty; still use Unprocessed if you see zero rows.
  2. API restart — after marketing/route changes, rebuild and restart the Go API or smoke checks can show stale 404s.
  3. Counts — prefer SQL on company ee246275-dec0-4446-9e83-58d0c16c258a. Processed ≈ 4321; raw ≈ 23742. Do not confuse with the empty Local Demo Co (empty) shell from seed-local.ps1.

Verify commands

cd apps/api; go build ./...
cd ../web; npm run check
SELECT name, id FROM companies WHERE id = 'ee246275-dec0-4446-9e83-58d0c16c258a';
-- Local Demo Co

SELECT
  (SELECT COUNT(*) FROM processed_products WHERE company_id = 'ee246275-dec0-4446-9e83-58d0c16c258a') AS processed,
  (SELECT COUNT(*) FROM raw_products WHERE company_id = 'ee246275-dec0-4446-9e83-58d0c16c258a') AS raw,
  (SELECT COUNT(*) FROM input_feeds WHERE company_id = 'ee246275-dec0-4446-9e83-58d0c16c258a') AS feeds,
  (SELECT COUNT(*) FROM feed_mappings WHERE company_id = 'ee246275-dec0-4446-9e83-58d0c16c258a') AS mappings;

Known limits

  • Free-tier AI / real email blasts gated (demo company is on Growth via seed-demo).
  • Public /marketing root is not a page; use /campaigns, /marketing/calendar, /seo, /brand.
  • Stripe self-serve checkout not live; /plans is in-app billing UI.
  • Restart API after backend route changes before trusting smoke 404 results.