0rbix / tests /test_graph_analysis.py
nicolasleiva's picture
Initial commit: Add complete Orbix project
3dc2617
import unittest
import pandas as pd
import networkx as nx
from unittest.mock import patch, MagicMock
from src.graph_analysis import build_satellite_graph, analyze_graph
class TestGraphAnalysis(unittest.TestCase):
"""Pruebas unitarias para el módulo de análisis de grafos."""
def setUp(self):
"""Configuración inicial para las pruebas."""
# Datos de prueba
self.satellite_data = pd.DataFrame({
"satellite_id": [101, 102],
"feature": [0.5, 0.8]
})
self.debris_data = pd.DataFrame({
"debris_id": [201, 202],
"feature": [0.3, 0.7],
"x": [1000, 1050],
"y": [2000, 2050],
"z": [3000, 3050]
})
def test_build_satellite_graph_valid_data(self):
"""Prueba que el grafo se construya correctamente con datos válidos."""
# Construir el grafo
graph = build_satellite_graph(self.satellite_data, self.debris_data)
# Verificar que el grafo no es None
self.assertIsNotNone(graph)
# Verificar que el grafo tiene el número correcto de nodos
self.assertEqual(graph.number_of_nodes(), 4) # 2 satélites + 2 desechos
# Verificar que el grafo tiene el número correcto de aristas
self.assertEqual(graph.number_of_edges(), 2) # Mínimo entre len(satellite_data) y len(debris_data)
def test_build_satellite_graph_empty_data(self):
"""Prueba que el grafo maneje correctamente datos vacíos."""
# Datos de entrada vacíos
empty_satellite_data = pd.DataFrame()
empty_debris_data = pd.DataFrame()
# Construir el grafo con datos vacíos
graph = build_satellite_graph(empty_satellite_data, empty_debris_data)
# Verificar que el grafo es None
self.assertIsNone(graph)
@patch('src.graph_analysis.plt')
@patch('src.graph_analysis.nx.spring_layout')
def test_analyze_graph(self, mock_spring_layout, mock_plt):
"""Prueba que el análisis del grafo funcione correctamente."""
# Construir el grafo
graph = build_satellite_graph(self.satellite_data, self.debris_data)
# Configurar el mock para nx.spring_layout
mock_pos = {node: [0, 0] for node in range(4)}
mock_spring_layout.return_value = mock_pos
# Ejecutar la función
analyze_graph(graph)
# Verificar que se llamaron los métodos esperados
mock_plt.figure.assert_called_once()
mock_plt.title.assert_called_once()
mock_plt.show.assert_called_once()
def test_analyze_graph_none(self):
"""Prueba que el análisis maneje correctamente un grafo None."""
# Ejecutar la función con un grafo None
analyze_graph(None)
# No hay aserciones específicas, solo verificamos que no haya excepciones
if __name__ == '__main__':
unittest.main()