fix(tests): use real File objects instead of MagicMock in file tests

Replace MagicMock with crewai_files.File instances in file-related
tests to satisfy Pydantic validation requirements.
This commit is contained in:
Greyson LaLonde
2026-01-23 06:13:04 -05:00
parent 2f87d2c1b6
commit 8eea0e45eb

View File

@@ -833,7 +833,9 @@ def test_lite_agent_standalone_still_works():
def test_agent_kickoff_with_files_parameter(): def test_agent_kickoff_with_files_parameter():
"""Test that Agent.kickoff() accepts and passes files to the executor.""" """Test that Agent.kickoff() accepts and passes files to the executor."""
from unittest.mock import MagicMock, Mock, patch from unittest.mock import Mock, patch
from crewai_files import File
from crewai.types.usage_metrics import UsageMetrics from crewai.types.usage_metrics import UsageMetrics
@@ -857,8 +859,8 @@ def test_agent_kickoff_with_files_parameter():
verbose=False, verbose=False,
) )
mock_file = MagicMock() test_file = File(source=b"mock pdf content")
files = {"document.pdf": mock_file} files = {"document.pdf": test_file}
with patch.object( with patch.object(
agent, "_prepare_kickoff", wraps=agent._prepare_kickoff agent, "_prepare_kickoff", wraps=agent._prepare_kickoff
@@ -868,14 +870,18 @@ def test_agent_kickoff_with_files_parameter():
mock_prepare.assert_called_once() mock_prepare.assert_called_once()
call_args = mock_prepare.call_args call_args = mock_prepare.call_args
assert call_args.args[0] == "Analyze the document" assert call_args.args[0] == "Analyze the document"
assert call_args.kwargs.get("files") == files or call_args.args[2] == files called_files = call_args.kwargs.get("files") or call_args.args[2]
assert "document.pdf" in called_files
assert called_files["document.pdf"] is test_file
assert result is not None assert result is not None
def test_prepare_kickoff_extracts_files_from_messages(): def test_prepare_kickoff_extracts_files_from_messages():
"""Test that _prepare_kickoff extracts files from messages.""" """Test that _prepare_kickoff extracts files from messages."""
from unittest.mock import MagicMock, Mock from unittest.mock import Mock
from crewai_files import File
from crewai.types.usage_metrics import UsageMetrics from crewai.types.usage_metrics import UsageMetrics
@@ -899,21 +905,23 @@ def test_prepare_kickoff_extracts_files_from_messages():
verbose=False, verbose=False,
) )
mock_file = MagicMock() test_file = File(source=b"mock image content")
messages = [ messages = [
{"role": "user", "content": "Analyze this", "files": {"img.png": mock_file}} {"role": "user", "content": "Analyze this", "files": {"img.png": test_file}}
] ]
executor, inputs, agent_info, parsed_tools = agent._prepare_kickoff(messages=messages) executor, inputs, agent_info, parsed_tools = agent._prepare_kickoff(messages=messages)
assert "files" in inputs assert "files" in inputs
assert "img.png" in inputs["files"] assert "img.png" in inputs["files"]
assert inputs["files"]["img.png"] is mock_file assert inputs["files"]["img.png"] is test_file
def test_prepare_kickoff_merges_files_from_messages_and_parameter(): def test_prepare_kickoff_merges_files_from_messages_and_parameter():
"""Test that _prepare_kickoff merges files from messages and parameter.""" """Test that _prepare_kickoff merges files from messages and parameter."""
from unittest.mock import MagicMock, Mock from unittest.mock import Mock
from crewai_files import File
from crewai.types.usage_metrics import UsageMetrics from crewai.types.usage_metrics import UsageMetrics
@@ -937,8 +945,8 @@ def test_prepare_kickoff_merges_files_from_messages_and_parameter():
verbose=False, verbose=False,
) )
msg_file = MagicMock() msg_file = File(source=b"message file content")
param_file = MagicMock() param_file = File(source=b"param file content")
messages = [ messages = [
{"role": "user", "content": "Analyze these", "files": {"from_msg.png": msg_file}} {"role": "user", "content": "Analyze these", "files": {"from_msg.png": msg_file}}
] ]
@@ -957,7 +965,9 @@ def test_prepare_kickoff_merges_files_from_messages_and_parameter():
def test_prepare_kickoff_param_files_override_message_files(): def test_prepare_kickoff_param_files_override_message_files():
"""Test that files parameter overrides files from messages with same name.""" """Test that files parameter overrides files from messages with same name."""
from unittest.mock import MagicMock, Mock from unittest.mock import Mock
from crewai_files import File
from crewai.types.usage_metrics import UsageMetrics from crewai.types.usage_metrics import UsageMetrics
@@ -981,8 +991,8 @@ def test_prepare_kickoff_param_files_override_message_files():
verbose=False, verbose=False,
) )
msg_file = MagicMock(name="msg_file") msg_file = File(source=b"message file content")
param_file = MagicMock(name="param_file") param_file = File(source=b"param file content")
messages = [ messages = [
{"role": "user", "content": "Analyze", "files": {"same.png": msg_file}} {"role": "user", "content": "Analyze", "files": {"same.png": msg_file}}
] ]