Purpose
Enough tests to change code with confidence, not so many that they slow us down.
The standard
Must test: any business logic (calculations, geometry math, parsing), any RLS policy (08.03), any server action that writes data.
Should test: critical user flows (login, save page, generate panel) with one end-to-end test each.
Don't bother: styling, trivial getters, generated code.
Tools: Vitest (unit), Playwright (e2e) for web; pytest for Python (geometry modules tested outside Rhino with pure math); xUnit for C# with the Revit/Rhino API mocked or tested via a headless runner where available.
Tests live next to code (
foo.test.ts) or intests/; named for behavior:rejects_save_when_role_is_viewer.CI runs unit tests on every PR; e2e on
mainand on PRs labelede2e.
Anti-patterns
Tests that mock the thing they're testing; snapshot tests of large UI; skipping tests to get green.
Owner: Matt · Last reviewed: 2026-09