""".env local (voir plan Phase 2, §1, core/flask_app.py::load_dotenv()) — propriété de sécurité dont dépend l'isolation des tests (tests/conftest.py pose FORGE_USERS_DB_PATH etc. AVANT cet import) : une variable déjà présente dans os.environ ne doit JAMAIS être écrasée par un .env local, même sur un poste où un vrai .env existe avec de vraies clés IA.""" import inspect import os import tempfile import pytest from dotenv import load_dotenv import core.flask_app def test_load_dotenv_never_overrides_an_already_set_variable(monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setenv("FORGE_TEST_DOTENV_VAR", "valeur-deja-posee") with tempfile.NamedTemporaryFile("w", suffix=".env", delete=False) as f: f.write("FORGE_TEST_DOTENV_VAR=valeur-du-fichier-env\n") env_path = f.name try: load_dotenv(env_path) assert os.environ["FORGE_TEST_DOTENV_VAR"] == "valeur-deja-posee" finally: os.remove(env_path) def test_core_flask_app_does_not_pass_override_true_to_load_dotenv() -> None: """Garde-fou direct sur le code lui-même : si quelqu'un ajoute un jour `override=True`, un .env local avec une VRAIE clé écraserait silencieusement l'isolation des tests (voir ci-dessus).""" source = inspect.getsource(core.flask_app) assert "load_dotenv()" in source assert "override=True" not in source