The suite had 8 empty `pass` tests, two tests that made live network
calls to a production healthcheck endpoint, and a write_csv test that
only asserted the file existed. CI ran only test_komodo_deploy, so the
main suite never executed at all.
- Split tests by module: test_qlist, test_qprocess, test_qlogging_extra,
test_apprise, test_qbt; rewrote test_qbitmaid and test_write_csv.
- qbt_fakes.py: shared fakes (FakeQbt, FakeQbtClient, FakeAPIError,
StubPushover, FailingPushover, torrent factory).
- test_qbt.py loads the hyphenated qbit-maid.py via importlib and covers
the __main__ entry point.
- Replaced the live-network tests with a RecordingRequests stub
(suite time 14s -> 0.035s).
- .coveragerc + CI unit-tests job running the full suite with
--fail-under=100.
127 unit tests, 100% statement coverage on all 5 first-party modules
(440 stmts), 15/15 mutations caught.
Seven pre-existing bugs are pinned by tests with KNOWN BUG docstrings
and left unfixed pending a decision.
15 unittest cases exercising the real script end to end: target
selection, auth headers, request shape, success/failure, HTTP 401/400,
unreachable host, polling to completion, and timeout.
Runs in CI via .gitea/workflows/test.yml on push to main/dev* and on
pull requests. No network or live Komodo instance required.