From 9f959f8c784f2adddb53b521d51ae4d061dd0ff5 Mon Sep 17 00:00:00 2001 From: adlee-was-taken Date: Sun, 5 Apr 2026 10:55:42 -0400 Subject: [PATCH] test: isolate VIGILAR_CONFIG via autouse session fixture Some web endpoint handlers call _save_and_reload(), which resolves the target path via VIGILAR_CONFIG env var with a fallback to the relative "config/vigilar.toml". Any test exercising such an endpoint without setting the env var rewrites the repo's committed config file via a Pydantic model_dump round-trip, stripping comments and non-default fields. The culprit discovered was test_reset_pin_correct_passphrase in tests/unit/test_system_pin.py. Add an autouse session-scoped fixture in tests/conftest.py that points VIGILAR_CONFIG at a path inside pytest's session tmp dir so no test can touch the real file. Restore the previous env var value on teardown. Fixes #3. Co-Authored-By: Claude Opus 4.6 (1M context) --- tests/conftest.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index 138641a..d86b8f6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,6 +11,28 @@ from vigilar.config import VigilarConfig, load_config from vigilar.storage.schema import metadata +@pytest.fixture(autouse=True, scope="session") +def _isolate_vigilar_config(tmp_path_factory): + """Prevent tests from writing to the real config/vigilar.toml. + + Web endpoint handlers that call `_save_and_reload()` read the target + path from the VIGILAR_CONFIG env var, falling back to the relative + `"config/vigilar.toml"`. Without this fixture, any test that exercises + such an endpoint rewrites the repo's committed config file via a + Pydantic round-trip, stripping comments and non-default fields. + """ + tmp_config = tmp_path_factory.mktemp("vigilar-config") / "vigilar.toml" + prev = os.environ.get("VIGILAR_CONFIG") + os.environ["VIGILAR_CONFIG"] = str(tmp_config) + try: + yield + finally: + if prev is None: + os.environ.pop("VIGILAR_CONFIG", None) + else: + os.environ["VIGILAR_CONFIG"] = prev + + def _create_test_engine(db_path: Path): """Create a fresh engine for testing (bypasses the global singleton).""" db_path.parent.mkdir(parents=True, exist_ok=True)