Reformat with black
This commit is contained in:
@@ -21,11 +21,7 @@ def run_tests(args=None):
|
||||
if args:
|
||||
cmd.extend(args)
|
||||
else:
|
||||
cmd.extend([
|
||||
"tests/",
|
||||
"-v",
|
||||
"--tb=short"
|
||||
])
|
||||
cmd.extend(["tests/", "-v", "--tb=short"])
|
||||
|
||||
try:
|
||||
result = subprocess.run(cmd, check=True)
|
||||
|
@@ -2,8 +2,9 @@
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Add the src directory to Python path
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
|
||||
|
||||
import pytest
|
||||
from unittest.mock import Mock, MagicMock
|
||||
@@ -28,7 +29,7 @@ def mock_monitors():
|
||||
"type": "http",
|
||||
"url": "https://example.com",
|
||||
"active": True,
|
||||
"parent": None
|
||||
"parent": None,
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
@@ -36,14 +37,14 @@ def mock_monitors():
|
||||
"type": "http",
|
||||
"url": "https://test.com",
|
||||
"active": False,
|
||||
"parent": None
|
||||
"parent": None,
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Group Monitor",
|
||||
"type": "group",
|
||||
"active": True,
|
||||
"parent": None
|
||||
"parent": None,
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
@@ -51,8 +52,8 @@ def mock_monitors():
|
||||
"type": "http",
|
||||
"url": "https://child.com",
|
||||
"active": False,
|
||||
"parent": 3
|
||||
}
|
||||
"parent": 3,
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
@@ -65,13 +66,13 @@ def mock_maintenances():
|
||||
"title": "Test Maintenance",
|
||||
"description": "Test maintenance description",
|
||||
"strategy": "single",
|
||||
"active": True
|
||||
"active": True,
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "Inactive Maintenance",
|
||||
"description": "Inactive maintenance description",
|
||||
"strategy": "single",
|
||||
"active": False
|
||||
}
|
||||
"active": False,
|
||||
},
|
||||
]
|
@@ -21,7 +21,7 @@ class TestCLIIntegration:
|
||||
|
||||
# Verify parser is created
|
||||
assert monitor_parser is not None
|
||||
assert hasattr(setup_monitor_parser, '_parser')
|
||||
assert hasattr(setup_monitor_parser, "_parser")
|
||||
|
||||
def test_maintenance_parser_setup(self):
|
||||
"""Test maintenance parser setup"""
|
||||
@@ -32,7 +32,7 @@ class TestCLIIntegration:
|
||||
|
||||
# Verify parser is created
|
||||
assert maintenance_parser is not None
|
||||
assert hasattr(setup_maintenance_parser, '_parser')
|
||||
assert hasattr(setup_maintenance_parser, "_parser")
|
||||
|
||||
def test_info_parser_setup(self):
|
||||
"""Test info parser setup"""
|
||||
@@ -137,7 +137,9 @@ class TestArgumentParsing:
|
||||
setup_monitor_parser(subparsers)
|
||||
|
||||
# Test with monitor patterns
|
||||
args = parser.parse_args(["monitor", "list", "--monitor", "web*", "--monitor", "api*"])
|
||||
args = parser.parse_args(
|
||||
["monitor", "list", "--monitor", "web*", "--monitor", "api*"]
|
||||
)
|
||||
assert args.resource == "monitor"
|
||||
assert args.monitor_action == "list"
|
||||
assert args.monitor == ["web*", "api*"]
|
||||
@@ -173,13 +175,20 @@ class TestArgumentParsing:
|
||||
setup_maintenance_parser(subparsers)
|
||||
|
||||
# Test maintenance add
|
||||
args = parser.parse_args([
|
||||
"maintenance", "add",
|
||||
"--title", "Server Update",
|
||||
"--description", "Updating server software",
|
||||
"--duration", "2h",
|
||||
"--monitor", "server*"
|
||||
])
|
||||
args = parser.parse_args(
|
||||
[
|
||||
"maintenance",
|
||||
"add",
|
||||
"--title",
|
||||
"Server Update",
|
||||
"--description",
|
||||
"Updating server software",
|
||||
"--duration",
|
||||
"2h",
|
||||
"--monitor",
|
||||
"server*",
|
||||
]
|
||||
)
|
||||
assert args.resource == "maintenance"
|
||||
assert args.maintenance_action == "add"
|
||||
assert args.title == "Server Update"
|
||||
@@ -234,7 +243,10 @@ class TestErrorHandling:
|
||||
# Verify error handling
|
||||
assert result is True # Command completes even with no matches
|
||||
captured = capsys.readouterr()
|
||||
assert "Error: No monitors found matching the specified patterns or groups" in captured.out
|
||||
assert (
|
||||
"Error: No monitors found matching the specified patterns or groups"
|
||||
in captured.out
|
||||
)
|
||||
|
||||
def test_maintenance_command_resilience(self, mock_client, capsys):
|
||||
"""Test maintenance command handles API errors"""
|
||||
|
@@ -113,7 +113,7 @@ class TestKumaClient:
|
||||
{"id": 1, "name": "Web Server"},
|
||||
{"id": 2, "name": "API Server"},
|
||||
{"id": 3, "name": "Database"},
|
||||
{"id": 4, "name": "Web Frontend"}
|
||||
{"id": 4, "name": "Web Frontend"},
|
||||
]
|
||||
client.api.get_monitors.return_value = mock_monitors
|
||||
|
||||
@@ -136,7 +136,7 @@ class TestKumaClient:
|
||||
|
||||
mock_monitors = [
|
||||
{"id": 1, "name": "Web Server"},
|
||||
{"id": 2, "name": "API Server"}
|
||||
{"id": 2, "name": "API Server"},
|
||||
]
|
||||
client.api.get_monitors.return_value = mock_monitors
|
||||
|
||||
@@ -150,9 +150,7 @@ class TestKumaClient:
|
||||
client = KumaClient("http://test.com")
|
||||
client.api = Mock()
|
||||
|
||||
mock_monitors = [
|
||||
{"id": 1, "name": "Web Server"}
|
||||
]
|
||||
mock_monitors = [{"id": 1, "name": "Web Server"}]
|
||||
client.api.get_monitors.return_value = mock_monitors
|
||||
|
||||
result = client.find_monitors_by_pattern(["Database*"])
|
||||
@@ -163,9 +161,7 @@ class TestKumaClient:
|
||||
client = KumaClient("http://test.com")
|
||||
client.api = Mock()
|
||||
|
||||
mock_monitors = [
|
||||
{"id": 1, "name": "Web Server"}
|
||||
]
|
||||
mock_monitors = [{"id": 1, "name": "Web Server"}]
|
||||
client.api.get_monitors.return_value = mock_monitors
|
||||
|
||||
# Same monitor should match both patterns
|
||||
@@ -186,7 +182,7 @@ class TestKumaClient:
|
||||
captured = capsys.readouterr()
|
||||
assert "Error finding monitors: API Error" in captured.out
|
||||
|
||||
@patch('kumacli.client.UptimeKumaApi')
|
||||
@patch("kumacli.client.UptimeKumaApi")
|
||||
def test_connect_success(self, mock_api_class, capsys):
|
||||
"""Test successful connection"""
|
||||
mock_api = Mock()
|
||||
@@ -204,7 +200,7 @@ class TestKumaClient:
|
||||
captured = capsys.readouterr()
|
||||
assert "Connected to http://test.com" in captured.out
|
||||
|
||||
@patch('kumacli.client.UptimeKumaApi')
|
||||
@patch("kumacli.client.UptimeKumaApi")
|
||||
def test_connect_failure(self, mock_api_class, capsys):
|
||||
"""Test connection failure"""
|
||||
mock_api_class.side_effect = Exception("Connection failed")
|
||||
|
@@ -15,7 +15,7 @@ class TestInfoCommands:
|
||||
mock_info_data = {
|
||||
"version": "1.23.0",
|
||||
"hostname": "kuma-server",
|
||||
"primaryBaseURL": "https://status.example.com"
|
||||
"primaryBaseURL": "https://status.example.com",
|
||||
}
|
||||
mock_client.api.info.return_value = mock_info_data
|
||||
|
||||
|
@@ -60,7 +60,9 @@ class TestMaintenanceCommands:
|
||||
# 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"}
|
||||
mock_client.api.delete_maintenance.return_value = {
|
||||
"msg": "Deleted Successfully"
|
||||
}
|
||||
|
||||
maintenance_commands = MaintenanceCommands(mock_client)
|
||||
|
||||
@@ -71,13 +73,18 @@ class TestMaintenanceCommands:
|
||||
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
|
||||
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"}
|
||||
mock_client.api.delete_maintenance.return_value = {
|
||||
"msg": "Deleted Successfully"
|
||||
}
|
||||
|
||||
maintenance_commands = MaintenanceCommands(mock_client)
|
||||
|
||||
@@ -99,7 +106,10 @@ class TestMaintenanceCommands:
|
||||
|
||||
# Verify
|
||||
captured = capsys.readouterr()
|
||||
assert "Error: Either --id or --all flag is required for delete operation" in captured.out
|
||||
assert (
|
||||
"Error: Either --id or --all flag is required for delete operation"
|
||||
in captured.out
|
||||
)
|
||||
|
||||
|
||||
class TestMaintenanceCommandHandler:
|
||||
@@ -110,7 +120,7 @@ class TestMaintenanceCommandHandler:
|
||||
mock_args.maintenance_action = None
|
||||
|
||||
# Mock the parser setup
|
||||
with patch('kumacli.cmd.maintenance.setup_maintenance_parser') as mock_setup:
|
||||
with patch("kumacli.cmd.maintenance.setup_maintenance_parser") as mock_setup:
|
||||
mock_parser = Mock()
|
||||
mock_setup._parser = mock_parser
|
||||
|
||||
@@ -144,7 +154,9 @@ class TestMaintenanceCommandHandler:
|
||||
|
||||
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"}
|
||||
mock_client.api.delete_maintenance.return_value = {
|
||||
"msg": "Deleted Successfully"
|
||||
}
|
||||
|
||||
# Execute
|
||||
result = handle_maintenance_command(mock_args, mock_client)
|
||||
@@ -165,4 +177,7 @@ class TestMaintenanceCommandHandler:
|
||||
# Verify
|
||||
assert result is False
|
||||
captured = capsys.readouterr()
|
||||
assert "Unknown maintenance action. Use --help for usage information." in captured.out
|
||||
assert (
|
||||
"Unknown maintenance action. Use --help for usage information."
|
||||
in captured.out
|
||||
)
|
||||
|
@@ -5,7 +5,11 @@ from unittest.mock import Mock, patch
|
||||
from io import StringIO
|
||||
import sys
|
||||
|
||||
from kumacli.cmd.monitor import MonitorCommands, handle_monitor_command, setup_monitor_parser
|
||||
from kumacli.cmd.monitor import (
|
||||
MonitorCommands,
|
||||
handle_monitor_command,
|
||||
setup_monitor_parser,
|
||||
)
|
||||
|
||||
|
||||
class TestMonitorCommands:
|
||||
@@ -15,7 +19,7 @@ class TestMonitorCommands:
|
||||
mock_client.api.get_monitors.return_value = mock_monitors
|
||||
mock_client.find_monitors_by_pattern.return_value = [
|
||||
{"id": 1, "name": "Test Monitor 1"},
|
||||
{"id": 2, "name": "Test Monitor 2"}
|
||||
{"id": 2, "name": "Test Monitor 2"},
|
||||
]
|
||||
mock_client.api.pause_monitor.return_value = {"msg": "Paused Successfully."}
|
||||
|
||||
@@ -80,7 +84,10 @@ class TestMonitorCommands:
|
||||
|
||||
# Verify
|
||||
captured = capsys.readouterr()
|
||||
assert "Error: No monitors found matching the specified patterns or groups" in captured.out
|
||||
assert (
|
||||
"Error: No monitors found matching the specified patterns or groups"
|
||||
in captured.out
|
||||
)
|
||||
|
||||
def test_pause_monitors_api_error(self, mock_client, capsys):
|
||||
"""Test pausing monitors with API error"""
|
||||
@@ -144,9 +151,7 @@ class TestMonitorCommands:
|
||||
def test_resume_monitors_all_no_paused(self, mock_client, capsys):
|
||||
"""Test resuming all paused monitors when none are paused"""
|
||||
# Setup
|
||||
active_monitors = [
|
||||
{"id": 1, "name": "Active Monitor", "active": True}
|
||||
]
|
||||
active_monitors = [{"id": 1, "name": "Active Monitor", "active": True}]
|
||||
mock_client.api.get_monitors.return_value = active_monitors
|
||||
|
||||
monitor_commands = MonitorCommands(mock_client)
|
||||
@@ -167,7 +172,10 @@ class TestMonitorCommands:
|
||||
|
||||
# Verify
|
||||
captured = capsys.readouterr()
|
||||
assert "Error: Either --monitor, --group, or --all flag is required." in captured.out
|
||||
assert (
|
||||
"Error: Either --monitor, --group, or --all flag is required."
|
||||
in captured.out
|
||||
)
|
||||
|
||||
|
||||
class TestMonitorCommandHandler:
|
||||
@@ -178,7 +186,7 @@ class TestMonitorCommandHandler:
|
||||
mock_args.monitor_action = None
|
||||
|
||||
# Mock the parser setup to avoid importing issues
|
||||
with patch('kumacli.cmd.monitor.setup_monitor_parser') as mock_setup:
|
||||
with patch("kumacli.cmd.monitor.setup_monitor_parser") as mock_setup:
|
||||
mock_parser = Mock()
|
||||
mock_setup._parser = mock_parser
|
||||
|
||||
@@ -261,4 +269,6 @@ class TestMonitorCommandHandler:
|
||||
# Verify
|
||||
assert result is False
|
||||
captured = capsys.readouterr()
|
||||
assert "Unknown monitor action. Use --help for usage information." in captured.out
|
||||
assert (
|
||||
"Unknown monitor action. Use --help for usage information." in captured.out
|
||||
)
|
||||
|
Reference in New Issue
Block a user