Testing#
Tests are written before the code they cover โ see the CLAUDE.md files. This page is
about what exists and how to run it.
The layers#
| Layer | Where | Boots | Runs in |
|---|---|---|---|
| Backend unit / integration | backend/src/test/** |
Quarkus + real PostgreSQL + Keycloak via Dev Services | backend-ci.yml, sonarcloud.yml |
| Packaged smoke test | TaskResourceIT |
the built runner | skipped by default |
| Frontend unit | frontend/src/dates.test.ts |
nothing; pure functions | frontend-ci.yml, sonarcloud.yml |
| Frontend component | frontend/src/App.test.tsx |
jsdom, stubbed fetch |
frontend-ci.yml, sonarcloud.yml |
| Browser end-to-end | e2e/tests/ |
the whole containerised stack | e2e.yml |
The backend's split between "unit" and "integration" is not about annotations but about what a test needs: most of it needs a real database, because that is where the behaviour being checked actually lives. H2 is deliberately not used โ it does not reflect PostgreSQL closely enough to be worth the speed.
In this chapter#
| Page | What it covers |
|---|---|
| Backend | Unit and Quarkus tests, Dev Services, the real sign-in |
| Frontend | Unit and component tests with Vitest |
| Browser end-to-end | The Playwright suite against the container stack |
| Coverage | How coverage is measured, and the gate |
| Mutation testing | PIT, its scope, and why it reports without blocking |
| Continuous integration | Which workflow runs what, and when |