123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import json
- from core.file import FILE_MODEL_IDENTITY, File, FileTransferMethod, FileType, FileUploadConfig
- from models.workflow import Workflow
- def test_file_loads_and_dumps():
- file = File(
- id="file1",
- tenant_id="tenant1",
- type=FileType.IMAGE,
- transfer_method=FileTransferMethod.REMOTE_URL,
- remote_url="https://example.com/image1.jpg",
- )
- file_dict = file.model_dump()
- assert file_dict["dify_model_identity"] == FILE_MODEL_IDENTITY
- assert file_dict["type"] == file.type.value
- assert isinstance(file_dict["type"], str)
- assert file_dict["transfer_method"] == file.transfer_method.value
- assert isinstance(file_dict["transfer_method"], str)
- assert "_extra_config" not in file_dict
- file_obj = File.model_validate(file_dict)
- assert file_obj.id == file.id
- assert file_obj.tenant_id == file.tenant_id
- assert file_obj.type == file.type
- assert file_obj.transfer_method == file.transfer_method
- assert file_obj.remote_url == file.remote_url
- def test_file_to_dict():
- file = File(
- id="file1",
- tenant_id="tenant1",
- type=FileType.IMAGE,
- transfer_method=FileTransferMethod.REMOTE_URL,
- remote_url="https://example.com/image1.jpg",
- )
- file_dict = file.to_dict()
- assert "_extra_config" not in file_dict
- assert "url" in file_dict
- def test_workflow_features_with_image():
- # Create a feature dict that mimics the old structure with image config
- features = {
- "file_upload": {
- "image": {"enabled": True, "number_limits": 5, "transfer_methods": ["remote_url", "local_file"]}
- }
- }
- # Create a workflow instance with the features
- workflow = Workflow(
- tenant_id="tenant-1",
- app_id="app-1",
- type="chat",
- version="1.0",
- graph="{}",
- features=json.dumps(features),
- created_by="user-1",
- environment_variables=[],
- conversation_variables=[],
- )
- # Get the converted features through the property
- converted_features = json.loads(workflow.features)
- # Create FileUploadConfig from the converted features
- file_upload_config = FileUploadConfig.model_validate(converted_features["file_upload"])
- # Validate the config
- assert file_upload_config.number_limits == 5
- assert list(file_upload_config.allowed_file_types) == [FileType.IMAGE]
- assert list(file_upload_config.allowed_file_upload_methods) == [
- FileTransferMethod.REMOTE_URL,
- FileTransferMethod.LOCAL_FILE,
- ]
- assert list(file_upload_config.allowed_file_extensions) == []
|