test(api): add autospec to MagicMock-based patch usage (#32752)

This commit is contained in:
-LAN-
2026-03-01 04:30:45 +08:00
committed by GitHub
parent c034eb036c
commit 20fcc95db9
86 changed files with 865 additions and 804 deletions

View File

@ -50,7 +50,7 @@ def pipeline_id():
@pytest.fixture
def mock_db_session():
"""Mock database session via session_factory.create_session()."""
with patch("tasks.clean_dataset_task.session_factory") as mock_sf:
with patch("tasks.clean_dataset_task.session_factory", autospec=True) as mock_sf:
mock_session = MagicMock()
# context manager for create_session()
cm = MagicMock()
@ -79,7 +79,7 @@ def mock_db_session():
@pytest.fixture
def mock_storage():
"""Mock storage client."""
with patch("tasks.clean_dataset_task.storage") as mock_storage:
with patch("tasks.clean_dataset_task.storage", autospec=True) as mock_storage:
mock_storage.delete.return_value = None
yield mock_storage
@ -87,7 +87,7 @@ def mock_storage():
@pytest.fixture
def mock_index_processor_factory():
"""Mock IndexProcessorFactory."""
with patch("tasks.clean_dataset_task.IndexProcessorFactory") as mock_factory:
with patch("tasks.clean_dataset_task.IndexProcessorFactory", autospec=True) as mock_factory:
mock_processor = MagicMock()
mock_processor.clean.return_value = None
mock_factory_instance = MagicMock()
@ -104,7 +104,7 @@ def mock_index_processor_factory():
@pytest.fixture
def mock_get_image_upload_file_ids():
"""Mock get_image_upload_file_ids function."""
with patch("tasks.clean_dataset_task.get_image_upload_file_ids") as mock_func:
with patch("tasks.clean_dataset_task.get_image_upload_file_ids", autospec=True) as mock_func:
mock_func.return_value = []
yield mock_func

View File

@ -75,7 +75,7 @@ def mock_document(document_id, dataset_id, notion_workspace_id, notion_page_id,
@pytest.fixture
def mock_db_session(mock_document, mock_dataset):
"""Mock session_factory.create_session to drive deterministic read-only task flow."""
with patch("tasks.document_indexing_sync_task.session_factory") as mock_session_factory:
with patch("tasks.document_indexing_sync_task.session_factory", autospec=True) as mock_session_factory:
session = MagicMock()
session.scalars.return_value.all.return_value = []
session.query.return_value.where.return_value.first.side_effect = [mock_document, mock_dataset]
@ -96,7 +96,7 @@ def mock_db_session(mock_document, mock_dataset):
@pytest.fixture
def mock_datasource_provider_service():
"""Mock datasource credential provider."""
with patch("tasks.document_indexing_sync_task.DatasourceProviderService") as mock_service_class:
with patch("tasks.document_indexing_sync_task.DatasourceProviderService", autospec=True) as mock_service_class:
mock_service = MagicMock()
mock_service.get_datasource_credentials.return_value = {"integration_secret": "test_token"}
mock_service_class.return_value = mock_service
@ -106,7 +106,7 @@ def mock_datasource_provider_service():
@pytest.fixture
def mock_notion_extractor():
"""Mock notion extractor class and instance."""
with patch("tasks.document_indexing_sync_task.NotionExtractor") as mock_extractor_class:
with patch("tasks.document_indexing_sync_task.NotionExtractor", autospec=True) as mock_extractor_class:
mock_extractor = MagicMock()
mock_extractor.get_notion_last_edited_time.return_value = "2024-01-01T00:00:00Z"
mock_extractor_class.return_value = mock_extractor

View File

@ -95,7 +95,7 @@ def mock_document_segments(document_ids):
@pytest.fixture
def mock_db_session():
"""Mock database session via session_factory.create_session()."""
with patch("tasks.duplicate_document_indexing_task.session_factory") as mock_sf:
with patch("tasks.duplicate_document_indexing_task.session_factory", autospec=True) as mock_sf:
session = MagicMock()
# Allow tests to observe session.close() via context manager teardown
session.close = MagicMock()
@ -118,7 +118,7 @@ def mock_db_session():
@pytest.fixture
def mock_indexing_runner():
"""Mock IndexingRunner."""
with patch("tasks.duplicate_document_indexing_task.IndexingRunner") as mock_runner_class:
with patch("tasks.duplicate_document_indexing_task.IndexingRunner", autospec=True) as mock_runner_class:
mock_runner = MagicMock(spec=IndexingRunner)
mock_runner_class.return_value = mock_runner
yield mock_runner
@ -127,7 +127,7 @@ def mock_indexing_runner():
@pytest.fixture
def mock_feature_service():
"""Mock FeatureService."""
with patch("tasks.duplicate_document_indexing_task.FeatureService") as mock_service:
with patch("tasks.duplicate_document_indexing_task.FeatureService", autospec=True) as mock_service:
mock_features = Mock()
mock_features.billing = Mock()
mock_features.billing.enabled = False
@ -141,7 +141,7 @@ def mock_feature_service():
@pytest.fixture
def mock_index_processor_factory():
"""Mock IndexProcessorFactory."""
with patch("tasks.duplicate_document_indexing_task.IndexProcessorFactory") as mock_factory:
with patch("tasks.duplicate_document_indexing_task.IndexProcessorFactory", autospec=True) as mock_factory:
mock_processor = MagicMock()
mock_processor.clean = Mock()
mock_factory.return_value.init_index_processor.return_value = mock_processor
@ -151,7 +151,7 @@ def mock_index_processor_factory():
@pytest.fixture
def mock_tenant_isolated_queue():
"""Mock TenantIsolatedTaskQueue."""
with patch("tasks.duplicate_document_indexing_task.TenantIsolatedTaskQueue") as mock_queue_class:
with patch("tasks.duplicate_document_indexing_task.TenantIsolatedTaskQueue", autospec=True) as mock_queue_class:
mock_queue = MagicMock(spec=TenantIsolatedTaskQueue)
mock_queue.pull_tasks.return_value = []
mock_queue.delete_task_key = Mock()
@ -168,7 +168,7 @@ def mock_tenant_isolated_queue():
class TestDuplicateDocumentIndexingTask:
"""Tests for the deprecated duplicate_document_indexing_task function."""
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task", autospec=True)
def test_duplicate_document_indexing_task_calls_core_function(self, mock_core_func, dataset_id, document_ids):
"""Test that duplicate_document_indexing_task calls the core _duplicate_document_indexing_task function."""
# Act
@ -177,7 +177,7 @@ class TestDuplicateDocumentIndexingTask:
# Assert
mock_core_func.assert_called_once_with(dataset_id, document_ids)
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task", autospec=True)
def test_duplicate_document_indexing_task_with_empty_document_ids(self, mock_core_func, dataset_id):
"""Test duplicate_document_indexing_task with empty document_ids list."""
# Arrange
@ -445,7 +445,7 @@ class TestDuplicateDocumentIndexingTaskCore:
class TestDuplicateDocumentIndexingTaskWithTenantQueue:
"""Tests for _duplicate_document_indexing_task_with_tenant_queue function."""
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task", autospec=True)
def test_tenant_queue_wrapper_calls_core_function(
self,
mock_core_func,
@ -464,7 +464,7 @@ class TestDuplicateDocumentIndexingTaskWithTenantQueue:
# Assert
mock_core_func.assert_called_once_with(dataset_id, document_ids)
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task", autospec=True)
def test_tenant_queue_wrapper_deletes_key_when_no_tasks(
self,
mock_core_func,
@ -484,7 +484,7 @@ class TestDuplicateDocumentIndexingTaskWithTenantQueue:
# Assert
mock_tenant_isolated_queue.delete_task_key.assert_called_once()
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task", autospec=True)
def test_tenant_queue_wrapper_processes_next_tasks(
self,
mock_core_func,
@ -514,7 +514,7 @@ class TestDuplicateDocumentIndexingTaskWithTenantQueue:
document_ids=document_ids,
)
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task", autospec=True)
def test_tenant_queue_wrapper_handles_core_function_error(
self,
mock_core_func,
@ -544,7 +544,7 @@ class TestDuplicateDocumentIndexingTaskWithTenantQueue:
class TestNormalDuplicateDocumentIndexingTask:
"""Tests for normal_duplicate_document_indexing_task function."""
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue", autospec=True)
def test_normal_task_calls_tenant_queue_wrapper(
self,
mock_wrapper_func,
@ -561,7 +561,7 @@ class TestNormalDuplicateDocumentIndexingTask:
tenant_id, dataset_id, document_ids, normal_duplicate_document_indexing_task
)
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue", autospec=True)
def test_normal_task_with_empty_document_ids(
self,
mock_wrapper_func,
@ -589,7 +589,7 @@ class TestNormalDuplicateDocumentIndexingTask:
class TestPriorityDuplicateDocumentIndexingTask:
"""Tests for priority_duplicate_document_indexing_task function."""
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue", autospec=True)
def test_priority_task_calls_tenant_queue_wrapper(
self,
mock_wrapper_func,
@ -606,7 +606,7 @@ class TestPriorityDuplicateDocumentIndexingTask:
tenant_id, dataset_id, document_ids, priority_duplicate_document_indexing_task
)
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue", autospec=True)
def test_priority_task_with_single_document(
self,
mock_wrapper_func,
@ -625,7 +625,7 @@ class TestPriorityDuplicateDocumentIndexingTask:
tenant_id, dataset_id, document_ids, priority_duplicate_document_indexing_task
)
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue")
@patch("tasks.duplicate_document_indexing_task._duplicate_document_indexing_task_with_tenant_queue", autospec=True)
def test_priority_task_with_large_batch(
self,
mock_wrapper_func,