from skillhub.cli import app, run
class TestCLI:
"""Tests for CLI application."""
def test_app_creation(self):
"""Test that CLI app is created correctly."""
assert app is not None
assert app.info.name == "skillhub"
def test_app_has_subcommands(self):
"""Test that CLI has registered subcommands."""
registered = app.registered_commands
registered_groups = app.registered_groups
assert len(registered) > 0 or len(registered_groups) > 0
def test_run_function_exists(self):
"""Test that run function exists."""
assert callable(run)
def test_main_callback_exists(self):
"""Test that main callback is registered."""
assert app.callback is not None
class TestCLIIntegration:
"""Integration tests for CLI using CliRunner."""
def test_cli_help(self):
"""Test CLI help output."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["--help"])
assert result.exit_code == 0
assert "skillhub" in result.output.lower() or "skill" in result.output.lower()
def test_cli_version_not_implemented(self):
"""Test that version flag behavior."""
from typer.testing import CliRunner
runner = CliRunner()
runner.invoke(app, ["--version"])
def test_cli_no_args_shows_help(self):
"""Test that no args shows help."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, [])
assert result.exit_code in [0, 2]
if result.exit_code == 0:
assert "skillhub" in result.output.lower() or "skill" in result.output.lower()
def test_cli_invalid_command(self):
"""Test invalid command handling."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["invalid-command"])
assert result.exit_code != 0
class TestCLISubcommands:
"""Tests for CLI subcommand registration."""
def test_source_command_registered(self):
"""Test source command is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["source", "--help"])
assert result.exit_code == 0
def test_skill_command_registered(self):
"""Test skill command is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["skill", "--help"])
assert result.exit_code == 0
def test_search_command_registered(self):
"""Test search command is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["search", "--help"])
assert result.exit_code == 0
def test_config_command_registered(self):
"""Test config command is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["config", "--help"])
assert result.exit_code == 0
def test_auth_command_registered(self):
"""Test auth command is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["auth", "--help"])
assert result.exit_code == 0
def test_cache_command_registered(self):
"""Test cache command is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["cache", "--help"])
assert result.exit_code == 0
def test_doctor_command_registered(self):
"""Test doctor command is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["doctor", "--help"])
assert result.exit_code == 0
def test_install_alias_registered(self):
"""Test install alias is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["install", "--help"])
assert result.exit_code == 0
def test_list_alias_registered(self):
"""Test list alias is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["list", "--help"])
assert result.exit_code == 0
def test_uninstall_alias_registered(self):
"""Test uninstall alias is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["uninstall", "--help"])
assert result.exit_code == 0
def test_upgrade_alias_registered(self):
"""Test upgrade alias is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["upgrade", "--help"])
assert result.exit_code == 0
def test_info_alias_registered(self):
"""Test info alias is registered."""
from typer.testing import CliRunner
runner = CliRunner()
result = runner.invoke(app, ["info", "--help"])
assert result.exit_code == 0