feat: 添加日历批量操作与客户端时区感知功能,优化前端 UI 交互体验
This commit is contained in:
@@ -16,6 +16,7 @@ def test_create_request_valid() -> None:
|
||||
request = ScheduleItemCreateRequest(
|
||||
title="Test Event",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
)
|
||||
assert request.title == "Test Event"
|
||||
assert request.timezone == "UTC"
|
||||
@@ -26,6 +27,7 @@ def test_create_request_with_end_at() -> None:
|
||||
title="Test Event",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
end_at=datetime(2026, 2, 28, 17, 30, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
)
|
||||
assert request.end_at is not None
|
||||
|
||||
@@ -35,6 +37,7 @@ def test_create_request_invalid_title_empty() -> None:
|
||||
ScheduleItemCreateRequest(
|
||||
title="",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
)
|
||||
|
||||
|
||||
@@ -43,6 +46,7 @@ def test_create_request_invalid_title_too_long() -> None:
|
||||
ScheduleItemCreateRequest(
|
||||
title="x" * 256,
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
)
|
||||
|
||||
|
||||
@@ -56,6 +60,7 @@ def test_create_request_with_metadata() -> None:
|
||||
request = ScheduleItemCreateRequest(
|
||||
title="Test Event",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
metadata=metadata,
|
||||
)
|
||||
assert request.metadata is not None
|
||||
@@ -68,6 +73,24 @@ def test_update_request_partial() -> None:
|
||||
assert request.description is None
|
||||
|
||||
|
||||
def test_create_request_rejects_naive_datetime() -> None:
|
||||
with pytest.raises(ValidationError):
|
||||
ScheduleItemCreateRequest(
|
||||
title="Test Event",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0),
|
||||
timezone="UTC",
|
||||
)
|
||||
|
||||
|
||||
def test_create_request_rejects_invalid_timezone() -> None:
|
||||
with pytest.raises(ValidationError):
|
||||
ScheduleItemCreateRequest(
|
||||
title="Test Event",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="Mars/OlympusMons",
|
||||
)
|
||||
|
||||
|
||||
def test_metadata_attachment_document() -> None:
|
||||
attachment = ScheduleItemMetadataAttachment(
|
||||
name="document.pdf",
|
||||
@@ -95,7 +118,7 @@ def test_metadata_rejects_invalid_color() -> None:
|
||||
|
||||
def test_metadata_rejects_invalid_version() -> None:
|
||||
with pytest.raises(ValidationError):
|
||||
ScheduleItemMetadata(version=2)
|
||||
ScheduleItemMetadata.model_validate({"version": 2})
|
||||
|
||||
|
||||
def test_metadata_rejects_unknown_field() -> None:
|
||||
|
||||
@@ -148,6 +148,7 @@ async def test_create_success(
|
||||
request = ScheduleItemCreateRequest(
|
||||
title="Test Event",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
)
|
||||
service = ScheduleItemService(
|
||||
repository=FakeRepo(None),
|
||||
@@ -171,6 +172,7 @@ async def test_create_invalid_end_at(
|
||||
title="Test Event",
|
||||
start_at=datetime(2026, 2, 28, 17, 0, 0, tzinfo=timezone.utc),
|
||||
end_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
)
|
||||
service = ScheduleItemService(
|
||||
repository=FakeRepo(None),
|
||||
@@ -275,6 +277,7 @@ async def test_create_maps_metadata_to_extra_metadata(
|
||||
request = ScheduleItemCreateRequest(
|
||||
title="Roadmap",
|
||||
start_at=datetime(2026, 2, 28, 16, 0, 0, tzinfo=timezone.utc),
|
||||
timezone="UTC",
|
||||
metadata=ScheduleItemMetadata(
|
||||
location="会议室A",
|
||||
color="#4F46E5",
|
||||
|
||||
Reference in New Issue
Block a user