DEVX-1: fix: use python3 and venv python in workflows and Makefile
This commit is contained in:
@@ -8,6 +8,7 @@ import pytest
|
||||
from click.testing import CliRunner
|
||||
|
||||
from devx.tools.setup import (
|
||||
_configure_tea_login,
|
||||
_install_pre_commit_hooks,
|
||||
_install_python_deps,
|
||||
_run,
|
||||
@@ -57,6 +58,67 @@ class TestInstallPreCommitHooks:
|
||||
assert "pre-push" in hook_types
|
||||
|
||||
|
||||
class TestConfigureTeaLogin:
|
||||
@patch("devx.tools.setup.shutil.which", return_value=None)
|
||||
def test_tea_not_installed(self, mock_which: MagicMock) -> None:
|
||||
_configure_tea_login()
|
||||
mock_which.assert_called_once_with("tea")
|
||||
|
||||
@patch("devx.tools.setup.shutil.which", return_value="/usr/local/bin/tea")
|
||||
@patch.dict("os.environ", {}, clear=True)
|
||||
def test_no_token(self, mock_which: MagicMock) -> None:
|
||||
_configure_tea_login()
|
||||
|
||||
@patch("devx.tools.setup.subprocess.run")
|
||||
@patch("devx.tools.setup.shutil.which", return_value="/usr/local/bin/tea")
|
||||
@patch.dict("os.environ", {"REPO_TOKEN": "tok123"}, clear=True)
|
||||
def test_login_already_exists(self, mock_which: MagicMock, mock_run: MagicMock) -> None:
|
||||
mock_run.return_value = MagicMock(returncode=0, stdout="devx\ngrm\n", stderr="")
|
||||
_configure_tea_login()
|
||||
# Should only call login list, not login add
|
||||
assert mock_run.call_count == 1
|
||||
assert "list" in mock_run.call_args[0][0]
|
||||
|
||||
@patch("devx.tools.setup.subprocess.run")
|
||||
@patch("devx.tools.setup.shutil.which", return_value="/usr/local/bin/tea")
|
||||
@patch.dict("os.environ", {"REPO_TOKEN": "tok123"}, clear=True)
|
||||
def test_login_add_success(self, mock_which: MagicMock, mock_run: MagicMock) -> None:
|
||||
list_result = MagicMock(returncode=0, stdout="", stderr="")
|
||||
add_result = MagicMock(returncode=0, stdout="", stderr="")
|
||||
default_result = MagicMock(returncode=0, stdout="", stderr="")
|
||||
mock_run.side_effect = [list_result, add_result, default_result]
|
||||
_configure_tea_login()
|
||||
assert mock_run.call_count == 3
|
||||
assert "add" in mock_run.call_args_list[1][0][0]
|
||||
assert "default" in mock_run.call_args_list[2][0][0]
|
||||
|
||||
@patch("devx.tools.setup.subprocess.run")
|
||||
@patch("devx.tools.setup.shutil.which", return_value="/usr/local/bin/tea")
|
||||
@patch.dict("os.environ", {"REPO_TOKEN": "tok123"}, clear=True)
|
||||
def test_login_add_failure(self, mock_which: MagicMock, mock_run: MagicMock) -> None:
|
||||
list_result = MagicMock(returncode=0, stdout="", stderr="")
|
||||
add_result = MagicMock(returncode=1, stdout="", stderr="auth failed")
|
||||
mock_run.side_effect = [list_result, add_result]
|
||||
_configure_tea_login()
|
||||
assert mock_run.call_count == 2
|
||||
|
||||
@patch("devx.tools.setup.subprocess.run")
|
||||
@patch("devx.tools.setup.shutil.which", return_value="/usr/local/bin/tea")
|
||||
@patch.dict(
|
||||
"os.environ",
|
||||
{"REPO_TOKEN": "tok123", "DEVX_GITEA_API_URL": "https://custom.example.com/api/v1"},
|
||||
clear=True,
|
||||
)
|
||||
def test_custom_gitea_url(self, mock_which: MagicMock, mock_run: MagicMock) -> None:
|
||||
list_result = MagicMock(returncode=0, stdout="", stderr="")
|
||||
add_result = MagicMock(returncode=0, stdout="", stderr="")
|
||||
default_result = MagicMock(returncode=0, stdout="", stderr="")
|
||||
mock_run.side_effect = [list_result, add_result, default_result]
|
||||
_configure_tea_login()
|
||||
add_call = mock_run.call_args_list[1][0][0]
|
||||
assert "https://custom.example.com" in add_call
|
||||
|
||||
|
||||
class TestVerify:
|
||||
@patch("devx.tools.setup.subprocess.run")
|
||||
def test_verify_runs_tools(self, mock_run: MagicMock) -> None:
|
||||
@@ -77,6 +139,7 @@ class TestVerify:
|
||||
|
||||
|
||||
class TestMain:
|
||||
@patch("devx.tools.setup._configure_tea_login")
|
||||
@patch("devx.tools.setup._verify")
|
||||
@patch("devx.tools.setup._install_pre_commit_hooks")
|
||||
@patch("devx.tools.setup._install_python_deps")
|
||||
@@ -85,6 +148,7 @@ class TestMain:
|
||||
mock_install_deps: MagicMock,
|
||||
mock_install_hooks: MagicMock,
|
||||
mock_verify: MagicMock,
|
||||
mock_tea: MagicMock,
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
bin_dir = tmp_path / "bin"
|
||||
@@ -95,7 +159,9 @@ class TestMain:
|
||||
mock_install_deps.assert_called_once()
|
||||
mock_install_hooks.assert_called_once()
|
||||
mock_verify.assert_called_once()
|
||||
mock_tea.assert_called_once()
|
||||
|
||||
@patch("devx.tools.setup._configure_tea_login")
|
||||
@patch("devx.tools.setup._verify")
|
||||
@patch("devx.tools.setup._install_pre_commit_hooks")
|
||||
@patch("devx.tools.setup._install_python_deps")
|
||||
@@ -104,6 +170,7 @@ class TestMain:
|
||||
mock_install_deps: MagicMock,
|
||||
mock_install_hooks: MagicMock,
|
||||
mock_verify: MagicMock,
|
||||
mock_tea: MagicMock,
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
bin_dir = tmp_path / "bin"
|
||||
@@ -114,6 +181,7 @@ class TestMain:
|
||||
mock_install_deps.assert_called_once()
|
||||
mock_install_hooks.assert_not_called()
|
||||
|
||||
@patch("devx.tools.setup._configure_tea_login")
|
||||
@patch("devx.tools.setup._verify")
|
||||
@patch("devx.tools.setup._install_pre_commit_hooks")
|
||||
@patch("devx.tools.setup._install_python_deps")
|
||||
@@ -122,6 +190,7 @@ class TestMain:
|
||||
mock_install_deps: MagicMock,
|
||||
mock_install_hooks: MagicMock,
|
||||
mock_verify: MagicMock,
|
||||
mock_tea: MagicMock,
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
bin_dir = tmp_path / "bin"
|
||||
@@ -131,22 +200,24 @@ class TestMain:
|
||||
assert result.exit_code == 0
|
||||
mock_install_deps.assert_called_once_with(str(bin_dir), "ci")
|
||||
|
||||
@patch("devx.tools.setup._configure_tea_login")
|
||||
@patch("devx.tools.setup._verify")
|
||||
@patch("devx.tools.setup._install_pre_commit_hooks")
|
||||
@patch("devx.tools.setup._install_python_deps")
|
||||
def test_main_no_tea_login_noop(
|
||||
def test_main_no_tea_login(
|
||||
self,
|
||||
mock_install_deps: MagicMock,
|
||||
mock_install_hooks: MagicMock,
|
||||
mock_verify: MagicMock,
|
||||
mock_tea: MagicMock,
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
"""--no-tea-login is a no-op (kept for backwards compatibility)."""
|
||||
bin_dir = tmp_path / "bin"
|
||||
bin_dir.mkdir()
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(main, ["--bin", str(bin_dir), "--no-tea-login"])
|
||||
assert result.exit_code == 0
|
||||
mock_tea.assert_not_called()
|
||||
|
||||
def test_main_missing_bin_dir(self) -> None:
|
||||
runner = CliRunner()
|
||||
@@ -162,8 +233,9 @@ def test_main_module_block(tmp_path: Path) -> None:
|
||||
with patch.dict("os.environ", {}, clear=True):
|
||||
with patch("devx.tools.setup._install_python_deps") as mock_deps:
|
||||
with patch("devx.tools.setup._install_pre_commit_hooks"):
|
||||
with patch("devx.tools.setup._verify"):
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(main, ["--bin", str(bin_dir)])
|
||||
assert result.exit_code == 0
|
||||
mock_deps.assert_called_once()
|
||||
with patch("devx.tools.setup._configure_tea_login"):
|
||||
with patch("devx.tools.setup._verify"):
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(main, ["--bin", str(bin_dir)])
|
||||
assert result.exit_code == 0
|
||||
mock_deps.assert_called_once()
|
||||
|
||||
Reference in New Issue
Block a user