Files
LANMap/tests/test_api.py
2025-12-06 12:28:55 +01:00

124 lines
3.4 KiB
Python

"""
Tests pour les endpoints API
"""
import pytest
from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from backend.app.main import app
from backend.app.core.database import Base, get_db
from backend.app.models.ip import IP
# Setup DB de test
@pytest.fixture
def test_db():
"""Fixture base de données de test"""
engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(engine)
TestingSessionLocal = sessionmaker(bind=engine)
return TestingSessionLocal
@pytest.fixture
def client(test_db):
"""Fixture client de test"""
def override_get_db():
db = test_db()
try:
yield db
finally:
db.close()
app.dependency_overrides[get_db] = override_get_db
return TestClient(app)
class TestAPIEndpoints:
"""Tests pour les endpoints API"""
def test_root_endpoint(self, client):
"""Test endpoint racine"""
response = client.get("/")
assert response.status_code == 200
data = response.json()
assert "name" in data
assert data["name"] == "IPWatch API"
def test_health_check(self, client):
"""Test health check"""
response = client.get("/health")
assert response.status_code == 200
data = response.json()
assert "status" in data
assert data["status"] == "healthy"
def test_get_all_ips_empty(self, client):
"""Test récupération IPs (vide)"""
response = client.get("/api/ips/")
assert response.status_code == 200
data = response.json()
assert isinstance(data, list)
assert len(data) == 0
def test_get_stats_empty(self, client):
"""Test stats avec DB vide"""
response = client.get("/api/ips/stats/summary")
assert response.status_code == 200
data = response.json()
assert data["total"] == 0
assert data["online"] == 0
assert data["offline"] == 0
def test_get_ip_not_found(self, client):
"""Test récupération IP inexistante"""
response = client.get("/api/ips/192.168.1.100")
assert response.status_code == 404
def test_update_ip(self, client, test_db):
"""Test mise à jour IP"""
# Créer d'abord une IP
db = test_db()
ip = IP(
ip="192.168.1.100",
name="Test",
known=False,
last_status="online"
)
db.add(ip)
db.commit()
db.close()
# Mettre à jour via API
update_data = {
"name": "Updated Name",
"known": True,
"location": "Bureau"
}
response = client.put("/api/ips/192.168.1.100", json=update_data)
assert response.status_code == 200
data = response.json()
assert data["name"] == "Updated Name"
assert data["known"] is True
assert data["location"] == "Bureau"
def test_delete_ip(self, client, test_db):
"""Test suppression IP"""
# Créer une IP
db = test_db()
ip = IP(ip="192.168.1.101", last_status="online")
db.add(ip)
db.commit()
db.close()
# Supprimer via API
response = client.delete("/api/ips/192.168.1.101")
assert response.status_code == 200
# Vérifier suppression
response = client.get("/api/ips/192.168.1.101")
assert response.status_code == 404