mirror of
https://github.com/johndoe6345789/docker-swarm-termina.git
synced 2026-04-24 21:55:13 +00:00
**Updated:** - Fixed imports in test_docker_client.py and test_utils.py - Updated patch decorators to target new module paths - Patches now target utils.docker_client instead of app **Test Status:** - Passing: 59/79 (75%) - Failing: 20/79 (remaining mostly websocket/exec tests) **Next:** - Fix remaining exec and websocket test patches - Add tests for new container_helpers module - Achieve 100% coverage https://claude.ai/code/session_011PzvkCnVrsatoxbY3HbGXz
94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
import pytest
|
|
from unittest.mock import MagicMock, patch
|
|
import docker
|
|
|
|
|
|
class TestDockerClient:
|
|
"""Test Docker client connection logic"""
|
|
|
|
@patch('docker.from_env')
|
|
def test_get_docker_client_success(self, mock_from_env):
|
|
"""Test successful Docker client connection"""
|
|
from utils.docker_client import get_docker_client
|
|
|
|
mock_client = MagicMock()
|
|
mock_client.ping.return_value = True
|
|
mock_from_env.return_value = mock_client
|
|
|
|
client = get_docker_client()
|
|
assert client is not None
|
|
mock_client.ping.assert_called_once()
|
|
|
|
@patch('docker.DockerClient')
|
|
@patch('docker.from_env')
|
|
def test_get_docker_client_fallback_to_socket(self, mock_from_env, mock_docker_client):
|
|
"""Test fallback to Unix socket when from_env fails"""
|
|
from utils.docker_client import get_docker_client
|
|
|
|
# Make from_env fail
|
|
mock_from_env.side_effect = Exception("Connection failed")
|
|
|
|
# Make socket connection succeed
|
|
mock_client = MagicMock()
|
|
mock_client.ping.return_value = True
|
|
mock_docker_client.return_value = mock_client
|
|
|
|
client = get_docker_client()
|
|
assert client is not None
|
|
mock_docker_client.assert_called_with(base_url='unix:///var/run/docker.sock')
|
|
|
|
@patch('docker.DockerClient')
|
|
@patch('docker.from_env')
|
|
def test_get_docker_client_all_methods_fail(self, mock_from_env, mock_docker_client):
|
|
"""Test when all Docker connection methods fail"""
|
|
from utils.docker_client import get_docker_client
|
|
|
|
# Make both methods fail
|
|
mock_from_env.side_effect = Exception("from_env failed")
|
|
mock_docker_client.side_effect = Exception("socket failed")
|
|
|
|
client = get_docker_client()
|
|
assert client is None
|
|
|
|
|
|
class TestFormatUptime:
|
|
"""Test uptime formatting edge cases"""
|
|
|
|
def test_format_uptime_zero_minutes(self):
|
|
"""Test formatting for containers just started"""
|
|
from utils.formatters import format_uptime
|
|
from datetime import datetime, timezone, timedelta
|
|
|
|
now = datetime.now(timezone.utc)
|
|
created_at = now - timedelta(seconds=30)
|
|
created_str = created_at.isoformat().replace('+00:00', 'Z')
|
|
|
|
result = format_uptime(created_str)
|
|
# Should show 0m
|
|
assert 'm' in result
|
|
|
|
def test_format_uptime_exactly_one_day(self):
|
|
"""Test formatting for exactly 1 day"""
|
|
from utils.formatters import format_uptime
|
|
from datetime import datetime, timezone, timedelta
|
|
|
|
now = datetime.now(timezone.utc)
|
|
created_at = now - timedelta(days=1)
|
|
created_str = created_at.isoformat().replace('+00:00', 'Z')
|
|
|
|
result = format_uptime(created_str)
|
|
assert '1d' in result
|
|
|
|
def test_format_uptime_many_days(self):
|
|
"""Test formatting for many days"""
|
|
from utils.formatters import format_uptime
|
|
from datetime import datetime, timezone, timedelta
|
|
|
|
now = datetime.now(timezone.utc)
|
|
created_at = now - timedelta(days=30, hours=5)
|
|
created_str = created_at.isoformat().replace('+00:00', 'Z')
|
|
|
|
result = format_uptime(created_str)
|
|
assert 'd' in result
|
|
assert 'h' in result
|