Some checks failed
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled
167 lines
6.4 KiB
Python
167 lines
6.4 KiB
Python
"""
|
|
Tests pour les routes de logs serveur.
|
|
|
|
Couvre:
|
|
- GET /api/server/logs (console et db)
|
|
"""
|
|
|
|
import pytest
|
|
from unittest.mock import patch, MagicMock, AsyncMock
|
|
from httpx import AsyncClient
|
|
|
|
pytestmark = [pytest.mark.unit, pytest.mark.asyncio]
|
|
|
|
|
|
class TestGetServerLogsConsole:
|
|
"""Tests pour GET /api/server/logs avec source console."""
|
|
|
|
async def test_get_console_logs_default(self, client: AsyncClient):
|
|
"""Récupère les logs console par défaut."""
|
|
mock_logs = [
|
|
{"timestamp": "2025-01-15T10:00:00", "level": "INFO", "message": "Test log 1"},
|
|
{"timestamp": "2025-01-15T10:01:00", "level": "DEBUG", "message": "Test log 2"},
|
|
]
|
|
|
|
with patch("app.routes.server.console_log_service") as mock_service:
|
|
mock_service.get_logs.return_value = mock_logs
|
|
mock_service.get_count.return_value = 2
|
|
|
|
response = await client.get("/api/server/logs")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["source"] == "console"
|
|
assert data["count"] == 2
|
|
assert len(data["logs"]) == 2
|
|
assert data["limit"] == 500
|
|
assert data["offset"] == 0
|
|
|
|
async def test_get_console_logs_with_pagination(self, client: AsyncClient):
|
|
"""Récupère les logs console avec pagination."""
|
|
with patch("app.routes.server.console_log_service") as mock_service:
|
|
mock_service.get_logs.return_value = []
|
|
mock_service.get_count.return_value = 100
|
|
|
|
response = await client.get("/api/server/logs?limit=10&offset=20")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["limit"] == 10
|
|
assert data["offset"] == 20
|
|
mock_service.get_logs.assert_called_once_with(limit=10, offset=20, level=None)
|
|
|
|
async def test_get_console_logs_with_level_filter(self, client: AsyncClient):
|
|
"""Récupère les logs console avec filtre de niveau."""
|
|
mock_logs = [
|
|
{"timestamp": "2025-01-15T10:00:00", "level": "ERROR", "message": "Error log"},
|
|
]
|
|
|
|
with patch("app.routes.server.console_log_service") as mock_service:
|
|
mock_service.get_logs.return_value = mock_logs
|
|
mock_service.get_count.return_value = 1
|
|
|
|
response = await client.get("/api/server/logs?level=ERROR")
|
|
|
|
assert response.status_code == 200
|
|
mock_service.get_logs.assert_called_once_with(limit=500, offset=0, level="ERROR")
|
|
|
|
async def test_get_console_logs_explicit_source(self, client: AsyncClient):
|
|
"""Récupère les logs console avec source explicite."""
|
|
with patch("app.routes.server.console_log_service") as mock_service:
|
|
mock_service.get_logs.return_value = []
|
|
mock_service.get_count.return_value = 0
|
|
|
|
response = await client.get("/api/server/logs?log_source=console")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["source"] == "console"
|
|
|
|
|
|
class TestGetServerLogsDB:
|
|
"""Tests pour GET /api/server/logs avec source db."""
|
|
|
|
async def test_get_db_logs(self, client: AsyncClient, db_session):
|
|
"""Récupère les logs depuis la base de données."""
|
|
response = await client.get("/api/server/logs?log_source=db")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["source"] == "db"
|
|
assert "logs" in data
|
|
assert "count" in data
|
|
|
|
async def test_get_db_logs_with_pagination(self, client: AsyncClient, db_session):
|
|
"""Récupère les logs DB avec pagination."""
|
|
response = await client.get("/api/server/logs?log_source=db&limit=5&offset=10")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["limit"] == 5
|
|
assert data["offset"] == 10
|
|
|
|
async def test_get_db_logs_with_level_filter(self, client: AsyncClient, db_session):
|
|
"""Récupère les logs DB avec filtre de niveau."""
|
|
response = await client.get("/api/server/logs?log_source=db&level=ERROR")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["source"] == "db"
|
|
|
|
async def test_get_db_logs_with_source_filter(self, client: AsyncClient, db_session):
|
|
"""Récupère les logs DB avec filtre de source."""
|
|
response = await client.get("/api/server/logs?log_source=db&source=ansible")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["source"] == "db"
|
|
|
|
async def test_get_db_logs_with_all_filters(self, client: AsyncClient, db_session):
|
|
"""Récupère les logs DB avec tous les filtres."""
|
|
response = await client.get(
|
|
"/api/server/logs?log_source=db&level=WARN&source=scheduler&limit=20&offset=5"
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["source"] == "db"
|
|
assert data["limit"] == 20
|
|
assert data["offset"] == 5
|
|
|
|
|
|
class TestServerLogsResponseStructure:
|
|
"""Tests pour la structure des réponses de logs."""
|
|
|
|
async def test_console_logs_response_structure(self, client: AsyncClient):
|
|
"""Vérifie la structure de la réponse pour les logs console."""
|
|
mock_logs = [
|
|
{"timestamp": "2025-01-15T10:00:00", "level": "INFO", "message": "Test"},
|
|
]
|
|
|
|
with patch("app.routes.server.console_log_service") as mock_service:
|
|
mock_service.get_logs.return_value = mock_logs
|
|
mock_service.get_count.return_value = 1
|
|
|
|
response = await client.get("/api/server/logs")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "logs" in data
|
|
assert "count" in data
|
|
assert "limit" in data
|
|
assert "offset" in data
|
|
assert "source" in data
|
|
|
|
async def test_db_logs_response_structure(self, client: AsyncClient, db_session):
|
|
"""Vérifie la structure de la réponse pour les logs DB."""
|
|
response = await client.get("/api/server/logs?log_source=db")
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "logs" in data
|
|
assert "count" in data
|
|
assert "limit" in data
|
|
assert "offset" in data
|
|
assert "source" in data
|
|
assert data["source"] == "db"
|