"""#64: импорт модулей не должен давать side effects в процессе.""" import os import subprocess import sys from pathlib import Path REPO_ROOT = Path(__file__).resolve().parent.parent def _run_in_subprocess(code: str, cwd: Path) -> str: """Выполняет code в чистом интерпретаторе с доступом к пакету.""" env = {**os.environ, "PYTHONPATH": str(REPO_ROOT)} result = subprocess.run( [sys.executable, "-c", code], cwd=cwd, env=env, capture_output=True, text=True, check=True, ) return result.stdout.strip() def test_config_import_does_not_mutate_os_environ(tmp_path): """import redmine_reporter.config не подгружает .env из текущей директории.""" (tmp_path / ".env").write_text("RR_IMPORT_PROBE=1\n") output = _run_in_subprocess( "import os\n" "import redmine_reporter.config\n" "print('RR_IMPORT_PROBE' in os.environ)\n", cwd=tmp_path, ) assert output == "False" def test_mailer_import_does_not_mutate_global_charset_registry(tmp_path): """import redmine_reporter.mailer не меняет email.charset для всего процесса.""" output = _run_in_subprocess( "from email.charset import BASE64, Charset\n" "before = Charset('utf-8').body_encoding\n" "import redmine_reporter.mailer\n" "after = Charset('utf-8').body_encoding\n" "print(before == BASE64, after == BASE64)\n", cwd=tmp_path, ) assert output == "True True"