Files
grm/tests/unit/test_cli.py
T

185 lines
6.8 KiB
Python

"""Unit tests for cli module."""
from unittest.mock import MagicMock, patch
from click.testing import CliRunner
from gitea_runner_manager.cli import cli
class TestCLI:
def test_cli_version(self) -> None:
runner = CliRunner()
result = runner.invoke(cli, ["--version"])
assert result.exit_code == 0
assert "0.1.0" in result.output
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_list_runners(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
mock_manager.list_runners.return_value = [
{"id": 1, "name": "runner1", "status": "online"},
]
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(cli, ["list"])
assert result.exit_code == 0
assert "runner1" in result.output
assert "online" in result.output
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_list_empty(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
mock_manager.list_runners.return_value = []
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(cli, ["list"])
assert result.exit_code == 0
assert "No runners found" in result.output
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_token(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
mock_manager.generate_token.return_value = "tok123"
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(cli, ["token"])
assert result.exit_code == 0
assert "tok123" in result.output
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_token_error(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
from gitea_runner_manager.exceptions import GiteaAPIError
mock_manager.generate_token.side_effect = GiteaAPIError("boom")
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(cli, ["token"])
assert result.exit_code != 0
assert "boom" in result.output
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_install(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(cli, ["install", "host1", "--user", "ubuntu"])
assert result.exit_code == 0
mock_manager.install.assert_called_once_with(host="host1", user="ubuntu", key=None, name=None, token=None)
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_install_with_options(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(
cli,
[
"install",
"host1",
"--user",
"ubuntu",
"--key",
"/key",
"--name",
"r1",
"--token",
"tok",
],
)
assert result.exit_code == 0
mock_manager.install.assert_called_once_with(
host="host1",
user="ubuntu",
key="/key",
name="r1",
token="tok",
)
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_install_error(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
from gitea_runner_manager.exceptions import AnsibleError
mock_manager.install.side_effect = AnsibleError("fail")
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(cli, ["install", "host1", "--user", "ubuntu"])
assert result.exit_code != 0
assert "fail" in result.output
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_update(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(
cli,
[
"update",
"host1",
"--user",
"ubuntu",
"--key",
"/key",
"--version",
"v0.2.0",
],
)
assert result.exit_code == 0
mock_manager.update.assert_called_once_with(
host="host1",
user="ubuntu",
key="/key",
version="v0.2.0",
)
@patch("gitea_runner_manager.cli.GiteaAPIClient")
@patch("gitea_runner_manager.cli.RunnerManager")
def test_update_error(self, mock_manager_class: MagicMock, mock_client_class: MagicMock) -> None:
mock_client = MagicMock()
mock_client_class.from_env.return_value = mock_client
mock_manager = MagicMock()
from gitea_runner_manager.exceptions import AnsibleError
mock_manager.update.side_effect = AnsibleError("fail")
mock_manager_class.return_value = mock_manager
runner = CliRunner()
result = runner.invoke(cli, ["update", "host1", "--user", "ubuntu"])
assert result.exit_code != 0
assert "fail" in result.output