55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
"""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()
|
|
|