Files
kumacli/tests/test_maintenance.py
Pim van Pelt e2e65add2e Add tests
2025-08-02 20:03:32 +02:00

168 lines
6.2 KiB
Python

#!/usr/bin/env python3
import pytest
from unittest.mock import Mock, patch
from io import StringIO
import sys
from kumacli.cmd.maintenance import MaintenanceCommands, handle_maintenance_command
class TestMaintenanceCommands:
def test_list_maintenances_success(self, mock_client, mock_maintenances, capsys):
"""Test successful maintenance listing"""
# Setup
mock_client.api.get_maintenances.return_value = mock_maintenances
maintenance_commands = MaintenanceCommands(mock_client)
# Execute
maintenance_commands.list_maintenances()
# Verify
mock_client.api.get_maintenances.assert_called_once()
captured = capsys.readouterr()
assert "Test Maintenance" in captured.out
assert "Inactive Maintenance" in captured.out
assert "Active" in captured.out
assert "Inactive" in captured.out
def test_list_maintenances_empty(self, mock_client, capsys):
"""Test maintenance listing with no maintenances"""
# Setup
mock_client.api.get_maintenances.return_value = []
maintenance_commands = MaintenanceCommands(mock_client)
# Execute
maintenance_commands.list_maintenances()
# Verify
captured = capsys.readouterr()
assert "No maintenances found" in captured.out
def test_list_maintenances_api_error(self, mock_client, capsys):
"""Test maintenance listing with API error"""
# Setup
mock_client.api.get_maintenances.side_effect = Exception("API Error")
maintenance_commands = MaintenanceCommands(mock_client)
# Execute
maintenance_commands.list_maintenances()
# Verify
captured = capsys.readouterr()
assert "Error listing maintenances: API Error" in captured.out
def test_delete_maintenance_by_id(self, mock_client, capsys):
"""Test deleting maintenance by ID"""
# Setup
mock_maintenance = {"id": 1, "title": "Test Maintenance"}
mock_client.api.get_maintenance.return_value = mock_maintenance
mock_client.api.delete_maintenance.return_value = {"msg": "Deleted Successfully"}
maintenance_commands = MaintenanceCommands(mock_client)
# Execute
maintenance_commands.delete_maintenance(maintenance_id=1)
# Verify
mock_client.api.get_maintenance.assert_called_once_with(1)
mock_client.api.delete_maintenance.assert_called_once_with(1)
captured = capsys.readouterr()
assert "Successfully deleted maintenance 'Test Maintenance' (ID: 1)" in captured.out
def test_delete_all_maintenances(self, mock_client, mock_maintenances, capsys):
"""Test deleting all maintenances"""
# Setup
mock_client.api.get_maintenances.return_value = mock_maintenances
mock_client.api.delete_maintenance.return_value = {"msg": "Deleted Successfully"}
maintenance_commands = MaintenanceCommands(mock_client)
# Execute
maintenance_commands.delete_maintenance(delete_all=True)
# Verify
assert mock_client.api.delete_maintenance.call_count == 2
captured = capsys.readouterr()
assert "Found 2 maintenances to delete:" in captured.out
assert "Successfully deleted 2 out of 2 maintenances" in captured.out
def test_delete_maintenance_no_params(self, mock_client, capsys):
"""Test deleting maintenance without parameters"""
maintenance_commands = MaintenanceCommands(mock_client)
# Execute
maintenance_commands.delete_maintenance()
# Verify
captured = capsys.readouterr()
assert "Error: Either --id or --all flag is required for delete operation" in captured.out
class TestMaintenanceCommandHandler:
def test_handle_maintenance_command_no_action(self, mock_client, capsys):
"""Test maintenance command handler with no action"""
# Setup
mock_args = Mock()
mock_args.maintenance_action = None
# Mock the parser setup
with patch('kumacli.cmd.maintenance.setup_maintenance_parser') as mock_setup:
mock_parser = Mock()
mock_setup._parser = mock_parser
# Execute
result = handle_maintenance_command(mock_args, mock_client)
# Verify
assert result is False
def test_handle_maintenance_command_list(self, mock_client, mock_maintenances):
"""Test maintenance command handler for list action"""
# Setup
mock_args = Mock()
mock_args.maintenance_action = "list"
mock_client.api.get_maintenances.return_value = mock_maintenances
# Execute
result = handle_maintenance_command(mock_args, mock_client)
# Verify
assert result is True
mock_client.api.get_maintenances.assert_called_once()
def test_handle_maintenance_command_delete(self, mock_client):
"""Test maintenance command handler for delete action"""
# Setup
mock_args = Mock()
mock_args.maintenance_action = "delete"
mock_args.id = 1
mock_args.all = False
mock_maintenance = {"id": 1, "title": "Test Maintenance"}
mock_client.api.get_maintenance.return_value = mock_maintenance
mock_client.api.delete_maintenance.return_value = {"msg": "Deleted Successfully"}
# Execute
result = handle_maintenance_command(mock_args, mock_client)
# Verify
assert result is True
mock_client.api.delete_maintenance.assert_called_once_with(1)
def test_handle_maintenance_command_unknown_action(self, mock_client, capsys):
"""Test maintenance command handler with unknown action"""
# Setup
mock_args = Mock()
mock_args.maintenance_action = "unknown"
# Execute
result = handle_maintenance_command(mock_args, mock_client)
# Verify
assert result is False
captured = capsys.readouterr()
assert "Unknown maintenance action. Use --help for usage information." in captured.out