118 lines
4.8 KiB
Markdown
118 lines
4.8 KiB
Markdown
# 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: <title> 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
|
||
```
|