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.
91 lines
3.8 KiB
Markdown
91 lines
3.8 KiB
Markdown
# 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:
|
||
|
||
```bash
|
||
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.
|