Spaces:
Paused
Paused
| """Tests for tools.environments.docker.find_docker — Docker CLI discovery.""" | |
| import os | |
| from unittest.mock import patch | |
| import pytest | |
| from tools.environments import docker as docker_mod | |
| def _reset_cache(): | |
| """Clear the module-level docker executable cache between tests.""" | |
| docker_mod._docker_executable = None | |
| yield | |
| docker_mod._docker_executable = None | |
| class TestFindDocker: | |
| def test_found_via_shutil_which(self): | |
| with patch("tools.environments.docker.shutil.which", return_value="/usr/bin/docker"): | |
| result = docker_mod.find_docker() | |
| assert result == "/usr/bin/docker" | |
| def test_not_in_path_falls_back_to_known_locations(self, tmp_path): | |
| # Create a fake docker binary at a known path | |
| fake_docker = tmp_path / "docker" | |
| fake_docker.write_text("#!/bin/sh\n") | |
| fake_docker.chmod(0o755) | |
| with patch("tools.environments.docker.shutil.which", return_value=None), \ | |
| patch("tools.environments.docker._DOCKER_SEARCH_PATHS", [str(fake_docker)]): | |
| result = docker_mod.find_docker() | |
| assert result == str(fake_docker) | |
| def test_returns_none_when_not_found(self): | |
| with patch("tools.environments.docker.shutil.which", return_value=None), \ | |
| patch("tools.environments.docker._DOCKER_SEARCH_PATHS", ["/nonexistent/docker"]): | |
| result = docker_mod.find_docker() | |
| assert result is None | |
| def test_caches_result(self): | |
| with patch("tools.environments.docker.shutil.which", return_value="/usr/local/bin/docker"): | |
| first = docker_mod.find_docker() | |
| # Second call should use cache, not call shutil.which again | |
| with patch("tools.environments.docker.shutil.which", return_value=None): | |
| second = docker_mod.find_docker() | |
| assert first == second == "/usr/local/bin/docker" | |