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

This commit is contained in:
qzl
2026-03-11 15:28:29 +08:00
parent e55e445906
commit e20e7d2a02
85 changed files with 5175 additions and 885 deletions
@@ -10,8 +10,6 @@ from fastapi.testclient import TestClient
from app import app
from v1.inbox_messages.dependencies import get_inbox_message_service
from v1.inbox_messages.schemas import (
InboxMessageAcceptRequest,
InboxMessageListRequest,
InboxMessageResponse,
InboxMessageStatus,
InboxMessageType,
@@ -23,37 +21,22 @@ class FakeInboxMessageService:
def __init__(
self,
messages: list[InboxMessageResponse],
accepted: InboxMessageResponse,
dismissed: InboxMessageResponse,
read_message: InboxMessageResponse,
) -> None:
self._messages = messages
self._accepted = accepted
self._dismissed = dismissed
self._read_message = read_message
async def list_messages(
self, request: InboxMessageListRequest
self, is_read: bool | None = None
) -> list[InboxMessageResponse]:
if request.status is None:
if is_read is None:
return self._messages
return [
message for message in self._messages if message.status == request.status
]
return [message for message in self._messages if message.is_read is is_read]
async def accept_invitation(
self,
message_id: UUID,
request: InboxMessageAcceptRequest,
) -> InboxMessageResponse:
if message_id != self._accepted.id:
async def mark_as_read(self, message_id: UUID) -> InboxMessageResponse:
if message_id != self._read_message.id:
raise HTTPException(status_code=404, detail="Inbox message not found")
if not request.permission_view:
raise HTTPException(status_code=400, detail="permission_view is required")
return self._accepted
async def dismiss_invitation(self, message_id: UUID) -> InboxMessageResponse:
if message_id != self._dismissed.id:
raise HTTPException(status_code=404, detail="Inbox message not found")
return self._dismissed
return self._read_message
def _override_inbox_message_service(
@@ -84,11 +67,11 @@ def _build_message(
def test_list_inbox_messages_returns_200() -> None:
pending_message = _build_message(uuid4(), InboxMessageStatus.PENDING)
accepted_message = _build_message(uuid4(), InboxMessageStatus.ACCEPTED)
read_message = _build_message(uuid4(), InboxMessageStatus.ACCEPTED)
read_message = read_message.model_copy(update={"is_read": True})
service = FakeInboxMessageService(
messages=[pending_message, accepted_message],
accepted=accepted_message,
dismissed=_build_message(uuid4(), InboxMessageStatus.DISMISSED),
messages=[pending_message, read_message],
read_message=read_message,
)
app.dependency_overrides[get_inbox_message_service] = (
_override_inbox_message_service(service)
@@ -96,21 +79,21 @@ def test_list_inbox_messages_returns_200() -> None:
client = TestClient(app)
try:
response = client.get("/api/v1/inbox/messages", params={"status": "pending"})
response = client.get("/api/v1/inbox/messages", params={"is_read": "false"})
assert response.status_code == 200
body = response.json()
assert len(body) == 1
assert body[0]["status"] == "pending"
assert body[0]["is_read"] is False
finally:
app.dependency_overrides = {}
def test_accept_inbox_message_returns_200() -> None:
accepted_message = _build_message(uuid4(), InboxMessageStatus.ACCEPTED)
def test_mark_as_read_returns_200() -> None:
read_message = _build_message(uuid4(), InboxMessageStatus.PENDING)
read_message = read_message.model_copy(update={"is_read": True})
service = FakeInboxMessageService(
messages=[accepted_message],
accepted=accepted_message,
dismissed=_build_message(uuid4(), InboxMessageStatus.DISMISSED),
messages=[read_message],
read_message=read_message,
)
app.dependency_overrides[get_inbox_message_service] = (
_override_inbox_message_service(service)
@@ -118,39 +101,10 @@ def test_accept_inbox_message_returns_200() -> None:
client = TestClient(app)
try:
response = client.post(
f"/api/v1/inbox/messages/{accepted_message.id}/accept",
json={
"permission_view": True,
"permission_edit": True,
"permission_invite": False,
},
)
response = client.patch(f"/api/v1/inbox/messages/{read_message.id}/read")
assert response.status_code == 200
body = response.json()
assert body["id"] == str(accepted_message.id)
assert body["status"] == "accepted"
finally:
app.dependency_overrides = {}
def test_dismiss_inbox_message_returns_200() -> None:
dismissed_message = _build_message(uuid4(), InboxMessageStatus.DISMISSED)
service = FakeInboxMessageService(
messages=[dismissed_message],
accepted=_build_message(uuid4(), InboxMessageStatus.ACCEPTED),
dismissed=dismissed_message,
)
app.dependency_overrides[get_inbox_message_service] = (
_override_inbox_message_service(service)
)
client = TestClient(app)
try:
response = client.post(f"/api/v1/inbox/messages/{dismissed_message.id}/dismiss")
assert response.status_code == 200
body = response.json()
assert body["id"] == str(dismissed_message.id)
assert body["status"] == "dismissed"
assert body["id"] == str(read_message.id)
assert body["is_read"] is True
finally:
app.dependency_overrides = {}