test: isolate notify state between tests

hate_crack.main calls notify.init() at import time with whatever
config.json is resolved from the developer's environment (often
~/.hate_crack/config.json). If that file has notify_enabled: true, the
per-attack prompt in attacks.py fires input() during tests and trips
pytest's capture fd, failing unrelated tests.

Add an autouse conftest fixture that clears notify module state before
and after every test so the suite is hermetic regardless of local
config. Notify-specific tests already use their own
clear_state_for_tests() fixture; this change covers the rest.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Justin Bollinger
2026-04-22 17:27:15 -04:00
co-authored by Claude Opus 4.7
parent b5af2498f5
commit 97bcc0ac78
+22
View File
@@ -20,3 +20,25 @@ def load_hate_crack_module(monkeypatch):
@pytest.fixture
def hc_module(monkeypatch):
return load_hate_crack_module(monkeypatch)
@pytest.fixture(autouse=True)
def _isolate_notify_state():
"""Reset notify module state between tests.
``hate_crack.main`` calls ``notify.init()`` at import time with whatever
``config.json`` is resolved from the user's environment (e.g.
``~/.hate_crack/config.json``). If that config has
``notify_enabled: true``, the per-attack prompt in ``attacks.py`` fires
``input()`` during tests and blows up capture. Forcing the notify
package back to its disabled-by-default state before every test keeps
the suite hermetic regardless of the developer's local config.
"""
try:
from hate_crack import notify
except ImportError:
yield
return
notify.clear_state_for_tests()
yield
notify.clear_state_for_tests()