GRM-9: feat: add runner registry for simplified CLI UX
This commit is contained in:
+93
-30
@@ -229,13 +229,31 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["start", "host1", "--user", "ubuntu", "--name", "r1"])
|
||||
result = runner.invoke(cli, ["start", "r1"])
|
||||
assert result.exit_code == 0
|
||||
mock_manager.start.assert_called_once_with(
|
||||
host="host1",
|
||||
user="ubuntu",
|
||||
name="r1",
|
||||
mode="docker",
|
||||
host=None,
|
||||
user=None,
|
||||
key=None,
|
||||
mode=None,
|
||||
ask_become_pass=False,
|
||||
)
|
||||
|
||||
@patch("gitea_runner_manager.cli.RunnerManager")
|
||||
def test_start_with_override(self, mock_manager_class: MagicMock) -> None:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["start", "r1", "--host", "newhost", "--user", "newuser", "--mode", "binary"])
|
||||
assert result.exit_code == 0
|
||||
mock_manager.start.assert_called_once_with(
|
||||
name="r1",
|
||||
host="newhost",
|
||||
user="newuser",
|
||||
key=None,
|
||||
mode="binary",
|
||||
ask_become_pass=False,
|
||||
)
|
||||
|
||||
@@ -245,12 +263,13 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["stop", "host1", "--user", "ubuntu", "--name", "r1"])
|
||||
result = runner.invoke(cli, ["stop", "r1"])
|
||||
assert result.exit_code == 0
|
||||
mock_manager.stop.assert_called_once_with(
|
||||
host="host1",
|
||||
user="ubuntu",
|
||||
name="r1",
|
||||
host=None,
|
||||
user=None,
|
||||
key=None,
|
||||
ask_become_pass=False,
|
||||
)
|
||||
|
||||
@@ -260,12 +279,13 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["enable", "host1", "--user", "ubuntu", "--name", "r1"])
|
||||
result = runner.invoke(cli, ["enable", "r1"])
|
||||
assert result.exit_code == 0
|
||||
mock_manager.enable.assert_called_once_with(
|
||||
host="host1",
|
||||
user="ubuntu",
|
||||
name="r1",
|
||||
host=None,
|
||||
user=None,
|
||||
key=None,
|
||||
ask_become_pass=False,
|
||||
)
|
||||
|
||||
@@ -275,15 +295,16 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner(env={"GITEA_URL": "https://git.example.com"})
|
||||
result = runner.invoke(cli, ["disable", "host1", "--user", "ubuntu", "--name", "r1", "--token", "tok"])
|
||||
result = runner.invoke(cli, ["disable", "r1", "--token", "tok"])
|
||||
assert result.exit_code == 0
|
||||
mock_manager.disable.assert_called_once_with(
|
||||
host="host1",
|
||||
user="ubuntu",
|
||||
name="r1",
|
||||
host=None,
|
||||
user=None,
|
||||
key=None,
|
||||
token="tok",
|
||||
gitea_url="https://git.example.com",
|
||||
mode="docker",
|
||||
mode=None,
|
||||
ask_become_pass=False,
|
||||
)
|
||||
|
||||
@@ -291,7 +312,7 @@ class TestCLI:
|
||||
def test_disable_missing_url(self, mock_manager_class: MagicMock) -> None:
|
||||
with patch.dict("os.environ", {"GITEA_REGISTRATION_TOKEN": "tok"}, clear=True):
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["disable", "host1", "--user", "ubuntu", "--token", "tok"])
|
||||
result = runner.invoke(cli, ["disable", "r1", "--token", "tok"])
|
||||
assert result.exit_code != 0
|
||||
assert "GITEA_URL must be set" in result.output
|
||||
|
||||
@@ -304,7 +325,7 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner(env={"GITEA_URL": "https://git.example.com"})
|
||||
result = runner.invoke(cli, ["disable", "host1", "--user", "ubuntu", "--token", "tok"])
|
||||
result = runner.invoke(cli, ["disable", "r1", "--token", "tok"])
|
||||
assert result.exit_code != 0
|
||||
assert "fail" in result.output
|
||||
|
||||
@@ -314,13 +335,14 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["status", "host1", "--user", "ubuntu", "--name", "r1"])
|
||||
result = runner.invoke(cli, ["status", "r1"])
|
||||
assert result.exit_code == 0
|
||||
mock_manager.status.assert_called_once_with(
|
||||
host="host1",
|
||||
user="ubuntu",
|
||||
name="r1",
|
||||
mode="docker",
|
||||
host=None,
|
||||
user=None,
|
||||
key=None,
|
||||
mode=None,
|
||||
ask_become_pass=False,
|
||||
)
|
||||
|
||||
@@ -330,15 +352,16 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner(env={"GITEA_URL": "https://git.example.com"})
|
||||
result = runner.invoke(cli, ["remove", "host1", "--user", "ubuntu", "--name", "r1", "--token", "tok"])
|
||||
result = runner.invoke(cli, ["remove", "r1", "--token", "tok"])
|
||||
assert result.exit_code == 0
|
||||
mock_manager.remove.assert_called_once_with(
|
||||
host="host1",
|
||||
user="ubuntu",
|
||||
name="r1",
|
||||
host=None,
|
||||
user=None,
|
||||
key=None,
|
||||
token="tok",
|
||||
gitea_url="https://git.example.com",
|
||||
mode="docker",
|
||||
mode=None,
|
||||
ask_become_pass=False,
|
||||
)
|
||||
|
||||
@@ -351,7 +374,7 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["start", "host1", "--user", "ubuntu"])
|
||||
result = runner.invoke(cli, ["start", "r1"])
|
||||
assert result.exit_code != 0
|
||||
assert "fail" in result.output
|
||||
|
||||
@@ -364,7 +387,7 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["stop", "host1", "--user", "ubuntu"])
|
||||
result = runner.invoke(cli, ["stop", "r1"])
|
||||
assert result.exit_code != 0
|
||||
assert "fail" in result.output
|
||||
|
||||
@@ -377,7 +400,7 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["enable", "host1", "--user", "ubuntu"])
|
||||
result = runner.invoke(cli, ["enable", "r1"])
|
||||
assert result.exit_code != 0
|
||||
assert "fail" in result.output
|
||||
|
||||
@@ -390,7 +413,7 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["status", "host1", "--user", "ubuntu"])
|
||||
result = runner.invoke(cli, ["status", "r1"])
|
||||
assert result.exit_code != 0
|
||||
assert "fail" in result.output
|
||||
|
||||
@@ -398,7 +421,7 @@ class TestCLI:
|
||||
def test_remove_missing_url(self, mock_manager_class: MagicMock) -> None:
|
||||
with patch.dict("os.environ", {"GITEA_REGISTRATION_TOKEN": "tok"}, clear=True):
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["remove", "host1", "--user", "ubuntu", "--token", "tok"])
|
||||
result = runner.invoke(cli, ["remove", "r1", "--token", "tok"])
|
||||
assert result.exit_code != 0
|
||||
assert "GITEA_URL must be set" in result.output
|
||||
|
||||
@@ -411,6 +434,46 @@ class TestCLI:
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner(env={"GITEA_URL": "https://git.example.com"})
|
||||
result = runner.invoke(cli, ["remove", "host1", "--user", "ubuntu", "--token", "tok"])
|
||||
result = runner.invoke(cli, ["remove", "r1", "--token", "tok"])
|
||||
assert result.exit_code != 0
|
||||
assert "fail" in result.output
|
||||
|
||||
@patch("gitea_runner_manager.cli.RunnerManager")
|
||||
def test_list(self, mock_manager_class: MagicMock) -> None:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager.list_runners.return_value = [
|
||||
{"name": "r1", "host": "10.0.0.1", "user": "ubuntu", "mode": "docker", "status": "active"},
|
||||
]
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["list"])
|
||||
assert result.exit_code == 0
|
||||
assert "r1" in result.output
|
||||
assert "10.0.0.1" in result.output
|
||||
assert "active" in result.output
|
||||
mock_manager.list_runners.assert_called_once()
|
||||
|
||||
@patch("gitea_runner_manager.cli.RunnerManager")
|
||||
def test_list_empty(self, mock_manager_class: MagicMock) -> None:
|
||||
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 registered" in result.output
|
||||
|
||||
@patch("gitea_runner_manager.cli.RunnerManager")
|
||||
def test_list_error(self, mock_manager_class: MagicMock) -> None:
|
||||
mock_manager = MagicMock()
|
||||
from gitea_runner_manager.exceptions import AnsibleError
|
||||
|
||||
mock_manager.list_runners.side_effect = AnsibleError("fail")
|
||||
mock_manager_class.return_value = mock_manager
|
||||
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(cli, ["list"])
|
||||
assert result.exit_code != 0
|
||||
assert "fail" in result.output
|
||||
|
||||
Reference in New Issue
Block a user