import os import pytest from pathlib import Path from src import paths @pytest.fixture(autouse=True) def reset_paths(): paths.reset_resolved() yield paths.reset_resolved() def test_default_paths(tmp_path, monkeypatch): monkeypatch.setenv("SLOP_CONFIG", str(tmp_path / "non_existent.toml")) root_dir = Path(paths.__file__).resolve().parent.parent assert paths.get_logs_dir() == root_dir / "logs/sessions" assert paths.get_scripts_dir() == root_dir / "scripts/generated" # config path should be what we set in env assert paths.get_config_path() == tmp_path / "non_existent.toml" def test_env_var_overrides(tmp_path, monkeypatch): # Absolute env var abs_logs = (tmp_path / "abs_logs").resolve() monkeypatch.setenv("SLOP_LOGS_DIR", str(abs_logs)) assert paths.get_logs_dir() == abs_logs def test_config_overrides(tmp_path, monkeypatch): root_dir = Path(paths.__file__).resolve().parent.parent config_file = tmp_path / "custom_config.toml" content = """ [paths] logs_dir = "cfg_logs" scripts_dir = "cfg_scripts" """ config_file.write_text(content) monkeypatch.setenv("SLOP_CONFIG", str(config_file)) assert paths.get_logs_dir() == root_dir / "cfg_logs" assert paths.get_scripts_dir() == root_dir / "cfg_scripts" def test_precedence(tmp_path, monkeypatch): root_dir = Path(paths.__file__).resolve().parent.parent config_file = tmp_path / "custom_config.toml" content = """ [paths] logs_dir = "cfg_logs" """ config_file.write_text(content) monkeypatch.setenv("SLOP_CONFIG", str(config_file)) monkeypatch.setenv("SLOP_LOGS_DIR", "env_logs") # Env var should take precedence over config assert paths.get_logs_dir() == (root_dir / "env_logs").resolve() def test_conductor_dir_project_relative(tmp_path): # Should default to tmp_path/conductor project_path = str(tmp_path) base = (tmp_path / 'conductor').resolve() assert paths.get_conductor_dir(project_path) == base assert paths.get_tracks_dir(project_path) == base / "tracks" assert paths.get_archive_dir(project_path) == base / "archive" assert paths.get_track_state_dir("test_track", project_path) == base / "tracks" / "test_track"