"""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 @pytest.fixture(autouse=True) 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_docker_preferred_over_podman(self): """When both docker and podman are on PATH, docker wins.""" def which_side_effect(name): if name == "docker": return "/usr/bin/docker" if name == "podman": return "/usr/bin/podman" return None with patch("tools.environments.docker.shutil.which", side_effect=which_side_effect): result = docker_mod.find_docker() assert result == "/usr/bin/docker"