mirror of
https://github.com/langgenius/dify.git
synced 2026-10-30 18:34:29 +08:00
test: migrate conversation lifecycle sessions and ORM models to SQLite (#40656)
This commit is contained in:
@@ -8,7 +8,7 @@ in-memory SQLite sessions with persisted ORM rows.
|
||||
"""
|
||||
|
||||
import json
|
||||
from unittest.mock import MagicMock, Mock, patch
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
from sqlalchemy import asc, desc, event
|
||||
@@ -17,6 +17,11 @@ from sqlalchemy.orm import Session
|
||||
from core.app.entities.app_invoke_entities import InvokeFrom
|
||||
from libs.datetime_utils import naive_utc_now
|
||||
from models import Account, ConversationVariable
|
||||
from models.agent import (
|
||||
AgentConfigVersionKind,
|
||||
AgentWorkingResourceStatus,
|
||||
AgentWorkspaceBinding,
|
||||
)
|
||||
from models.enums import AppStatus, ConversationFromSource, ConversationStatus
|
||||
from models.model import App, AppMode, Conversation
|
||||
from services import conversation_service
|
||||
@@ -58,6 +63,21 @@ def _conversation_variable(
|
||||
)
|
||||
|
||||
|
||||
def _workspace_binding(binding_id: str) -> AgentWorkspaceBinding:
|
||||
return AgentWorkspaceBinding(
|
||||
id=binding_id,
|
||||
tenant_id=TENANT_ID,
|
||||
app_id=APP_ID,
|
||||
workspace_id="workspace-1",
|
||||
agent_id="agent-1",
|
||||
base_home_snapshot_id=None,
|
||||
agent_config_version_id="config-1",
|
||||
agent_config_version_kind=AgentConfigVersionKind.SNAPSHOT,
|
||||
backend_binding_ref="backend-binding-1",
|
||||
status=AgentWorkingResourceStatus.ACTIVE,
|
||||
)
|
||||
|
||||
|
||||
class ConversationServiceTestDataFactory:
|
||||
"""
|
||||
Factory for creating test ORM objects.
|
||||
@@ -157,7 +177,7 @@ def test_delete_retires_then_commits_before_enqueue(monkeypatch: pytest.MonkeyPa
|
||||
sqlite_session.add(conversation)
|
||||
sqlite_session.flush()
|
||||
events: list[str] = []
|
||||
get_binding = MagicMock(return_value=Mock(id="conversation-binding-1"))
|
||||
get_binding = MagicMock(return_value=_workspace_binding("conversation-binding-1"))
|
||||
retire_binding = MagicMock(side_effect=lambda **_kwargs: events.append("retire") or "conversation-binding-1")
|
||||
monkeypatch.setattr(ConversationService, "get_conversation", MagicMock(return_value=conversation))
|
||||
monkeypatch.setattr(AgentWorkspaceService, "get_active_binding", get_binding)
|
||||
@@ -185,12 +205,16 @@ def test_delete_commit_failure_does_not_enqueue(monkeypatch: pytest.MonkeyPatch,
|
||||
sqlite_session.flush()
|
||||
rollback_events: list[str] = []
|
||||
event.listen(sqlite_session, "after_rollback", lambda _session: rollback_events.append("rollback"))
|
||||
monkeypatch.setattr(sqlite_session, "commit", MagicMock(side_effect=RuntimeError("commit failed")))
|
||||
|
||||
def fail_commit(_session: Session) -> None:
|
||||
raise RuntimeError("commit failed")
|
||||
|
||||
event.listen(sqlite_session, "before_commit", fail_commit, once=True)
|
||||
monkeypatch.setattr(ConversationService, "get_conversation", MagicMock(return_value=conversation))
|
||||
monkeypatch.setattr(
|
||||
AgentWorkspaceService,
|
||||
"get_active_binding",
|
||||
MagicMock(return_value=Mock(id="binding-1")),
|
||||
MagicMock(return_value=_workspace_binding("binding-1")),
|
||||
)
|
||||
monkeypatch.setattr(AgentWorkspaceService, "retire_binding", MagicMock(return_value="binding-1"))
|
||||
enqueue_collection = MagicMock()
|
||||
|
||||
Reference in New Issue
Block a user