124 lines
3.4 KiB
Python
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
|