"""Tests for scheduler service.""" from unittest.mock import AsyncMock, patch import pytest from sqlmodel.ext.asyncio.session import AsyncSession from app.services.scheduler import SchedulerService class TestSchedulerService: """Test scheduler service functionality.""" @pytest.fixture def mock_db_session_factory(self): """Create a mock database session factory.""" session = AsyncMock(spec=AsyncSession) return lambda: session @pytest.fixture def scheduler_service(self, mock_db_session_factory): """Create a scheduler service instance for testing.""" from unittest.mock import MagicMock mock_player_service = MagicMock() return SchedulerService(mock_db_session_factory, mock_player_service) @pytest.mark.asyncio async def test_start_scheduler(self, scheduler_service) -> None: """Test starting the scheduler service.""" with ( patch.object(scheduler_service.scheduler, "add_job") as mock_add_job, patch.object(scheduler_service.scheduler, "start") as mock_start, ): await scheduler_service.start() # Verify scheduler start was called mock_start.assert_called_once() # Verify jobs were added (2 calls: initialize_system_tasks and scheduler_maintenance) assert mock_add_job.call_count == 2 # Check that the jobs are the expected ones calls = mock_add_job.call_args_list job_ids = [call[1]["id"] for call in calls] assert "initialize_system_tasks" in job_ids assert "scheduler_maintenance" in job_ids @pytest.mark.asyncio async def test_stop_scheduler(self, scheduler_service) -> None: """Test stopping the scheduler service.""" with patch.object(scheduler_service.scheduler, "shutdown") as mock_shutdown: await scheduler_service.stop() mock_shutdown.assert_called_once()