blob: f8798c11c73e3a5e401a87d53b8240473d928707 [file]
import dataclasses
from unittest.mock import MagicMock
import pytest
pytest_plugins = ["tests.tools.private.release.release_test_helper"]
@dataclasses.dataclass
class AutoPatchCmdHelpers:
"""Dataclass holding mocked command helpers."""
run_cmd: MagicMock
run_git: MagicMock
run_gh: MagicMock
@pytest.fixture(name="mock_run_cmd")
def fixture_mock_run_cmd(mocker):
"""Fixture to patch shell.run_cmd and its imports in git and gh modules."""
mock = mocker.patch("tools.private.release.shell.run_cmd")
mocker.patch("tools.private.release.git.run_cmd", mock)
mocker.patch("tools.private.release.gh.run_cmd", mock)
return mock
@pytest.fixture(name="mock_run_git")
def fixture_mock_run_git(mocker):
"""Fixture to patch Git._run_git."""
return mocker.patch("tools.private.release.git.Git._run_git")
@pytest.fixture(name="mock_run_gh")
def fixture_mock_run_gh(mocker):
"""Fixture to patch GitHub._run_gh."""
return mocker.patch("tools.private.release.gh.GitHub._run_gh")
@pytest.fixture(name="auto_patch_cmd_helpers", autouse=True)
def fixture_auto_patch_cmd_helpers(mock_run_cmd, mock_run_git, mock_run_gh):
"""Automatically patches run_cmd, Git, and GitHub CLI helpers.
This prevents tests from executing command line tools that could have
side-effects.
"""
return AutoPatchCmdHelpers(
run_cmd=mock_run_cmd,
run_git=mock_run_git,
run_gh=mock_run_gh,
)