generated from unai/python_boilerplate
Add unit tests for all modules including config, main, playlist, and server
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user