File size: 2,844 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
import unittest
import numpy as np
import pandas as pd
from unittest.mock import patch, MagicMock
from src.optimization import OrbitalPathOptimizer

class TestOptimization(unittest.TestCase):
    """Pruebas unitarias para el m贸dulo de optimizaci贸n de rutas orbitales."""
    
    def setUp(self):
        """Configuraci贸n inicial para las pruebas."""
        self.optimizer = OrbitalPathOptimizer()
        
        # Datos de prueba
        self.satellite_state = {"position": (1000.0, 2000.0, 3000.0)}
        self.debris_data = pd.DataFrame({
            "debris_id": [101, 102, 103],
            "x": [1100.0, 1200.0, 1300.0],
            "y": [2100.0, 2200.0, 2300.0],
            "z": [3100.0, 3200.0, 3300.0]
        })
    
    @patch('src.optimization.pywrapcp.RoutingModel.SolveWithParameters')
    def test_optimize_route_success(self, mock_solve):
        """Prueba que la optimizaci贸n de ruta funcione correctamente."""
        # Configurar el mock para simular una soluci贸n exitosa
        mock_solution = MagicMock()
        mock_solve.return_value = mock_solution
        
        # Configurar el comportamiento del mock para simular una ruta
        mock_solution.Value.return_value = 1  # Simular el siguiente nodo
        
        # Parchear el m茅todo IsEnd para controlar el flujo del bucle
        with patch('src.optimization.pywrapcp.RoutingModel.IsEnd', side_effect=[False, False, False, True]):
            # Parchear IndexToNode para simular los 铆ndices de nodos
            with patch('src.optimization.pywrapcp.RoutingIndexManager.IndexToNode', side_effect=[0, 1, 2, 3]):
                # Ejecutar la funci贸n
                result = self.optimizer.optimize_route(self.satellite_state, self.debris_data)
                
                # Verificar el resultado
                self.assertEqual(len(result), 2)  # Deber铆a haber 2 puntos en la ruta (omitiendo el nodo inicial)
    
    def test_optimize_route_empty_data(self):
        """Prueba que la optimizaci贸n maneje correctamente datos vac铆os."""
        # Datos de entrada vac铆os
        empty_debris_data = pd.DataFrame()
        
        # Ejecutar la funci贸n
        result = self.optimizer.optimize_route(self.satellite_state, empty_debris_data)
        
        # Verificar que se devuelve una lista vac铆a
        self.assertEqual(result, [])
    
    def test_optimize_route_missing_position(self):
        """Prueba que la optimizaci贸n maneje correctamente un estado sin posici贸n."""
        # Estado sin posici贸n
        invalid_state = {"velocity": (1.0, 2.0, 3.0)}
        
        # Ejecutar la funci贸n
        result = self.optimizer.optimize_route(invalid_state, self.debris_data)
        
        # Verificar que se devuelve una lista vac铆a
        self.assertEqual(result, [])

if __name__ == '__main__':
    unittest.main()