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(): root_dir = Path(paths.__file__).resolve().parent.parent assert paths.get_conductor_dir() == root_dir / "conductor" assert paths.get_logs_dir() == root_dir / "logs/sessions" assert paths.get_scripts_dir() == root_dir / "scripts/generated" # config path should now be an absolute path relative to src/paths.py assert paths.get_config_path() == root_dir / "config.toml" assert paths.get_tracks_dir() == root_dir / "conductor/tracks" assert paths.get_archive_dir() == root_dir / "conductor/archive" def test_env_var_overrides(tmp_path, monkeypatch): root_dir = Path(paths.__file__).resolve().parent.parent # Relative env var (resolved against root_dir) monkeypatch.setenv("SLOP_CONDUCTOR_DIR", "custom_conductor") assert paths.get_conductor_dir() == (root_dir / "custom_conductor").resolve() paths.reset_resolved() # 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] conductor_dir = "cfg_conductor" logs_dir = "cfg_logs" scripts_dir = "cfg_scripts" """ config_file.write_text(content) monkeypatch.setenv("SLOP_CONFIG", str(config_file)) assert paths.get_conductor_dir() == (root_dir / "cfg_conductor").resolve() 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] conductor_dir = "cfg_conductor" """ config_file.write_text(content) monkeypatch.setenv("SLOP_CONFIG", str(config_file)) monkeypatch.setenv("SLOP_CONDUCTOR_DIR", "env_conductor") # Env var should take precedence over config assert paths.get_conductor_dir() == (root_dir / "env_conductor").resolve()