feat: 增强日历功能并集成 AgentScope 代理服务

This commit is contained in:
qzl
2026-03-11 17:16:11 +08:00
parent e20e7d2a02
commit 85b314cf64
53 changed files with 3642 additions and 297 deletions
@@ -25,6 +25,8 @@ async def test_mutate_calendar_event_create_returns_calendar_card_v1(
async def create_agent_generated(self, payload):
assert payload.title == "晨会"
assert payload.metadata is not None
assert payload.metadata.reminder_minutes == 15
return SimpleNamespace(
id=created_id,
title="晨会",
@@ -32,7 +34,11 @@ async def test_mutate_calendar_event_create_returns_calendar_card_v1(
start_at=datetime(2026, 3, 8, 1, 0, tzinfo=timezone.utc),
end_at=datetime(2026, 3, 8, 2, 0, tzinfo=timezone.utc),
timezone="Asia/Shanghai",
metadata=SimpleNamespace(location="会议室A", color="#4F46E5"),
metadata=SimpleNamespace(
location="会议室A",
color="#4F46E5",
reminder_minutes=15,
),
)
class _FakeRepository:
@@ -61,6 +67,7 @@ async def test_mutate_calendar_event_create_returns_calendar_card_v1(
"endAt": "2026-03-08T10:00:00+08:00",
"timezone": "Asia/Shanghai",
"location": "会议室A",
"reminderMinutes": 15,
},
),
)
@@ -69,6 +76,77 @@ async def test_mutate_calendar_event_create_returns_calendar_card_v1(
data = cast(dict[str, object], result["data"])
assert data["id"] == str(created_id)
assert data["ok"] is True
assert data["reminderMinutes"] == 15
@pytest.mark.asyncio
async def test_mutate_calendar_event_update_maps_reminder_minutes(
monkeypatch: pytest.MonkeyPatch,
) -> None:
event_id = uuid4()
class _FakeService:
def __init__(self, **kwargs) -> None:
del kwargs
async def get_by_id(self, item_id):
assert item_id == event_id
return SimpleNamespace(
metadata=SimpleNamespace(
model_dump=lambda: {
"color": "#4F46E5",
"location": "会议室A",
"version": 1,
}
)
)
async def update(self, item_id, payload):
assert item_id == event_id
assert payload.metadata is not None
assert payload.metadata.reminder_minutes == 30
return SimpleNamespace(
id=event_id,
title="更新后",
description=None,
start_at=datetime(2026, 3, 8, 1, 0, tzinfo=timezone.utc),
end_at=None,
timezone="Asia/Shanghai",
metadata=SimpleNamespace(
location="会议室A",
color="#4F46E5",
reminder_minutes=30,
),
)
class _FakeRepository:
def __init__(self, session) -> None:
del session
monkeypatch.setattr(
"core.agent.infrastructure.crewai.tools.create_calendar_event_tool.ScheduleItemService",
_FakeService,
)
monkeypatch.setattr(
"core.agent.infrastructure.crewai.tools.create_calendar_event_tool.SQLAlchemyScheduleItemRepository",
_FakeRepository,
)
result = cast(
dict[str, object],
await _execute_mutate_calendar_event(
session=cast(AsyncSession, SimpleNamespace()),
owner_id=uuid4(),
tool_args={
"operation": "update",
"eventId": str(event_id),
"reminderMinutes": 30,
},
),
)
data = cast(dict[str, object], result["data"])
assert data["reminderMinutes"] == 30
@pytest.mark.asyncio