92 lines
2.8 KiB
Python
92 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import pytest
|
|
from unittest.mock import Mock, patch
|
|
from io import StringIO
|
|
import sys
|
|
|
|
from kumacli.cmd.info import InfoCommands, handle_info_command
|
|
|
|
|
|
class TestInfoCommands:
|
|
def test_get_info_success(self, mock_client, capsys):
|
|
"""Test successful info retrieval"""
|
|
# Setup
|
|
mock_info_data = {
|
|
"version": "1.23.0",
|
|
"hostname": "kuma-server",
|
|
"primaryBaseURL": "https://status.example.com"
|
|
}
|
|
mock_client.api.info.return_value = mock_info_data
|
|
|
|
info_commands = InfoCommands(mock_client)
|
|
|
|
# Execute
|
|
info_commands.get_info()
|
|
|
|
# Verify
|
|
mock_client.api.info.assert_called_once()
|
|
captured = capsys.readouterr()
|
|
assert "Server Information:" in captured.out
|
|
assert "version: 1.23.0" in captured.out
|
|
assert "hostname: kuma-server" in captured.out
|
|
assert "primaryBaseURL: https://status.example.com" in captured.out
|
|
|
|
def test_get_info_empty_response(self, mock_client, capsys):
|
|
"""Test info command with empty response"""
|
|
# Setup
|
|
mock_client.api.info.return_value = None
|
|
|
|
info_commands = InfoCommands(mock_client)
|
|
|
|
# Execute
|
|
info_commands.get_info()
|
|
|
|
# Verify
|
|
mock_client.api.info.assert_called_once()
|
|
captured = capsys.readouterr()
|
|
assert "No server info available" in captured.out
|
|
|
|
def test_get_info_api_error(self, mock_client, capsys):
|
|
"""Test info command with API error"""
|
|
# Setup
|
|
mock_client.api.info.side_effect = Exception("Connection failed")
|
|
|
|
info_commands = InfoCommands(mock_client)
|
|
|
|
# Execute
|
|
info_commands.get_info()
|
|
|
|
# Verify
|
|
mock_client.api.info.assert_called_once()
|
|
captured = capsys.readouterr()
|
|
assert "Error getting server info: Connection failed" in captured.out
|
|
|
|
|
|
class TestInfoCommandHandler:
|
|
def test_handle_info_command(self, mock_client):
|
|
"""Test info command handler"""
|
|
# Setup
|
|
mock_args = Mock()
|
|
mock_info_data = {"version": "1.23.0"}
|
|
mock_client.api.info.return_value = mock_info_data
|
|
|
|
# Execute
|
|
result = handle_info_command(mock_args, mock_client)
|
|
|
|
# Verify
|
|
assert result is True
|
|
mock_client.api.info.assert_called_once()
|
|
|
|
def test_handle_info_command_with_error(self, mock_client):
|
|
"""Test info command handler with error"""
|
|
# Setup
|
|
mock_args = Mock()
|
|
mock_client.api.info.side_effect = Exception("API Error")
|
|
|
|
# Execute
|
|
result = handle_info_command(mock_args, mock_client)
|
|
|
|
# Verify
|
|
assert result is True # Handler always returns True
|
|
mock_client.api.info.assert_called_once() |