test_file.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import json
  2. from core.file import FILE_MODEL_IDENTITY, File, FileTransferMethod, FileType, FileUploadConfig
  3. from models.workflow import Workflow
  4. def test_file_loads_and_dumps():
  5. file = File(
  6. id="file1",
  7. tenant_id="tenant1",
  8. type=FileType.IMAGE,
  9. transfer_method=FileTransferMethod.REMOTE_URL,
  10. remote_url="https://example.com/image1.jpg",
  11. )
  12. file_dict = file.model_dump()
  13. assert file_dict["dify_model_identity"] == FILE_MODEL_IDENTITY
  14. assert file_dict["type"] == file.type.value
  15. assert isinstance(file_dict["type"], str)
  16. assert file_dict["transfer_method"] == file.transfer_method.value
  17. assert isinstance(file_dict["transfer_method"], str)
  18. assert "_extra_config" not in file_dict
  19. file_obj = File.model_validate(file_dict)
  20. assert file_obj.id == file.id
  21. assert file_obj.tenant_id == file.tenant_id
  22. assert file_obj.type == file.type
  23. assert file_obj.transfer_method == file.transfer_method
  24. assert file_obj.remote_url == file.remote_url
  25. def test_file_to_dict():
  26. file = File(
  27. id="file1",
  28. tenant_id="tenant1",
  29. type=FileType.IMAGE,
  30. transfer_method=FileTransferMethod.REMOTE_URL,
  31. remote_url="https://example.com/image1.jpg",
  32. )
  33. file_dict = file.to_dict()
  34. assert "_extra_config" not in file_dict
  35. assert "url" in file_dict
  36. def test_workflow_features_with_image():
  37. # Create a feature dict that mimics the old structure with image config
  38. features = {
  39. "file_upload": {
  40. "image": {"enabled": True, "number_limits": 5, "transfer_methods": ["remote_url", "local_file"]}
  41. }
  42. }
  43. # Create a workflow instance with the features
  44. workflow = Workflow(
  45. tenant_id="tenant-1",
  46. app_id="app-1",
  47. type="chat",
  48. version="1.0",
  49. graph="{}",
  50. features=json.dumps(features),
  51. created_by="user-1",
  52. environment_variables=[],
  53. conversation_variables=[],
  54. )
  55. # Get the converted features through the property
  56. converted_features = json.loads(workflow.features)
  57. # Create FileUploadConfig from the converted features
  58. file_upload_config = FileUploadConfig.model_validate(converted_features["file_upload"])
  59. # Validate the config
  60. assert file_upload_config.number_limits == 5
  61. assert list(file_upload_config.allowed_file_types) == [FileType.IMAGE]
  62. assert list(file_upload_config.allowed_file_upload_methods) == [
  63. FileTransferMethod.REMOTE_URL,
  64. FileTransferMethod.LOCAL_FILE,
  65. ]
  66. assert list(file_upload_config.allowed_file_extensions) == []