mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 05:12:26 +00:00
139 lines
4.3 KiB
Python
139 lines
4.3 KiB
Python
"""Tests for scheduler MCP tools."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from openjarvis.scheduler.scheduler import ScheduledTask
|
|
from openjarvis.scheduler.tools import (
|
|
CancelScheduledTaskTool,
|
|
ListScheduledTasksTool,
|
|
PauseScheduledTaskTool,
|
|
ResumeScheduledTaskTool,
|
|
ScheduleTaskTool,
|
|
)
|
|
|
|
# -- Spec correctness --------------------------------------------------------
|
|
|
|
|
|
class TestToolSpecs:
|
|
def test_schedule_task_spec(self):
|
|
tool = ScheduleTaskTool()
|
|
assert tool.spec.name == "schedule_task"
|
|
assert "prompt" in tool.spec.parameters["properties"]
|
|
assert "schedule_type" in tool.spec.parameters["properties"]
|
|
|
|
def test_list_spec(self):
|
|
tool = ListScheduledTasksTool()
|
|
assert tool.spec.name == "list_scheduled_tasks"
|
|
|
|
def test_pause_spec(self):
|
|
tool = PauseScheduledTaskTool()
|
|
assert tool.spec.name == "pause_scheduled_task"
|
|
|
|
def test_resume_spec(self):
|
|
tool = ResumeScheduledTaskTool()
|
|
assert tool.spec.name == "resume_scheduled_task"
|
|
|
|
def test_cancel_spec(self):
|
|
tool = CancelScheduledTaskTool()
|
|
assert tool.spec.name == "cancel_scheduled_task"
|
|
|
|
def test_all_tools_have_scheduler_category(self):
|
|
for cls in [
|
|
ScheduleTaskTool,
|
|
ListScheduledTasksTool,
|
|
PauseScheduledTaskTool,
|
|
ResumeScheduledTaskTool,
|
|
CancelScheduledTaskTool,
|
|
]:
|
|
assert cls().spec.category == "scheduler"
|
|
|
|
|
|
# -- Scheduler not available --------------------------------------------------
|
|
|
|
|
|
class TestNoScheduler:
|
|
def test_schedule_task_no_scheduler(self):
|
|
tool = ScheduleTaskTool()
|
|
tool._scheduler = None
|
|
result = tool.execute(
|
|
prompt="hello", schedule_type="once", schedule_value="2026-01-01"
|
|
)
|
|
assert not result.success
|
|
assert "not available" in result.content
|
|
|
|
def test_list_no_scheduler(self):
|
|
tool = ListScheduledTasksTool()
|
|
tool._scheduler = None
|
|
result = tool.execute()
|
|
assert not result.success
|
|
|
|
def test_pause_no_scheduler(self):
|
|
tool = PauseScheduledTaskTool()
|
|
tool._scheduler = None
|
|
result = tool.execute(task_id="abc")
|
|
assert not result.success
|
|
|
|
def test_resume_no_scheduler(self):
|
|
tool = ResumeScheduledTaskTool()
|
|
tool._scheduler = None
|
|
result = tool.execute(task_id="abc")
|
|
assert not result.success
|
|
|
|
def test_cancel_no_scheduler(self):
|
|
tool = CancelScheduledTaskTool()
|
|
tool._scheduler = None
|
|
result = tool.execute(task_id="abc")
|
|
assert not result.success
|
|
|
|
|
|
# -- With injected scheduler --------------------------------------------------
|
|
|
|
|
|
class TestWithScheduler:
|
|
def test_schedule_task(self):
|
|
mock_sched = MagicMock()
|
|
mock_sched.create_task.return_value = ScheduledTask(
|
|
id="t123",
|
|
prompt="hello",
|
|
schedule_type="once",
|
|
schedule_value="2026-01-01T00:00:00",
|
|
next_run="2026-01-01T00:00:00",
|
|
)
|
|
tool = ScheduleTaskTool()
|
|
tool._scheduler = mock_sched
|
|
result = tool.execute(
|
|
prompt="hello", schedule_type="once", schedule_value="2026-01-01T00:00:00"
|
|
)
|
|
assert result.success
|
|
assert "t123" in result.content
|
|
mock_sched.create_task.assert_called_once()
|
|
|
|
def test_list_scheduled_tasks(self):
|
|
mock_sched = MagicMock()
|
|
mock_sched.list_tasks.return_value = [
|
|
ScheduledTask(
|
|
id="t1", prompt="a", schedule_type="interval", schedule_value="60"
|
|
),
|
|
]
|
|
tool = ListScheduledTasksTool()
|
|
tool._scheduler = mock_sched
|
|
result = tool.execute()
|
|
assert result.success
|
|
assert "t1" in result.content
|
|
|
|
def test_schedule_task_missing_params(self):
|
|
tool = ScheduleTaskTool()
|
|
tool._scheduler = MagicMock()
|
|
result = tool.execute(prompt="hello") # missing schedule_type, schedule_value
|
|
assert not result.success
|
|
assert "Missing" in result.content
|
|
|
|
def test_pause_missing_task_id(self):
|
|
tool = PauseScheduledTaskTool()
|
|
tool._scheduler = MagicMock()
|
|
result = tool.execute() # missing task_id
|
|
assert not result.success
|
|
assert "Missing" in result.content
|