91e75e620b
CI: cua-driver distro-compat matrix / debian:12 (glibc 2.36) (push) Has been cancelled
CI: SPDX Headers / Check SPDX headers (warn-only) (push) Has been cancelled
CD: Docs MCP Server / build (linux/amd64) (push) Has been cancelled
CD: Docs MCP Server / build (linux/arm64) (push) Has been cancelled
CD: Docs MCP Server / merge (push) Has been cancelled
CI: cua-driver distro-compat matrix / Resolve release version (push) Has been cancelled
CI: cua-driver distro-compat matrix / fedora:41 (glibc 2.40) (push) Has been cancelled
CI: cua-driver distro-compat matrix / rockylinux:9 (glibc 2.34) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:22.04 (glibc 2.35) (push) Has been cancelled
CI: cua-driver distro-compat matrix / ubuntu:24.04 (glibc 2.39) (push) Has been cancelled
CI: cua-driver distro-compat matrix / Distro compat summary (push) Has been cancelled
CI: Rust Linux unit / Rust Linux unit and compile (push) Has been cancelled
CI: Rust Windows unit / Rust Windows unit and compile (push) Has been cancelled
CI: Nix Linux Rust source / Nix / compositor build (push) Has been cancelled
CI: Nix Linux Rust source / Nix / driver package (push) Has been cancelled
CI: Nix Linux Rust source / Nix / Rust unit tests (push) Has been cancelled
167 lines
5.5 KiB
Python
167 lines
5.5 KiB
Python
"""Tests for the main CLI entry point."""
|
|
|
|
import argparse
|
|
import sys
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
from cua_cli.main import create_parser, main
|
|
|
|
|
|
class TestCreateParser:
|
|
"""Tests for create_parser function."""
|
|
|
|
def test_creates_parser(self):
|
|
"""Test that parser is created."""
|
|
parser = create_parser()
|
|
|
|
assert isinstance(parser, argparse.ArgumentParser)
|
|
assert parser.prog == "cua"
|
|
|
|
def test_has_version_flag(self):
|
|
"""Test that --version flag is present."""
|
|
parser = create_parser()
|
|
|
|
with pytest.raises(SystemExit) as exc_info:
|
|
parser.parse_args(["--version"])
|
|
|
|
assert exc_info.value.code == 0
|
|
|
|
def test_has_auth_command(self):
|
|
"""Test that auth command is registered."""
|
|
parser = create_parser()
|
|
|
|
args = parser.parse_args(["auth", "login"])
|
|
assert args.command == "auth"
|
|
assert args.auth_command == "login"
|
|
|
|
def test_has_sandbox_command(self):
|
|
"""Test that sandbox command is registered."""
|
|
parser = create_parser()
|
|
|
|
args = parser.parse_args(["sandbox", "list"])
|
|
assert args.command == "sandbox"
|
|
assert args.sandbox_command == "list"
|
|
|
|
def test_has_sb_alias(self):
|
|
"""Test that sb alias works."""
|
|
parser = create_parser()
|
|
|
|
args = parser.parse_args(["sb", "list"])
|
|
assert args.command == "sb"
|
|
assert args.sandbox_command == "list"
|
|
|
|
def test_has_image_command(self):
|
|
"""Test that image command is registered."""
|
|
parser = create_parser()
|
|
|
|
args = parser.parse_args(["image", "list"])
|
|
assert args.command == "image"
|
|
assert args.image_command == "list"
|
|
|
|
def test_has_skills_command(self):
|
|
"""Test that skills command is registered."""
|
|
parser = create_parser()
|
|
|
|
args = parser.parse_args(["skills", "list"])
|
|
assert args.command == "skills"
|
|
assert args.skills_command == "list"
|
|
|
|
def test_has_serve_mcp_command(self):
|
|
"""Test that serve-mcp command is registered."""
|
|
parser = create_parser()
|
|
|
|
args = parser.parse_args(["serve-mcp"])
|
|
assert args.command == "serve-mcp"
|
|
|
|
|
|
class TestMain:
|
|
"""Tests for main function."""
|
|
|
|
def test_no_args_shows_help(self, capsys):
|
|
"""Test that no arguments shows help."""
|
|
with patch.object(sys, "argv", ["cua"]):
|
|
result = main()
|
|
|
|
assert result == 0
|
|
captured = capsys.readouterr()
|
|
assert "usage:" in captured.out.lower() or "cua" in captured.out
|
|
|
|
def test_dispatch_to_auth(self):
|
|
"""Test dispatch to auth command."""
|
|
with patch.object(sys, "argv", ["cua", "auth", "logout"]):
|
|
with patch("cua_cli.commands.auth.execute", return_value=0) as mock_execute:
|
|
result = main()
|
|
|
|
mock_execute.assert_called_once()
|
|
assert result == 0
|
|
|
|
def test_dispatch_to_sandbox(self):
|
|
"""Test dispatch to sandbox command."""
|
|
with patch.object(sys, "argv", ["cua", "sandbox", "list"]):
|
|
with patch("cua_cli.commands.sandbox.execute", return_value=0) as mock_execute:
|
|
result = main()
|
|
|
|
mock_execute.assert_called_once()
|
|
assert result == 0
|
|
|
|
def test_dispatch_to_sb_alias(self):
|
|
"""Test dispatch to sb alias."""
|
|
with patch.object(sys, "argv", ["cua", "sb", "list"]):
|
|
with patch("cua_cli.commands.sandbox.execute", return_value=0) as mock_execute:
|
|
result = main()
|
|
|
|
mock_execute.assert_called_once()
|
|
assert result == 0
|
|
|
|
def test_dispatch_to_image(self):
|
|
"""Test dispatch to image command."""
|
|
with patch.object(sys, "argv", ["cua", "image", "list"]):
|
|
with patch("cua_cli.commands.image.execute", return_value=0) as mock_execute:
|
|
result = main()
|
|
|
|
mock_execute.assert_called_once()
|
|
assert result == 0
|
|
|
|
def test_dispatch_to_skills(self):
|
|
"""Test dispatch to skills command."""
|
|
with patch.object(sys, "argv", ["cua", "skills", "list"]):
|
|
with patch("cua_cli.commands.skills.execute", return_value=0) as mock_execute:
|
|
result = main()
|
|
|
|
mock_execute.assert_called_once()
|
|
assert result == 0
|
|
|
|
def test_dispatch_to_mcp(self):
|
|
"""Test dispatch to serve-mcp command."""
|
|
with patch.object(sys, "argv", ["cua", "serve-mcp"]):
|
|
with patch("cua_cli.commands.mcp.execute", return_value=0) as mock_execute:
|
|
result = main()
|
|
|
|
mock_execute.assert_called_once()
|
|
assert result == 0
|
|
|
|
def test_keyboard_interrupt_returns_130(self):
|
|
"""Test that KeyboardInterrupt returns exit code 130."""
|
|
with patch.object(sys, "argv", ["cua", "sandbox", "list"]):
|
|
with patch("cua_cli.commands.sandbox.execute", side_effect=KeyboardInterrupt):
|
|
result = main()
|
|
|
|
assert result == 130
|
|
|
|
def test_exception_returns_1(self):
|
|
"""Test that exceptions return exit code 1."""
|
|
with patch.object(sys, "argv", ["cua", "sandbox", "list"]):
|
|
with patch("cua_cli.commands.sandbox.execute", side_effect=Exception("Test error")):
|
|
result = main()
|
|
|
|
assert result == 1
|
|
|
|
def test_unknown_command_returns_1(self):
|
|
"""Test that unknown commands are handled."""
|
|
# Mock parse_args to return an unknown command
|
|
with patch.object(sys, "argv", ["cua", "unknown"]):
|
|
# This should trigger SystemExit from argparse
|
|
with pytest.raises(SystemExit):
|
|
main()
|