import pytest import asyncio from app.services.scheduler import SchedulerService, ScheduleTask class TestSchedulerService: @pytest.fixture(autouse=True) def setup(self, mock_settings): self.service = SchedulerService() self.service.scheduled_tasks = {} @pytest.mark.asyncio async def test_add_schedule(self): task = ScheduleTask( id="schedule-1", name="Daily Task", cron="0 9 * * *", prompt="run daily task", enabled=True, ) result = await self.service.add_schedule(task) assert result.id == "schedule-1" assert result.name == "Daily Task" assert "schedule-1" in self.service.scheduled_tasks @pytest.mark.asyncio async def test_remove_schedule(self): task = ScheduleTask( id="schedule-1", name="Task to remove", cron="0 9 * * *", prompt="test", enabled=True, ) await self.service.add_schedule(task) result = await self.service.remove_schedule("schedule-1") assert result is True assert "schedule-1" not in self.service.scheduled_tasks @pytest.mark.asyncio async def test_remove_nonexistent_schedule(self): result = await self.service.remove_schedule("nonexistent") assert result is False @pytest.mark.asyncio async def test_list_schedules(self): task1 = ScheduleTask(id="s1", name="Task 1", cron="0 9 * * *", prompt="t1") task2 = ScheduleTask(id="s2", name="Task 2", cron="0 10 * * *", prompt="t2") await self.service.add_schedule(task1) await self.service.add_schedule(task2) schedules = await self.service.list_schedules() assert len(schedules) == 2 @pytest.mark.asyncio @pytest.mark.skip(reason="Requires event loop in test environment") async def test_start_and_shutdown(self): self.service.start() assert self.service.scheduler.running is True self.service.shutdown() assert self.service.scheduler.running is False