test: use concrete integration execution fixtures (#43222)

This commit is contained in:
Asuka Minato authored and GitHub committed 2026-10-03 03:16:09 +00:00
1 parent b7bf3f8a29
commit e6e4cd9406
2 files changed
+34 -29

No files matched your search

@@ -6,7 +6,7 @@ TestContainers to ensure realistic database interactions and proper isolation.
"""
import json
from unittest.mock import MagicMock
from dataclasses import dataclass
import pytest
from faker import Faker
@@ -19,6 +19,17 @@ from models.model import AppMode
from models.workflow import WorkflowType
from services.workflow_ref_service import WorkflowRef
from services.workflow_service import WorkflowService
from tests.unit_tests.core.model_fixtures import make_model_instance
@dataclass(frozen=True)
class _ExecutedNode:
"""Node metadata consumed by single-step result formatting tests."""
node_type: str
title: str
error_strategy: ErrorStrategy | None
default_value_dict: dict[str, object]
class TestWorkflowService:
@@ -1558,14 +1569,13 @@ class TestWorkflowService:
from unittest.mock import patch
from core.model_manager import ModelInstance
from core.workflow.node_factory import DifyNodeFactory
# Act
with patch.object(
DifyNodeFactory,
"_build_model_instance_for_llm_node",
return_value=MagicMock(spec=ModelInstance),
return_value=make_model_instance(provider="openai", model="gpt-3.5-turbo"),
autospec=True,
):
result = workflow_service.run_free_workflow_node(
@@ -1639,13 +1649,10 @@ class TestWorkflowService:
from graphon.graph_events import NodeRunSucceededEvent
from graphon.node_events import NodeRunResult
from graphon.nodes.base.node import Node
# Create mock node
mock_node = MagicMock(spec=Node)
mock_node.node_type = BuiltinNodeTypes.START
mock_node.title = "Test Node"
mock_node.error_strategy = None
node = _ExecutedNode(
node_type=BuiltinNodeTypes.START, title="Test Node", error_strategy=None, default_value_dict={}
)
# Create mock result with valid metadata
mock_result = NodeRunResult(
@@ -1669,7 +1676,7 @@ class TestWorkflowService:
def event_generator():
yield mock_event
return mock_node, event_generator()
return node, event_generator()
workflow_service = WorkflowService()
@@ -1711,13 +1718,10 @@ class TestWorkflowService:
from graphon.graph_events import NodeRunFailedEvent
from graphon.node_events import NodeRunResult
from graphon.nodes.base.node import Node
# Create mock node
mock_node = MagicMock(spec=Node)
mock_node.node_type = BuiltinNodeTypes.LLM
mock_node.title = "Test Node"
mock_node.error_strategy = None
node = _ExecutedNode(
node_type=BuiltinNodeTypes.LLM, title="Test Node", error_strategy=None, default_value_dict={}
)
# Create mock failed result
mock_result = NodeRunResult(
@@ -1740,7 +1744,7 @@ class TestWorkflowService:
def event_generator():
yield mock_event
return mock_node, event_generator()
return node, event_generator()
workflow_service = WorkflowService()
@@ -1778,14 +1782,13 @@ class TestWorkflowService:
from graphon.graph_events import NodeRunFailedEvent
from graphon.node_events import NodeRunResult
from graphon.nodes.base.node import Node
# Create mock node with continue_on_error
mock_node = MagicMock(spec=Node)
mock_node.node_type = BuiltinNodeTypes.TOOL
mock_node.title = "Test Node"
mock_node.error_strategy = ErrorStrategy.DEFAULT_VALUE
mock_node.default_value_dict = {"default_output": "default_value"}
node = _ExecutedNode(
node_type=BuiltinNodeTypes.TOOL,
title="Test Node",
error_strategy=ErrorStrategy.DEFAULT_VALUE,
default_value_dict={"default_output": "default_value"},
)
# Create mock failed result
mock_result = NodeRunResult(
@@ -1808,7 +1811,7 @@ class TestWorkflowService:
def event_generator():
yield mock_event
return mock_node, event_generator()
return node, event_generator()
workflow_service = WorkflowService()
@@ -13,14 +13,14 @@ from uuid import uuid4
import pytest
from sqlalchemy import delete, func, select, update
from sqlalchemy.orm import Session
from sqlalchemy.orm import Session, sessionmaker
from core.rag.index_processor.constant.index_type import IndexStructureType, IndexTechniqueType
from models import Account, AccountStatus, Tenant, TenantAccountJoin, TenantAccountRole, TenantStatus
from models.dataset import Dataset, Document, DocumentSegment
from models.enums import DataSourceType, DocumentCreatedFrom, IndexingStatus, SegmentStatus
from services.knowledge.indexing.adapters.execution import build_document_indexing_service
from services.knowledge.indexing.errors import DocumentIsPausedError
from services.knowledge.indexing.execution import DocumentIndexingService
from services.knowledge.resource_scope import DatasetRef
from tasks.document_indexing_sync_task import document_indexing_sync_task
@@ -132,7 +132,7 @@ class TestDocumentIndexingSyncTask:
"""Integration tests for document_indexing_sync_task with real database assertions."""
@pytest.fixture
def mock_external_dependencies(self):
def mock_external_dependencies(self, db_session_with_containers: Session):
"""Patch only external collaborators; keep DB access real."""
with (
patch("tasks.document_indexing_sync_task.build_data_source_credentials") as mock_credentials,
@@ -152,7 +152,9 @@ class TestDocumentIndexingSyncTask:
index_processor.clean = Mock()
mock_index_processor_factory.return_value.init_index_processor.return_value = index_processor
indexing_runner = Mock(spec=DocumentIndexingService)
indexing_runner = build_document_indexing_service(
session_factory=sessionmaker(bind=db_session_with_containers.get_bind(), expire_on_commit=False)
)
indexing_runner.run = Mock()
mock_indexing_runner_class.return_value = indexing_runner