ipwatch
This commit is contained in:
134
tests/test_models.py
Executable file
134
tests/test_models.py
Executable file
@@ -0,0 +1,134 @@
|
||||
"""
|
||||
Tests pour les modèles SQLAlchemy
|
||||
"""
|
||||
import pytest
|
||||
from datetime import datetime
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from backend.app.core.database import Base
|
||||
from backend.app.models.ip import IP, IPHistory
|
||||
|
||||
|
||||
class TestSQLAlchemyModels:
|
||||
"""Tests pour les modèles de données"""
|
||||
|
||||
@pytest.fixture
|
||||
def db_session(self):
|
||||
"""Fixture session DB en mémoire"""
|
||||
# Créer une DB SQLite en mémoire
|
||||
engine = create_engine("sqlite:///:memory:")
|
||||
Base.metadata.create_all(engine)
|
||||
|
||||
Session = sessionmaker(bind=engine)
|
||||
session = Session()
|
||||
|
||||
yield session
|
||||
|
||||
session.close()
|
||||
|
||||
def test_create_ip(self, db_session):
|
||||
"""Test création d'une IP"""
|
||||
ip = IP(
|
||||
ip="192.168.1.100",
|
||||
name="Test Server",
|
||||
known=True,
|
||||
location="Bureau",
|
||||
host="Serveur",
|
||||
last_status="online",
|
||||
mac="00:11:22:33:44:55",
|
||||
vendor="Dell",
|
||||
open_ports=[22, 80, 443]
|
||||
)
|
||||
|
||||
db_session.add(ip)
|
||||
db_session.commit()
|
||||
|
||||
# Vérifier la création
|
||||
retrieved = db_session.query(IP).filter(IP.ip == "192.168.1.100").first()
|
||||
assert retrieved is not None
|
||||
assert retrieved.name == "Test Server"
|
||||
assert retrieved.known is True
|
||||
assert retrieved.last_status == "online"
|
||||
assert len(retrieved.open_ports) == 3
|
||||
|
||||
def test_create_ip_history(self, db_session):
|
||||
"""Test création d'historique IP"""
|
||||
# Créer d'abord une IP
|
||||
ip = IP(
|
||||
ip="192.168.1.101",
|
||||
last_status="online"
|
||||
)
|
||||
db_session.add(ip)
|
||||
db_session.commit()
|
||||
|
||||
# Créer entrée historique
|
||||
history = IPHistory(
|
||||
ip="192.168.1.101",
|
||||
timestamp=datetime.now(),
|
||||
status="online",
|
||||
open_ports=[80, 443]
|
||||
)
|
||||
|
||||
db_session.add(history)
|
||||
db_session.commit()
|
||||
|
||||
# Vérifier
|
||||
retrieved = db_session.query(IPHistory).filter(
|
||||
IPHistory.ip == "192.168.1.101"
|
||||
).first()
|
||||
|
||||
assert retrieved is not None
|
||||
assert retrieved.status == "online"
|
||||
assert len(retrieved.open_ports) == 2
|
||||
|
||||
def test_ip_history_relationship(self, db_session):
|
||||
"""Test relation IP <-> IPHistory"""
|
||||
# Créer une IP
|
||||
ip = IP(
|
||||
ip="192.168.1.102",
|
||||
last_status="online"
|
||||
)
|
||||
db_session.add(ip)
|
||||
db_session.commit()
|
||||
|
||||
# Créer plusieurs entrées historiques
|
||||
for i in range(5):
|
||||
history = IPHistory(
|
||||
ip="192.168.1.102",
|
||||
status="online" if i % 2 == 0 else "offline",
|
||||
open_ports=[]
|
||||
)
|
||||
db_session.add(history)
|
||||
|
||||
db_session.commit()
|
||||
|
||||
# Vérifier la relation
|
||||
ip = db_session.query(IP).filter(IP.ip == "192.168.1.102").first()
|
||||
assert len(ip.history) == 5
|
||||
|
||||
def test_cascade_delete(self, db_session):
|
||||
"""Test suppression en cascade"""
|
||||
# Créer IP + historique
|
||||
ip = IP(ip="192.168.1.103", last_status="online")
|
||||
db_session.add(ip)
|
||||
db_session.commit()
|
||||
|
||||
history = IPHistory(
|
||||
ip="192.168.1.103",
|
||||
status="online",
|
||||
open_ports=[]
|
||||
)
|
||||
db_session.add(history)
|
||||
db_session.commit()
|
||||
|
||||
# Supprimer l'IP
|
||||
db_session.delete(ip)
|
||||
db_session.commit()
|
||||
|
||||
# Vérifier que l'historique est supprimé aussi
|
||||
history_count = db_session.query(IPHistory).filter(
|
||||
IPHistory.ip == "192.168.1.103"
|
||||
).count()
|
||||
|
||||
assert history_count == 0
|
||||
Reference in New Issue
Block a user