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
This commit is contained in:
Yijia-Xiao
2026-09-24 18:45:44 +00:00
parent 47ac1f2d1e
commit f4269bf193
3 changed files with 23 additions and 11 deletions
+6
View File
@@ -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",
+4 -10
View File
@@ -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 ---------------------------------
+13 -1
View File
@@ -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()