mirror of
https://github.com/langgenius/dify.git
synced 2026-10-04 13:47:55 +08:00
test: use concrete integration execution fixtures (#43222)
This commit is contained in:
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()
|
||||
|
||||
|
||||
+6
-4
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user