59 lines
2.1 KiB
Markdown
59 lines
2.1 KiB
Markdown
---
|
|
id: ML-6
|
|
title: Align mix.exs test coverage threshold with sandbox-achievable level
|
|
status: Done
|
|
assignee: []
|
|
created_date: "2026-04-20 08:48"
|
|
labels: []
|
|
dependencies: []
|
|
references:
|
|
- "https://github.com/cloud8421/music_library/issues/177"
|
|
priority: low
|
|
---
|
|
|
|
## Description
|
|
|
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
|
|
|
_GitHub: created 2026-04-16 · updated 2026-04-17 · closed 2026-04-17_
|
|
|
|
## Summary
|
|
|
|
`mix.exs` sets a coverage threshold of 90 % but actual coverage is 75.77 %. Most of the 14.2-point gap is modules that legitimately cannot execute in the Ecto sandbox: cron-only workers (`RepoVacuum`, `RepoOptimize`, `SendRecordsOnThisDayEmail`, `RefreshScrobbles`) and Mix tasks. Per project conventions, tests for untestable sandbox operations are not written.
|
|
|
|
## Evidence
|
|
|
|
Current coverage output: 75.77 % (720 tests, `mix test --cover`).
|
|
|
|
0 % modules that cannot be covered under the sandbox convention:
|
|
|
|
- `MusicLibrary.Worker.RepoVacuum`
|
|
- `MusicLibrary.Worker.RepoOptimize`
|
|
- `MusicLibrary.Worker.SendRecordsOnThisDayEmail`
|
|
- `MusicLibrary.Worker.RefreshScrobbles`
|
|
- `MusicLibrary.Worker.BackfillScrobbledTracks`
|
|
- Several `Mix.Tasks.*`
|
|
|
|
## Why It Matters
|
|
|
|
A red coverage check on `mix test --cover` that is structurally unachievable trains contributors to ignore the signal. Either the threshold should reflect reality, or the untestable modules should be decorated for exclusion.
|
|
|
|
## Fix (options)
|
|
|
|
1. Lower the threshold to a realistic value (e.g. 85 %) that fails when new gaps appear but passes today.
|
|
2. Decorate the unreachable modules with `@moduledoc tags: [:skip_coverage]` (or similar) and exclude them via `test_coverage: [ignore_modules: [...]]` in `mix.exs`.
|
|
|
|
Option 2 is preferable because it keeps the threshold aspirational and surfaces the exclusion list.
|
|
|
|
## Acceptance Criteria
|
|
|
|
<!-- AC:BEGIN -->
|
|
|
|
- `mix test --cover` passes under its configured threshold
|
|
- Untestable modules are explicitly enumerated somewhere (config, moduledoc, or both)
|
|
<!-- SECTION:DESCRIPTION:END -->
|
|
|
|
- [ ] #1 `mix test --cover` passes under its configured threshold
|
|
- [ ] #2 Untestable modules are explicitly enumerated somewhere (config, moduledoc, or both)
|
|
<!-- AC:END -->
|