forked from genewildish/Mainline
86 lines
2.8 KiB
Python
86 lines
2.8 KiB
Python
"""
|
|
Tests for engine.controller module.
|
|
"""
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from engine import config
|
|
from engine.controller import StreamController
|
|
|
|
|
|
class TestStreamController:
|
|
"""Tests for StreamController class."""
|
|
|
|
def test_init_default_config(self):
|
|
"""StreamController initializes with default config."""
|
|
controller = StreamController()
|
|
assert controller.config is not None
|
|
assert isinstance(controller.config, config.Config)
|
|
|
|
def test_init_custom_config(self):
|
|
"""StreamController accepts custom config."""
|
|
custom_config = config.Config(headline_limit=500)
|
|
controller = StreamController(config=custom_config)
|
|
assert controller.config.headline_limit == 500
|
|
|
|
def test_init_sources_none_by_default(self):
|
|
"""Sources are None until initialized."""
|
|
controller = StreamController()
|
|
assert controller.mic is None
|
|
assert controller.ntfy is None
|
|
|
|
@patch("engine.controller.MicMonitor")
|
|
@patch("engine.controller.NtfyPoller")
|
|
def test_initialize_sources(self, mock_ntfy, mock_mic):
|
|
"""initialize_sources creates mic and ntfy instances."""
|
|
mock_mic_instance = MagicMock()
|
|
mock_mic_instance.available = True
|
|
mock_mic_instance.start.return_value = True
|
|
mock_mic.return_value = mock_mic_instance
|
|
|
|
mock_ntfy_instance = MagicMock()
|
|
mock_ntfy_instance.start.return_value = True
|
|
mock_ntfy.return_value = mock_ntfy_instance
|
|
|
|
controller = StreamController()
|
|
mic_ok, ntfy_ok = controller.initialize_sources()
|
|
|
|
assert mic_ok is True
|
|
assert ntfy_ok is True
|
|
assert controller.mic is not None
|
|
assert controller.ntfy is not None
|
|
|
|
@patch("engine.controller.MicMonitor")
|
|
@patch("engine.controller.NtfyPoller")
|
|
def test_initialize_sources_mic_unavailable(self, mock_ntfy, mock_mic):
|
|
"""initialize_sources handles unavailable mic."""
|
|
mock_mic_instance = MagicMock()
|
|
mock_mic_instance.available = False
|
|
mock_mic.return_value = mock_mic_instance
|
|
|
|
mock_ntfy_instance = MagicMock()
|
|
mock_ntfy_instance.start.return_value = True
|
|
mock_ntfy.return_value = mock_ntfy_instance
|
|
|
|
controller = StreamController()
|
|
mic_ok, ntfy_ok = controller.initialize_sources()
|
|
|
|
assert mic_ok is False
|
|
assert ntfy_ok is True
|
|
|
|
|
|
class TestStreamControllerCleanup:
|
|
"""Tests for StreamController cleanup."""
|
|
|
|
@patch("engine.controller.MicMonitor")
|
|
def test_cleanup_stops_mic(self, mock_mic):
|
|
"""cleanup stops the microphone if running."""
|
|
mock_mic_instance = MagicMock()
|
|
mock_mic.return_value = mock_mic_instance
|
|
|
|
controller = StreamController()
|
|
controller.mic = mock_mic_instance
|
|
controller.cleanup()
|
|
|
|
mock_mic_instance.stop.assert_called_once()
|