# BRAND MIGRATION — TESTS.md ## Visual Regression Tests ``` BRAND-VIS-001: Logo renders in Header at correct dimensions BRAND-VIS-002: Logo renders in Footer at correct dimensions BRAND-VIS-003: Logo renders in Admin sidebar BRAND-VIS-004: Favicon renders in browser tab BRAND-VIS-005: Primary color matches legacy (inspect CSS after BRAND-FE-001) BRAND-VIS-006: Accent color matches legacy (inspect CSS after BRAND-FE-001) BRAND-VIS-007: Footer contains company name from businessConfig BRAND-VIS-008: Footer contains full address from businessConfig BRAND-VIS-009: Footer contains phone from businessConfig BRAND-VIS-010: Footer contains email from businessConfig BRAND-VIS-011: Footer contains WhatsApp from businessConfig BRAND-VIS-012: Footer contains business hours from businessConfig BRAND-VIS-013: Header uses Inter font (system / Google Fonts) BRAND-VIS-014: Heading font (Playfair Display) renders for page titles BRAND-VIS-015: Responsive: logo and footer text readable on mobile ``` ## Route Tests ``` BRAND-ROUTE-001: GET /about → 200, About page with migrated content BRAND-ROUTE-002: GET /contact → 200, Contact page with businessConfig info BRAND-ROUTE-003: GET /shipping → 200, Shipping policy BRAND-ROUTE-004: GET /terms → 200, Terms page (may be flagged for review) BRAND-ROUTE-005: GET /privacy → 200, Privacy policy BRAND-ROUTE-006: GET /cookies → 200, Cookie policy BRAND-ROUTE-007: GET /legal → 200 or /404 (if not created) ``` ## Redirect Tests ``` BRAND-RED-001: GET /quienes-somos → 308 → /about BRAND-RED-002: GET /contacto → 308 → /contact BRAND-RED-003: GET /terminos-y-condiciones → 308 → /terms BRAND-RED-004: GET /politica-de-cookies → 308 → /cookies BRAND-RED-005: GET /politica-de-privacidad → 308 → /privacy BRAND-RED-006: GET /donde-estamos → 308 → /contact BRAND-RED-007: GET /admin → 404 (OpenCart internals blocked) BRAND-RED-008: GET /?route=product/product&id=42 → 404 (OpenCart query blocked) BRAND-RED-009: Legacy product slug from sitemap → appropriate redirect BRAND-RED-010: Legacy category slug → appropriate redirect ``` ## SEO Tests ``` BRAND-SEO-001: GET /sitemap.xml → valid XML with all public routes BRAND-SEO-002: GET /robots.txt → contains sitemap directive BRAND-SEO-003: GET /robots.txt → does not block /about, /contact, /shipping, /terms, /privacy, /cookies BRAND-SEO-004: GET /robots.txt → blocks /admin BRAND-SEO-005: on /about → includes "Mercado de Vida" or "MercadoDeVida" BRAND-SEO-006: <meta name="description"> on /about → present and meaningful ``` ## Content Tests ``` BRAND-CONTENT-001: /about page mentions founders (Ivana & Ricardo) BRAND-CONTENT-002: /about page mentions Estepona/Costa del Sol BRAND-CONTENT-003: /contact page has clickable phone link (tel:) BRAND-CONTENT-004: /contact page has clickable email link (mailto:) BRAND-CONTENT-005: /contact page has WhatsApp link BRAND-CONTENT-006: Footer copyright year is current year (dynamic) BRAND-CONTENT-007: All business info fields populated (no empty phone/email/address) BRAND-CONTENT-008: Legal pages have ⚠️LEGAL_REVIEW flag or equivalent visible in source ``` ## businessConfig Tests ``` BRAND-CFG-001: businessConfig.phone matches string used in Header, Footer, Contact BRAND-CFG-002: businessConfig.email matches string used in Header, Footer, Contact BRAND-CFG-003: businessConfig.address matches string used in Footer BRAND-CFG-004: No hardcoded address string in any component outside businessConfig BRAND-CFG-005: No hardcoded phone string in any component outside businessConfig BRAND-CFG-006: No hardcoded email string in any component outside businessConfig ``` ## Given/When/Then Acceptance Criteria ``` GIVEN a user visits /quienes-somos WHEN the redirect is implemented THEN they receive a 308 redirect to /about AND they land on the About page with migrated content GIVEN a user visits the footer WHEN the page renders THEN the address, phone, email, WhatsApp, and hours all come from businessConfig AND no string is hardcoded in the Footer component GIVEN a developer needs to update the company phone number WHEN they update businessConfig.phone THEN every page that displays the phone reflects the new value AND no manual find-replace is required GIVEN legal text has been migrated from the legacy site WHEN the Terms page is published THEN it is flagged as requiring human/legal review AND no AI-modified version is presented as newly legally approved GIVEN a search engine bot crawls the site WHEN it requests /sitemap.xml THEN it contains all public routes (/about, /contact, /shipping, /products, /categories, etc.) AND no internal admin routes are exposed GIVEN a legacy product URL is accessed WHEN the new platform handles it THEN it either redirects to the correct new product page OR returns 404 — it must NOT silently show a broken page ```