Captured: 536 passed / 135 failed (chromium, 671 tests, 8.9 min) plus
9 manual smoke checks covering nav, contact + newsletter forms, blog
markdown, portfolio filters, /api/health.json, 404 page, broken
images, and mobile menu.
7 distinct root causes identified; 3 are demo blockers:
BUG-001 (Critical) — site-wide stylesheet 404. Running SSR process
started before dist/ was rebuilt mid-test; in-memory manifest
references stale CSS hash (about.DJCIkvZw.css) while disk has
only about.DDsw4wcw.css. Every page logs CSP/MIME error.
BUG-002 (High) — contact + newsletter rate limiter increments BEFORE
validation. 5 invalid attempts lock the form for 1 hour; corporate
NAT will trip this immediately. Cascaded into ~40 test failures.
BUG-004 (High) — 44/90 SVGs on home lack aria-hidden / aria-label.
WCAG 2.1 AA violation; blocker for govt-IT clients.
Verdict: NOT READY for client demo until BUG-001, -002, -004 fixed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
18 KiB
18 KiB
QA Bug Report — WorkRoot IT Solutions Site
- Date: 2026-05-11
- Target: http://localhost:10000 (Astro SSR, node-standalone adapter, mode=ssr, version=1.0.0)
- Tooling: Playwright 1.58.2 (chromium project) + curl smoke suite
- Scope: Full automated suite + 9-point manual smoke pass
1. Playwright suite — pass / fail counts
Command run: npx playwright test --project=chromium --reporter=list (head-500 piped output also captured per request — that early run was killed by SIGPIPE after ~496 chromium tests).
| Metric | Count |
|---|---|
| Total (chromium) | 671 |
| Passed | 536 (79.9 %) |
| Failed | 135 (20.1 %) |
| Wall time | 8.9 min |
The full configured matrix is 4 697 tests across 7 browser projects (Chromium, Firefox, WebKit, MS Edge, Mobile Chrome, Mobile Safari, iPad). Only chromium was executed end-to-end; cross-browser projects were not run because chromium alone already surfaced every regression worth fixing and the matrix would have taken ~60 min. Findings below should reproduce on Firefox / WebKit (verified spot-checks of error-context artifacts from a prior partial multi-browser run).
Failures grouped by spec file
| Spec file | Failures |
|---|---|
| tests/cross-browser.spec.ts | 27 |
| tests/accessibility.spec.ts | 17 |
| tests/e2e-form-interactions.spec.ts | 16 |
| tests/destructive-chaos.spec.ts | 15 |
| tests/theme-cross-browser.spec.ts | 10 |
| tests/api-integration.spec.ts | 10 |
| tests/pages.spec.ts | 9 |
| tests/e2e-smoke-suite.spec.ts | 7 |
| tests/e2e-blog-navigation.spec.ts | 7 |
| tests/newsletter-subscription.spec.ts | 5 |
| tests/bug-fix-verification.spec.ts | 5 |
| tests/e2e-critical-paths.spec.ts | 4 |
| tests/security-headers.test.ts | 2 |
| tests/navigation.spec.ts | 1 |
2. Manual smoke checks — pass / fail
| # | Check | Result | Notes |
|---|---|---|---|
| 1 | All nav links work (/about, /services, /portfolio, /blog, /contact, /privacy, /terms, /cookies, /sitemap) |
✅ | All HTTP 200; mobile menu has correct labels & overlay |
| 2 | Contact form submission | ✅ / 🐛 | POST /api/contact returns 200 success on valid input, 422 on invalid subject, 200 on honeypot (silent OK ✓). 429 after 5 submits/hr per IP — see BUG-002 |
| 3 | Newsletter form | ✅ / 🐛 | POST /api/newsletter returns 200 success, 422 on invalid/empty email. Same per-IP 5/hr limit applies — see BUG-002 |
| 4 | Blog post renders markdown | ✅ | /blog/ai-transforming-business: 4×h2, 8×h3, 21×p, 3×pre, 3×code, 5×ul, 47×a — all render correctly |
| 5 | Portfolio filters | ✅ | Buttons `data-filter="all |
| 6 | /api/health.json returns ok |
✅ | {"status":"ok","mode":"ssr","adapter":"node-standalone","domain":"workroot.in",...} |
| 7 | 404 page for /nonexistent |
✅ | HTTP 404 with proper ` |