Files
hate_crack/tests/conftest.py
Justin Bollinger c8507e8974 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>
2026-04-22 17:27:15 -04:00

45 lines
1.4 KiB
Python

import importlib.util
import sys
from pathlib import Path
import pytest
def load_hate_crack_module(monkeypatch):
monkeypatch.setenv("HATE_CRACK_SKIP_INIT", "1")
module_path = Path(__file__).resolve().parents[1] / "hate_crack.py"
module_name = "hate_crack_script"
if module_name in sys.modules:
del sys.modules[module_name]
spec = importlib.util.spec_from_file_location(module_name, module_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
@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()