mirror of
https://github.com/trustedsec/hate_crack.git
synced 2026-04-28 12:03:11 -07:00
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>
45 lines
1.4 KiB
Python
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()
|