From f4269bf19324cf99892dee55950afd1777945b37 Mon Sep 17 00:00:00 2001 From: Yijia-Xiao Date: Thu, 24 Sep 2026 08:12:59 +0000 Subject: [PATCH] test: keep the CLI's saved selections out of the user's home (#1395) - every test saves and reads CLI selections under its own tmp_path --- tests/conftest.py | 6 ++++++ tests/test_cli_prefs.py | 14 ++++---------- tests/test_suite_isolation.py | 14 +++++++++++++- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index acbd85276..52d1c185b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -45,6 +45,12 @@ def _no_network(request, monkeypatch): monkeypatch.setattr(socket.socket, "connect_ex", refuse) +@pytest.fixture(autouse=True) +def _own_cli_prefs(tmp_path, monkeypatch): + """The CLI keeps the last run's selections in the user's home; tests keep theirs apart.""" + monkeypatch.setattr("cli.prefs._PREFS_PATH", tmp_path / "cli_prefs.json") + + _API_KEY_ENV_VARS = ( "OPENAI_API_KEY", "GOOGLE_API_KEY", diff --git a/tests/test_cli_prefs.py b/tests/test_cli_prefs.py index a833c52e1..1dbb8a149 100644 --- a/tests/test_cli_prefs.py +++ b/tests/test_cli_prefs.py @@ -27,12 +27,6 @@ SAVED = { } -@pytest.fixture(autouse=True) -def _home(tmp_path, monkeypatch): - monkeypatch.setattr("cli.prefs._PREFS_PATH", tmp_path / "cli_prefs.json") - return tmp_path - - @pytest.mark.unit def test_round_trip(): save_last_run(SAVED) @@ -45,18 +39,18 @@ def test_missing_file_is_not_an_error(): @pytest.mark.unit -def test_a_corrupt_file_degrades_to_no_memory(_home): - (_home / "cli_prefs.json").write_text("{not json") +def test_a_corrupt_file_degrades_to_no_memory(tmp_path): + (tmp_path / "cli_prefs.json").write_text("{not json") assert load_last_run() == {} @pytest.mark.unit -def test_a_half_written_file_cannot_be_observed(_home): +def test_a_half_written_file_cannot_be_observed(tmp_path): """Two runs finishing together must never leave a torn file behind.""" save_last_run(SAVED) save_last_run({**SAVED, "research_depth": 5}) assert load_last_run()["research_depth"] == 5 - assert list((_home).glob("*.tmp*")) == [] + assert list(tmp_path.glob("*.tmp*")) == [] # --- validation against the current choices --------------------------------- diff --git a/tests/test_suite_isolation.py b/tests/test_suite_isolation.py index dd325c984..7337e232e 100644 --- a/tests/test_suite_isolation.py +++ b/tests/test_suite_isolation.py @@ -1,4 +1,4 @@ -"""The suite runs the same on any machine: no test reaches the network.""" +"""The suite runs the same on any machine: no test reaches the network or the user's files.""" import socket @@ -15,3 +15,15 @@ def test_a_test_cannot_reach_the_network(connect): machine it runs on; conftest refuses the connection instead.""" with pytest.raises(OSError, match="reach the network"): connect() + + +@pytest.mark.unit +def test_a_test_saves_cli_selections_to_its_own_directory(tmp_path): + """The CLI remembers the last run's selections in the user's home; a test + that runs the selection flow would otherwise overwrite them.""" + from cli import prefs + + prefs.save_last_run({"analysts": ["market"]}) + + assert prefs._PREFS_PATH.is_relative_to(tmp_path) + assert prefs._PREFS_PATH.exists()