ipwatch
This commit is contained in:
123
tests/test_api.py
Executable file
123
tests/test_api.py
Executable file
@@ -0,0 +1,123 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user