generated from unai/python_boilerplate
182 lines
7.5 KiB
Python
182 lines
7.5 KiB
Python
"""Tests unitarios para el módulo main."""
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
|
|
class TestMain:
|
|
"""Tests para la función main."""
|
|
|
|
# ========================================
|
|
# Tests para main - Complejidad Baja
|
|
# Path 1: Orquestación correcta de componentes
|
|
# ========================================
|
|
|
|
def test_main_creates_playlist_manager(self):
|
|
"""Test: main crea una instancia de PlaylistManager."""
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager") as mock_manager_class:
|
|
mock_manager = MagicMock()
|
|
mock_manager_class.return_value = mock_manager
|
|
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server"):
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
mock_manager_class.assert_called_once()
|
|
|
|
def test_main_starts_updater_thread(self):
|
|
"""Test: main inicia el hilo de actualización."""
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager") as mock_manager_class:
|
|
mock_manager = MagicMock()
|
|
mock_manager_class.return_value = mock_manager
|
|
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server"):
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
mock_thread.assert_called_once()
|
|
mock_thread_instance.start.assert_called_once()
|
|
|
|
def test_main_thread_is_daemon(self):
|
|
"""Test: main crea el hilo como daemon."""
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager") as mock_manager_class:
|
|
mock_manager = MagicMock()
|
|
mock_manager_class.return_value = mock_manager
|
|
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server"):
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
# Verificar que daemon=True
|
|
call_kwargs = mock_thread.call_args[1]
|
|
assert call_kwargs["daemon"] is True
|
|
|
|
def test_main_thread_targets_manager_loop(self):
|
|
"""Test: main configura el hilo con target=manager.loop."""
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager") as mock_manager_class:
|
|
mock_manager = MagicMock()
|
|
mock_manager_class.return_value = mock_manager
|
|
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server"):
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
# Verificar que target es manager.loop
|
|
call_kwargs = mock_thread.call_args[1]
|
|
assert call_kwargs["target"] == mock_manager.loop
|
|
|
|
def test_main_thread_has_correct_name(self):
|
|
"""Test: main nombra el hilo como UpdaterThread."""
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager") as mock_manager_class:
|
|
mock_manager = MagicMock()
|
|
mock_manager_class.return_value = mock_manager
|
|
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server"):
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
call_kwargs = mock_thread.call_args[1]
|
|
assert call_kwargs["name"] == "UpdaterThread"
|
|
|
|
def test_main_runs_server(self):
|
|
"""Test: main ejecuta run_server."""
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager"):
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server") as mock_run_server:
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
mock_run_server.assert_called_once()
|
|
|
|
def test_main_starts_thread_before_server(self):
|
|
"""Test: main inicia el hilo antes de ejecutar el servidor."""
|
|
call_order = []
|
|
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager"):
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread_instance.start.side_effect = lambda: call_order.append(
|
|
"thread_start"
|
|
)
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server") as mock_run_server:
|
|
mock_run_server.side_effect = lambda: call_order.append(
|
|
"run_server"
|
|
)
|
|
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
assert call_order == ["thread_start", "run_server"]
|
|
|
|
def test_main_logs_startup_info(self, caplog):
|
|
"""Test: main registra información de inicio."""
|
|
import logging
|
|
|
|
with patch("m3u_list_builder.main.settings") as mock_settings:
|
|
mock_settings.host = "http://test-host.com"
|
|
|
|
with patch("m3u_list_builder.main.PlaylistManager"):
|
|
with patch("m3u_list_builder.main.threading.Thread") as mock_thread:
|
|
mock_thread_instance = MagicMock()
|
|
mock_thread.return_value = mock_thread_instance
|
|
|
|
with patch("m3u_list_builder.main.run_server"):
|
|
with caplog.at_level(logging.INFO):
|
|
from m3u_list_builder.main import main
|
|
|
|
main()
|
|
|
|
# Puede que el log se capture dependiendo del setup
|