fix: add os.path.basename mocks to FTP and Google Drive tests

Add patches for os.path.basename to prevent Mock object errors when os.path.exists is patched

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-13 16:16:53 +00:00
parent b42c6f5f64
commit 307452fc8c
2 changed files with 68 additions and 18 deletions
+45 -11
View File
@@ -18,14 +18,18 @@ class TestUploadToFtp:
assert callable(upload_to_ftp) assert callable(upload_to_ftp)
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS") @patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
@patch("builtins.open", create=True) @patch("builtins.open", create=True)
def test_uploads_file_with_ftps(self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls): def test_uploads_file_with_ftps(
self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_basename
):
"""Test uploads file using FTPS (FTP with TLS).""" """Test uploads file using FTPS (FTP with TLS)."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
@@ -47,6 +51,7 @@ class TestUploadToFtp:
mock_ftp.login.assert_called_once() mock_ftp.login.assert_called_once()
mock_ftp.prot_p.assert_called_once() mock_ftp.prot_p.assert_called_once()
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP") @patch("app.tasks.upload_to_ftp.ftplib.FTP")
@patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS") @patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@@ -54,10 +59,11 @@ class TestUploadToFtp:
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
@patch("builtins.open", create=True) @patch("builtins.open", create=True)
def test_falls_back_to_plaintext_ftp( def test_falls_back_to_plaintext_ftp(
self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_ftp self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_ftp, mock_basename
): ):
"""Test falls back to plaintext FTP when FTPS fails.""" """Test falls back to plaintext FTP when FTPS fails."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
@@ -83,15 +89,17 @@ class TestUploadToFtp:
assert result["status"] == "Completed" assert result["status"] == "Completed"
assert result["used_tls"] is False assert result["used_tls"] is False
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS") @patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
def test_raises_error_when_ftps_fails_and_plaintext_forbidden( def test_raises_error_when_ftps_fails_and_plaintext_forbidden(
self, mock_settings, mock_exists, mock_log, mock_ftp_tls self, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_basename
): ):
"""Test raises error when FTPS fails and plaintext is forbidden.""" """Test raises error when FTPS fails and plaintext is forbidden."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
@@ -110,11 +118,13 @@ class TestUploadToFtp:
with pytest.raises(Exception, match="FTPS connection failed and plaintext FTP is forbidden"): with pytest.raises(Exception, match="FTPS connection failed and plaintext FTP is forbidden"):
upload_to_ftp(mock_self, "/tmp/test.pdf") upload_to_ftp(mock_self, "/tmp/test.pdf")
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
def test_raises_error_when_file_not_found(self, mock_exists, mock_log): def test_raises_error_when_file_not_found(self, mock_exists, mock_log, mock_basename):
"""Test raises error when file not found.""" """Test raises error when file not found."""
mock_exists.return_value = False mock_exists.return_value = False
mock_basename.return_value = "file.pdf"
mock_self = Mock() mock_self = Mock()
mock_self.request.id = "test-task-id" mock_self.request.id = "test-task-id"
@@ -122,12 +132,14 @@ class TestUploadToFtp:
with pytest.raises(FileNotFoundError): with pytest.raises(FileNotFoundError):
upload_to_ftp(mock_self, "/nonexistent/file.pdf") upload_to_ftp(mock_self, "/nonexistent/file.pdf")
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
def test_raises_error_when_ftp_host_not_configured(self, mock_settings, mock_exists, mock_log): def test_raises_error_when_ftp_host_not_configured(self, mock_settings, mock_exists, mock_log, mock_basename):
"""Test raises error when FTP host not configured.""" """Test raises error when FTP host not configured."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = None mock_settings.ftp_host = None
mock_self = Mock() mock_self = Mock()
@@ -136,14 +148,18 @@ class TestUploadToFtp:
with pytest.raises(ValueError, match="FTP host is not configured"): with pytest.raises(ValueError, match="FTP host is not configured"):
upload_to_ftp(mock_self, "/tmp/test.pdf") upload_to_ftp(mock_self, "/tmp/test.pdf")
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS") @patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
@patch("builtins.open", create=True) @patch("builtins.open", create=True)
def test_creates_directory_structure(self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls): def test_creates_directory_structure(
self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_basename
):
"""Test creates directory structure if it doesn't exist.""" """Test creates directory structure if it doesn't exist."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
@@ -163,14 +179,18 @@ class TestUploadToFtp:
assert result["status"] == "Completed" assert result["status"] == "Completed"
mock_ftp.mkd.assert_called() mock_ftp.mkd.assert_called()
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP") @patch("app.tasks.upload_to_ftp.ftplib.FTP")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
@patch("builtins.open", create=True) @patch("builtins.open", create=True)
def test_uses_plaintext_ftp_when_tls_disabled(self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp): def test_uses_plaintext_ftp_when_tls_disabled(
self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp, mock_basename
):
"""Test uses plaintext FTP when TLS is explicitly disabled.""" """Test uses plaintext FTP when TLS is explicitly disabled."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
@@ -190,12 +210,16 @@ class TestUploadToFtp:
assert result["status"] == "Completed" assert result["status"] == "Completed"
assert result["used_tls"] is False assert result["used_tls"] is False
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
def test_raises_error_when_plaintext_forbidden_and_tls_disabled(self, mock_settings, mock_exists, mock_log): def test_raises_error_when_plaintext_forbidden_and_tls_disabled(
self, mock_settings, mock_exists, mock_log, mock_basename
):
"""Test raises error when plaintext is forbidden and TLS is disabled.""" """Test raises error when plaintext is forbidden and TLS is disabled."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_use_tls = False mock_settings.ftp_use_tls = False
@@ -207,14 +231,18 @@ class TestUploadToFtp:
with pytest.raises(Exception, match="Plaintext FTP is forbidden"): with pytest.raises(Exception, match="Plaintext FTP is forbidden"):
upload_to_ftp(mock_self, "/tmp/test.pdf") upload_to_ftp(mock_self, "/tmp/test.pdf")
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS") @patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
@patch("builtins.open", create=True) @patch("builtins.open", create=True)
def test_removes_leading_slash_from_folder(self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls): def test_removes_leading_slash_from_folder(
self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_basename
):
"""Test removes leading slash from folder path.""" """Test removes leading slash from folder path."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
@@ -233,13 +261,15 @@ class TestUploadToFtp:
# Verify cwd was called with folder without leading slash # Verify cwd was called with folder without leading slash
mock_ftp.cwd.assert_called_with("uploads") mock_ftp.cwd.assert_called_with("uploads")
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS") @patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
def test_handles_directory_creation_error(self, mock_settings, mock_exists, mock_log, mock_ftp_tls): def test_handles_directory_creation_error(self, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_basename):
"""Test handles directory creation error.""" """Test handles directory creation error."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
@@ -258,14 +288,18 @@ class TestUploadToFtp:
with pytest.raises(Exception, match="Failed to change/create directory"): with pytest.raises(Exception, match="Failed to change/create directory"):
upload_to_ftp(mock_self, "/tmp/test.pdf") upload_to_ftp(mock_self, "/tmp/test.pdf")
@patch("app.tasks.upload_to_ftp.os.path.basename")
@patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS") @patch("app.tasks.upload_to_ftp.ftplib.FTP_TLS")
@patch("app.tasks.upload_to_ftp.log_task_progress") @patch("app.tasks.upload_to_ftp.log_task_progress")
@patch("app.tasks.upload_to_ftp.os.path.exists") @patch("app.tasks.upload_to_ftp.os.path.exists")
@patch("app.tasks.upload_to_ftp.settings") @patch("app.tasks.upload_to_ftp.settings")
@patch("builtins.open", create=True) @patch("builtins.open", create=True)
def test_returns_ftp_path_in_result(self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls): def test_returns_ftp_path_in_result(
self, mock_open, mock_settings, mock_exists, mock_log, mock_ftp_tls, mock_basename
):
"""Test returns FTP path in result.""" """Test returns FTP path in result."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.ftp_host = "ftp.example.com" mock_settings.ftp_host = "ftp.example.com"
mock_settings.ftp_port = 21 mock_settings.ftp_port = 21
mock_settings.ftp_username = "user" mock_settings.ftp_username = "user"
+23 -7
View File
@@ -219,6 +219,7 @@ class TestTruncatePropertyValue:
class TestUploadToGoogleDriveTask: class TestUploadToGoogleDriveTask:
"""Tests for upload_to_google_drive task.""" """Tests for upload_to_google_drive task."""
@patch("app.tasks.upload_to_google_drive.os.path.basename")
@patch("app.tasks.upload_to_google_drive.get_google_drive_service") @patch("app.tasks.upload_to_google_drive.get_google_drive_service")
@patch("app.tasks.upload_to_google_drive.extract_metadata_from_file") @patch("app.tasks.upload_to_google_drive.extract_metadata_from_file")
@patch("app.tasks.upload_to_google_drive.log_task_progress") @patch("app.tasks.upload_to_google_drive.log_task_progress")
@@ -226,10 +227,11 @@ class TestUploadToGoogleDriveTask:
@patch("app.tasks.upload_to_google_drive.MediaFileUpload") @patch("app.tasks.upload_to_google_drive.MediaFileUpload")
@patch("app.tasks.upload_to_google_drive.settings") @patch("app.tasks.upload_to_google_drive.settings")
def test_uploads_file_successfully( def test_uploads_file_successfully(
self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service, mock_basename
): ):
"""Test uploads file to Google Drive successfully.""" """Test uploads file to Google Drive successfully."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.google_drive_folder_id = "folder_123" mock_settings.google_drive_folder_id = "folder_123"
mock_extract.return_value = {} mock_extract.return_value = {}
@@ -259,11 +261,13 @@ class TestUploadToGoogleDriveTask:
assert result["google_drive_file_id"] == "file_123" assert result["google_drive_file_id"] == "file_123"
assert "webViewLink" in result["google_drive_web_link"] assert "webViewLink" in result["google_drive_web_link"]
@patch("app.tasks.upload_to_google_drive.os.path.basename")
@patch("app.tasks.upload_to_google_drive.log_task_progress") @patch("app.tasks.upload_to_google_drive.log_task_progress")
@patch("app.tasks.upload_to_google_drive.os.path.exists") @patch("app.tasks.upload_to_google_drive.os.path.exists")
def test_raises_error_when_file_not_found(self, mock_exists, mock_log): def test_raises_error_when_file_not_found(self, mock_exists, mock_log, mock_basename):
"""Test raises error when file not found.""" """Test raises error when file not found."""
mock_exists.return_value = False mock_exists.return_value = False
mock_basename.return_value = "file.pdf"
mock_self = Mock() mock_self = Mock()
mock_self.request.id = "test-task-id" mock_self.request.id = "test-task-id"
@@ -271,12 +275,14 @@ class TestUploadToGoogleDriveTask:
with pytest.raises(FileNotFoundError): with pytest.raises(FileNotFoundError):
upload_to_google_drive(mock_self, "/nonexistent/file.pdf") upload_to_google_drive(mock_self, "/nonexistent/file.pdf")
@patch("app.tasks.upload_to_google_drive.os.path.basename")
@patch("app.tasks.upload_to_google_drive.get_google_drive_service") @patch("app.tasks.upload_to_google_drive.get_google_drive_service")
@patch("app.tasks.upload_to_google_drive.log_task_progress") @patch("app.tasks.upload_to_google_drive.log_task_progress")
@patch("app.tasks.upload_to_google_drive.os.path.exists") @patch("app.tasks.upload_to_google_drive.os.path.exists")
def test_raises_error_when_service_init_fails(self, mock_exists, mock_log, mock_service): def test_raises_error_when_service_init_fails(self, mock_exists, mock_log, mock_service, mock_basename):
"""Test raises error when service initialization fails.""" """Test raises error when service initialization fails."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_service.return_value = None mock_service.return_value = None
mock_self = Mock() mock_self = Mock()
@@ -285,6 +291,7 @@ class TestUploadToGoogleDriveTask:
with pytest.raises(Exception, match="Failed to initialize Google Drive service"): with pytest.raises(Exception, match="Failed to initialize Google Drive service"):
upload_to_google_drive(mock_self, "/tmp/test.pdf") upload_to_google_drive(mock_self, "/tmp/test.pdf")
@patch("app.tasks.upload_to_google_drive.os.path.basename")
@patch("app.tasks.upload_to_google_drive.get_google_drive_service") @patch("app.tasks.upload_to_google_drive.get_google_drive_service")
@patch("app.tasks.upload_to_google_drive.extract_metadata_from_file") @patch("app.tasks.upload_to_google_drive.extract_metadata_from_file")
@patch("app.tasks.upload_to_google_drive.log_task_progress") @patch("app.tasks.upload_to_google_drive.log_task_progress")
@@ -292,10 +299,11 @@ class TestUploadToGoogleDriveTask:
@patch("app.tasks.upload_to_google_drive.MediaFileUpload") @patch("app.tasks.upload_to_google_drive.MediaFileUpload")
@patch("app.tasks.upload_to_google_drive.settings") @patch("app.tasks.upload_to_google_drive.settings")
def test_includes_metadata_in_upload( def test_includes_metadata_in_upload(
self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service, mock_basename
): ):
"""Test includes metadata in upload.""" """Test includes metadata in upload."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.google_drive_folder_id = None mock_settings.google_drive_folder_id = None
metadata = {"document_type": "invoice", "amount": "100.00", "date": "2024-01-01"} metadata = {"document_type": "invoice", "amount": "100.00", "date": "2024-01-01"}
@@ -324,6 +332,7 @@ class TestUploadToGoogleDriveTask:
assert result["metadata_included"] is True assert result["metadata_included"] is True
@patch("app.tasks.upload_to_google_drive.os.path.basename")
@patch("app.tasks.upload_to_google_drive.get_google_drive_service") @patch("app.tasks.upload_to_google_drive.get_google_drive_service")
@patch("app.tasks.upload_to_google_drive.extract_metadata_from_file") @patch("app.tasks.upload_to_google_drive.extract_metadata_from_file")
@patch("app.tasks.upload_to_google_drive.log_task_progress") @patch("app.tasks.upload_to_google_drive.log_task_progress")
@@ -331,10 +340,11 @@ class TestUploadToGoogleDriveTask:
@patch("app.tasks.upload_to_google_drive.MediaFileUpload") @patch("app.tasks.upload_to_google_drive.MediaFileUpload")
@patch("app.tasks.upload_to_google_drive.settings") @patch("app.tasks.upload_to_google_drive.settings")
def test_skips_nested_metadata_objects( def test_skips_nested_metadata_objects(
self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service, mock_basename
): ):
"""Test skips nested objects in metadata.""" """Test skips nested objects in metadata."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.google_drive_folder_id = None mock_settings.google_drive_folder_id = None
metadata = {"simple_field": "value", "nested_object": {"key": "value"}, "nested_list": [1, 2, 3]} metadata = {"simple_field": "value", "nested_object": {"key": "value"}, "nested_list": [1, 2, 3]}
@@ -370,14 +380,18 @@ class TestUploadToGoogleDriveTask:
assert "nested_object" not in file_metadata["properties"] assert "nested_object" not in file_metadata["properties"]
assert "nested_list" not in file_metadata["properties"] assert "nested_list" not in file_metadata["properties"]
@patch("app.tasks.upload_to_google_drive.os.path.basename")
@patch("app.tasks.upload_to_google_drive.get_google_drive_service") @patch("app.tasks.upload_to_google_drive.get_google_drive_service")
@patch("app.tasks.upload_to_google_drive.log_task_progress") @patch("app.tasks.upload_to_google_drive.log_task_progress")
@patch("app.tasks.upload_to_google_drive.os.path.exists") @patch("app.tasks.upload_to_google_drive.os.path.exists")
@patch("app.tasks.upload_to_google_drive.MediaFileUpload") @patch("app.tasks.upload_to_google_drive.MediaFileUpload")
@patch("app.tasks.upload_to_google_drive.settings") @patch("app.tasks.upload_to_google_drive.settings")
def test_handles_upload_exception(self, mock_settings, mock_media, mock_exists, mock_log, mock_service): def test_handles_upload_exception(
self, mock_settings, mock_media, mock_exists, mock_log, mock_service, mock_basename
):
"""Test handles upload exception.""" """Test handles upload exception."""
mock_exists.return_value = True mock_exists.return_value = True
mock_basename.return_value = "test.pdf"
mock_settings.google_drive_folder_id = None mock_settings.google_drive_folder_id = None
mock_drive_service = Mock() mock_drive_service = Mock()
@@ -392,6 +406,7 @@ class TestUploadToGoogleDriveTask:
with pytest.raises(Exception, match="Failed to upload"): with pytest.raises(Exception, match="Failed to upload"):
upload_to_google_drive(mock_self, "/tmp/test.pdf") upload_to_google_drive(mock_self, "/tmp/test.pdf")
@patch("app.tasks.upload_to_google_drive.os.path.basename")
@patch("app.tasks.upload_to_google_drive.get_google_drive_service") @patch("app.tasks.upload_to_google_drive.get_google_drive_service")
@patch("app.tasks.upload_to_google_drive.extract_metadata_from_file") @patch("app.tasks.upload_to_google_drive.extract_metadata_from_file")
@patch("app.tasks.upload_to_google_drive.log_task_progress") @patch("app.tasks.upload_to_google_drive.log_task_progress")
@@ -399,9 +414,10 @@ class TestUploadToGoogleDriveTask:
@patch("app.tasks.upload_to_google_drive.MediaFileUpload") @patch("app.tasks.upload_to_google_drive.MediaFileUpload")
@patch("app.tasks.upload_to_google_drive.settings") @patch("app.tasks.upload_to_google_drive.settings")
def test_sets_parent_folder_when_configured( def test_sets_parent_folder_when_configured(
self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service self, mock_settings, mock_media, mock_exists, mock_log, mock_extract, mock_service, mock_basename
): ):
"""Test sets parent folder when configured.""" """Test sets parent folder when configured."""
mock_basename.return_value = "test.pdf"
mock_exists.return_value = True mock_exists.return_value = True
mock_settings.google_drive_folder_id = "parent_folder_123" mock_settings.google_drive_folder_id = "parent_folder_123"
mock_extract.return_value = {} mock_extract.return_value = {}