mirror of
https://github.com/YFGaia/dify-plus.git
synced 2026-06-12 18:11:42 +08:00
refactor: port api/fields/file_fields.py (#30638)
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
|
||||
from fields.file_fields import FileResponse, FileWithSignedUrl, RemoteFileInfo, UploadConfig
|
||||
|
||||
|
||||
def test_file_response_serializes_datetime() -> None:
|
||||
created_at = datetime(2024, 1, 1, 12, 0, 0)
|
||||
file_obj = SimpleNamespace(
|
||||
id="file-1",
|
||||
name="example.txt",
|
||||
size=1024,
|
||||
extension="txt",
|
||||
mime_type="text/plain",
|
||||
created_by="user-1",
|
||||
created_at=created_at,
|
||||
preview_url="https://preview",
|
||||
source_url="https://source",
|
||||
original_url="https://origin",
|
||||
user_id="user-1",
|
||||
tenant_id="tenant-1",
|
||||
conversation_id="conv-1",
|
||||
file_key="key-1",
|
||||
)
|
||||
|
||||
serialized = FileResponse.model_validate(file_obj, from_attributes=True).model_dump(mode="json")
|
||||
|
||||
assert serialized["id"] == "file-1"
|
||||
assert serialized["created_at"] == int(created_at.timestamp())
|
||||
assert serialized["preview_url"] == "https://preview"
|
||||
assert serialized["source_url"] == "https://source"
|
||||
assert serialized["original_url"] == "https://origin"
|
||||
assert serialized["user_id"] == "user-1"
|
||||
assert serialized["tenant_id"] == "tenant-1"
|
||||
assert serialized["conversation_id"] == "conv-1"
|
||||
assert serialized["file_key"] == "key-1"
|
||||
|
||||
|
||||
def test_file_with_signed_url_builds_payload() -> None:
|
||||
payload = FileWithSignedUrl(
|
||||
id="file-2",
|
||||
name="remote.pdf",
|
||||
size=2048,
|
||||
extension="pdf",
|
||||
url="https://signed",
|
||||
mime_type="application/pdf",
|
||||
created_by="user-2",
|
||||
created_at=datetime(2024, 1, 2, 0, 0, 0),
|
||||
)
|
||||
|
||||
dumped = payload.model_dump(mode="json")
|
||||
|
||||
assert dumped["url"] == "https://signed"
|
||||
assert dumped["created_at"] == int(datetime(2024, 1, 2, 0, 0, 0).timestamp())
|
||||
|
||||
|
||||
def test_remote_file_info_and_upload_config() -> None:
|
||||
info = RemoteFileInfo(file_type="text/plain", file_length=123)
|
||||
assert info.model_dump(mode="json") == {"file_type": "text/plain", "file_length": 123}
|
||||
|
||||
config = UploadConfig(
|
||||
file_size_limit=1,
|
||||
batch_count_limit=2,
|
||||
file_upload_limit=3,
|
||||
image_file_size_limit=4,
|
||||
video_file_size_limit=5,
|
||||
audio_file_size_limit=6,
|
||||
workflow_file_upload_limit=7,
|
||||
image_file_batch_limit=8,
|
||||
single_chunk_attachment_limit=9,
|
||||
attachment_image_file_size_limit=10,
|
||||
)
|
||||
|
||||
dumped = config.model_dump(mode="json")
|
||||
assert dumped["file_upload_limit"] == 3
|
||||
assert dumped["attachment_image_file_size_limit"] == 10
|
||||
Reference in New Issue
Block a user