Subsystem Test Maps¶
Per-subsystem "what's tested and how" docs. Each maps a subsystem's source modules to their test files, lists the behaviors under test, explains the setup patterns specific to that subsystem, and records the deliberate gaps. Numbered roughly by the start pipeline (core โ queue โ rooms โ planning โ learning โ mapping) then peripheral subsystems and the HA-facing layers.
| # | Subsystem | Map | Cov |
|---|---|---|---|
| 01 | Core (orchestrator, lifecycle, progress, errors, storage) | 01-core | 95% |
| 02 | Jobs (start gate + active-job tracker) | 02-jobs | 93% |
| 03 | Queue (ordered clean queue) | 03-queue | 95% |
| 04 | Rooms (discovery, CRUD, access graph) | 04-rooms | 93% |
| 05 | Planning (rule eval, fan-out, path-block) | 05-planning | 93% |
| 06 | Learning (estimator, finalizer, history) | 06-learning | 94% |
| 07 | Mapping (trace pipeline, image stack, tracker) | 07-mapping | 89% |
| 08 | Battery (wear/health, sensors, sessions) | 08-battery | 94% |
| 09 | Maintenance (wear tracking, care guides) | 09-maintenance | 89% |
| 10 | Dock (action gating + dispatch) | 10-dock | 97% |
| 11 | Setup (workflow, drift, delete, entry wiring) | 11-setup | 93% |
| 12 | Profiles (per-room cleaning profiles) | 12-profiles | 96% |
| 13 | Onboarding (discovery + floor-type state) | 13-onboarding | 95% |
| 14 | Themes (card theme library) | 14-themes | 96% |
| 15 | Adapters (brand abstraction boundary) | 15-adapters | 92%ยน |
| 16 | Listeners (HA event โ manager wiring) | 16-listeners | 93% |
| 17 | Services (HA service-call layer) | 17-services | 96% |
| 18 | Platforms & entities (sensor/button/number/switch/โฆ) | 18-platforms | 96% |
ยน Includes the concrete Eufy adapter (adapters/eufy/*), now counted in the
number. The framework adapter code (registry/loader/schema) sits in the mid-90s
to 100%; the subsystem figure is pulled down almost entirely by the CV
segmentor (91%, 866 stmts) โ see 15-adapters.
The per-subsystem Cov column is combined (statement + branch) coverage โ
the single number pytest --cov-branch prints per row โ computed over exactly
the modules each subsystem's table lists. Package __init__.py files (boot /
re-export wiring) are deliberately not tabled, so they sit in the grand total
but not the per-subsystem figures. The grand total below breaks out the
statement-only figure too.
Total: 95.2% statement coverage (93% combined with --cov-branch, adapters
included) over the source modules, all tests green. These numbers and the
per-module tables are refreshed by scripts/update_test_docs.py.
Writing / updating a test map¶
Each map keeps five sections (see 10-dock as the compact template, 06-learning as the detailed one):
- Coverage map โ table of source module โ stmts โ cov% โ test file โ layer.
- What's tested โ per module, the behaviors (reference target-ID ranges).
- How it's tested โ the setup patterns (which fixtures,
tmp_pathvs integrationhass, seeding helpers). - Known gaps โ what's deliberately untested and why.
Measure a subsystem's coverage by running all its test files together (see
../02-running-tests.md),
and link the matching docs/dev/ architecture file at the top.
Coverage conventions (apply everywhere)¶
# pragma: no coveris used only on pure log-only / best-effort except blocks (I/O writes, listener teardown) โ never on a block that escapes into a returned/persisted/user-visible value.- Deliberately measured (not pragma'd, even though they only log): fan-out skip-one-continue resilience and degraded-return excepts โ these are behavior.
- Honest misses (not tested, not pragma'd): defensive
continue/return []guards (real control flow) andasync_setup_entryboot wiring.