Files
chicken_babies_site/docs/MANUAL_TESTING.md
Phillip Tarrant f77da87eaa feat: phase 1 public site skeleton — layout, routes, CSS, logo pipeline
Ship base Jinja layout (header/nav/main/footer with skip link and aria-current),
mobile-first single-file CSS using the ROADMAP palette tokens, and four public
routes: /, /about, /contact, /shop. Blog index renders via a stable
PostService.list_published() stub returning [] — Phase 2 only swaps the body.
About is static placeholder copy, /contact ships an inert form plus a mailto:
link driven by ADMIN_CONTACT_EMAIL, /shop shows a "Coming soon" card.

Adds a Pillow-based scripts/generate_static_assets.py producing resized logo
PNG + WebP, multi-size favicon.ico, and a 180x180 apple-touch-icon on a cream
background. Outputs committed for a reproducible build.

Also ship docs/MANUAL_TESTING.md with per-route / responsive / a11y / static-
asset checklists, and mark Phase 1 complete in docs/ROADMAP.md.
2026-04-21 15:21:21 -05:00

3.8 KiB
Raw Blame History

Manual Testing Checklist

Living document. Each phase appends its own section — do not delete older sections when the code behind them changes; mark items as superseded instead so the audit trail stays intact.

Run the site locally before walking through the list:

source venv/bin/activate
uvicorn app.main:app --reload

Then open http://127.0.0.1:8000/ in a real browser (not just curl).


Phase 1 — Public Site Skeleton

Home (/)

  • Page returns 200 and renders without console errors.
  • Header shows the Chicken Babies R Us logo at ~48px tall.
  • <img> alt attribute reads Chicken Babies R Us.
  • Nav items appear in order: Home · About · Contact · Shop.
  • "Home" is visibly the active nav link and carries aria-current="page".
  • "Shop" nav link is visually muted (lower contrast) but still clickable.
  • Page intro ("Welcome to Chicken Babies R Us") is present.
  • With no posts in the DB, the empty-state reads "No posts yet — check back soon!".
  • Footer shows "Chicken Babies R Us · Morrison, Tennessee".
  • No street address is visible anywhere on the page (CLAUDE.md constraint).

About (/about)

  • Page returns 200 and renders without console errors.
  • H1 reads "About the farm".
  • Copy mentions Morrison, Tennessee by name.
  • Copy name-checks Head Hen.
  • No street address appears anywhere.
  • Nav marks "About" as active (aria-current="page").

Contact (/contact)

  • Page returns 200 and renders without console errors.
  • H1 reads "Get in touch".
  • When ADMIN_CONTACT_EMAIL is set, a mailto: link renders above the form.
  • When ADMIN_CONTACT_EMAIL is unset, the muted placeholder sentence appears and no mailto: link renders.
  • The note "Secure contact form coming soon" is visible.
  • Form fields (name, email, message) are visually disabled and cannot be typed into.
  • "Send message" button is visually disabled.
  • Form has no method="POST" attribute (view source).
  • Nav marks "Contact" as active.

Shop (/shop)

  • Page returns 200 and renders without console errors.
  • H1 reads "Shop".
  • "Coming soon" card is visible with mention of eggs, chicks, and waterfowl.
  • Nav marks "Shop" as active.

Responsive

Use the browser devtools responsive toolbar.

  • 360 × 800 (mobile): nav collapses behind a hamburger toggle; toggle opens/closes on click; logo remains legible; no horizontal scroll.
  • 768 × 1024 (tablet): nav appears inline; layout uses full container width; no horizontal scroll.
  • 1280 × 800 (desktop): content capped at --max-width (68rem ≈ 1088px); generous whitespace either side.

Accessibility

  • Tab-key order from top of page: skip link → logo → nav links → main content.
  • Pressing Tab from a cold page load reveals the skip link in the top-left corner.
  • Activating the skip link jumps focus into <main>.
  • Logo has a non-empty alt attribute ("Chicken Babies R Us").
  • Navigating with a screen reader announces each landmark (header, nav, main, footer).
  • Spot-check color contrast of --c-ink (#2B3A42) on --c-cream (#FAF3E7) — should be comfortably above WCAG AA for body text.

Assets

  • /static/img/logo.png loads and is roughly 256px tall.
  • /static/img/logo.webp loads with content-type image/webp.
  • /static/img/favicon.ico is requested by the browser and returns 200.
  • /static/img/apple-touch-icon.png is 180×180 and has a cream (#FAF3E7) background.

Ops smoke

  • pytest -q passes locally.
  • python -c "from app.main import app" exits cleanly.
  • python scripts/generate_static_assets.py regenerates the four asset files without error.
  • docker compose config still parses cleanly.