feat: 增强日历功能并集成 AgentScope 代理服务
This commit is contained in:
@@ -103,6 +103,18 @@ def test_metadata_rejects_unknown_field() -> None:
|
||||
ScheduleItemMetadata.model_validate({"color": "#FF6B6B", "unknown": True})
|
||||
|
||||
|
||||
@pytest.mark.parametrize("value", [None, 0, 15, 10080])
|
||||
def test_metadata_accepts_reminder_minutes(value: int | None) -> None:
|
||||
metadata = ScheduleItemMetadata(reminder_minutes=value)
|
||||
assert metadata.reminder_minutes == value
|
||||
|
||||
|
||||
@pytest.mark.parametrize("value", [-1, 10081])
|
||||
def test_metadata_rejects_out_of_range_reminder_minutes(value: int) -> None:
|
||||
with pytest.raises(ValidationError):
|
||||
ScheduleItemMetadata(reminder_minutes=value)
|
||||
|
||||
|
||||
def test_metadata_attachment_rejects_unknown_field() -> None:
|
||||
with pytest.raises(ValidationError):
|
||||
ScheduleItemMetadataAttachment.model_validate(
|
||||
|
||||
@@ -221,7 +221,12 @@ async def test_create_maps_metadata_to_extra_metadata(mock_session: AsyncMock) -
|
||||
request = ScheduleItemCreateRequest(
|
||||
title="Roadmap",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
metadata=ScheduleItemMetadata(location="会议室A", color="#4F46E5", version=1),
|
||||
metadata=ScheduleItemMetadata(
|
||||
location="会议室A",
|
||||
color="#4F46E5",
|
||||
reminder_minutes=15,
|
||||
version=1,
|
||||
),
|
||||
)
|
||||
service = ScheduleItemService(
|
||||
repository=CaptureRepo(None),
|
||||
@@ -234,6 +239,7 @@ async def test_create_maps_metadata_to_extra_metadata(mock_session: AsyncMock) -
|
||||
assert captured is not None
|
||||
assert "extra_metadata" in captured
|
||||
assert captured["extra_metadata"]["location"] == "会议室A"
|
||||
assert captured["extra_metadata"]["reminder_minutes"] == 15
|
||||
assert "metadata" not in captured
|
||||
|
||||
|
||||
@@ -261,7 +267,10 @@ async def test_update_maps_metadata_to_extra_metadata(mock_session: AsyncMock) -
|
||||
item.id,
|
||||
ScheduleItemUpdateRequest(
|
||||
metadata=ScheduleItemMetadata(
|
||||
location="线上会议", color="#3B82F6", version=1
|
||||
location="线上会议",
|
||||
color="#3B82F6",
|
||||
reminder_minutes=30,
|
||||
version=1,
|
||||
)
|
||||
),
|
||||
)
|
||||
@@ -269,4 +278,38 @@ async def test_update_maps_metadata_to_extra_metadata(mock_session: AsyncMock) -
|
||||
assert captured is not None
|
||||
assert "extra_metadata" in captured
|
||||
assert captured["extra_metadata"]["location"] == "线上会议"
|
||||
assert captured["extra_metadata"]["reminder_minutes"] == 30
|
||||
assert "metadata" not in captured
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_maps_null_metadata_to_extra_metadata_null(
|
||||
mock_session: AsyncMock,
|
||||
) -> None:
|
||||
user_id = UUID("00000000-0000-0000-0000-000000000001")
|
||||
item = _create_mock_schedule_item()
|
||||
captured: dict | None = None
|
||||
|
||||
class CaptureRepo(FakeRepo):
|
||||
async def update_by_item_id(
|
||||
self, item_id: UUID, owner_id: UUID, data: dict
|
||||
) -> ScheduleItem | None:
|
||||
nonlocal captured
|
||||
captured = data
|
||||
return await super().update_by_item_id(item_id, owner_id, data)
|
||||
|
||||
service = ScheduleItemService(
|
||||
repository=CaptureRepo(item),
|
||||
session=mock_session,
|
||||
current_user=CurrentUser(id=user_id),
|
||||
)
|
||||
|
||||
await service.update(
|
||||
item.id,
|
||||
ScheduleItemUpdateRequest(metadata=None),
|
||||
)
|
||||
|
||||
assert captured is not None
|
||||
assert "extra_metadata" in captured
|
||||
assert captured["extra_metadata"] is None
|
||||
assert "metadata" not in captured
|
||||
|
||||
Reference in New Issue
Block a user