There is no ContactForm.test.tsx and no QuoteRequestForm.test.tsx — the latter is the largest form in the app. The server side of /api/contact is tested; the UI that feeds it is not.
Untested paths include the consent gate, the MIN_SUBMIT_DELAY_MS timing gate, honeypot wiring, non-OK response handling and network-failure copy.
All of src/components/scheduling/ was untested too, which is exactly why the booking outage shipped.
Related gaps:
- Coverage thresholds sit at 20% with a comment admitting they are "intentionally low", and
test:coverage is never invoked by any workflow
- Playwright is four loose smoke tests, chromium-only, never on pull requests. Selectors like
[class*="hero"] match almost anything against hashed CSS Module names, and the blog test passes even if the nav breaks entirely
- The performance budget skips every gallery route and
/one-nation-divided (1,148 lines), and because VERCEL_ENV is unset in CI it measures unoptimised originals rather than the AVIF/WebP path that actually serves production
There is no
ContactForm.test.tsxand noQuoteRequestForm.test.tsx— the latter is the largest form in the app. The server side of/api/contactis tested; the UI that feeds it is not.Untested paths include the consent gate, the
MIN_SUBMIT_DELAY_MStiming gate, honeypot wiring, non-OK response handling and network-failure copy.All of
src/components/scheduling/was untested too, which is exactly why the booking outage shipped.Related gaps:
test:coverageis never invoked by any workflow[class*="hero"]match almost anything against hashed CSS Module names, and the blog test passes even if the nav breaks entirely/one-nation-divided(1,148 lines), and becauseVERCEL_ENVis unset in CI it measures unoptimised originals rather than the AVIF/WebP path that actually serves production