69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
|
|
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
|