"""Tests for myagents.project_root.""" import os from pathlib import Path from unittest.mock import patch from myagents.project_root import get_project_root, get_workspace_root class TestGetProjectRoot: """Tests for get_project_root.""" def test_env_var_takes_priority(self, tmp_path: Path) -> None: """MYAGENTS_PROJECT_ROOT env var should be used when set.""" fake_root = tmp_path / "fake_repo" fake_root.mkdir() (fake_root / "pyproject.toml").write_text('name = "myagents"\n') with patch.dict(os.environ, {"MYAGENTS_PROJECT_ROOT": str(fake_root)}): result = get_project_root() assert result == fake_root.resolve() def test_env_var_expands_tilde(self, tmp_path: Path) -> None: """MYAGENTS_PROJECT_ROOT should expand ~ to home directory.""" home = tmp_path / "home" home.mkdir() fake_root = home / "fake_repo" fake_root.mkdir() (fake_root / "pyproject.toml").write_text('name = "myagents"\n') with patch.dict( os.environ, { "MYAGENTS_PROJECT_ROOT": "~/fake_repo", "HOME": str(home), }, ): result = get_project_root() assert result == fake_root.resolve() def test_fallback_when_not_in_repo(self) -> None: """When not in a repo, fallback to ~/.myagents.""" with ( patch.dict(os.environ, {}, clear=True), patch("pathlib.Path.cwd", side_effect=OSError), patch( "myagents.project_root._pyproject_names_myagents", return_value=False, ), ): result = get_project_root() assert result == Path.home() / ".myagents" class TestGetWorkspaceRoot: """Tests for get_workspace_root.""" def test_env_var_takes_priority(self, tmp_path: Path) -> None: """MYAGENTS_WORKSPACE_ROOT env var should be used when set.""" custom = tmp_path / "custom_workspace" with patch.dict(os.environ, {"MYAGENTS_WORKSPACE_ROOT": str(custom)}): result = get_workspace_root() assert result == custom.resolve() assert result.is_dir() def test_creates_directory_if_missing(self, tmp_path: Path) -> None: """Should create the workspace directory if it doesn't exist.""" new_ws = tmp_path / "new_workspace" assert not new_ws.exists() with patch.dict(os.environ, {"MYAGENTS_WORKSPACE_ROOT": str(new_ws)}): result = get_workspace_root() assert result == new_ws.resolve() assert result.is_dir() def test_defaults_to_project_workspace(self, tmp_path: Path) -> None: """When project_root/workspace exists, use it.""" project_root = tmp_path / "myagents" project_root.mkdir() workspace = project_root / "workspace" workspace.mkdir() (project_root / "pyproject.toml").write_text('name = "myagents"\n') with patch.dict( os.environ, {"MYAGENTS_PROJECT_ROOT": str(project_root)}, clear=True ): result = get_workspace_root() assert result == workspace.resolve() def test_defaults_to_home_workspace(self, tmp_path: Path) -> None: """When no env var and no project workspace, default to ~/workspace.""" home = tmp_path / "home" home.mkdir() with ( patch.dict(os.environ, {}, clear=True), patch( "myagents.project_root.get_project_root", return_value=tmp_path / ".myagents", ), patch("pathlib.Path.home", return_value=home), ): result = get_workspace_root() assert result == home / "workspace" assert result.is_dir()