File size: 2,990 Bytes
3dc2617
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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()