135 lines
3.6 KiB
Python
Executable File
135 lines
3.6 KiB
Python
Executable File
"""
|
|
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
|