test: migrate conversation lifecycle sessions and ORM models to SQLite (#40656)

This commit is contained in:
Asuka Minato
2026-08-13 05:20:10 +00:00
committed by GitHub
parent 6b5c04e7d3
commit 211344d0b0
@@ -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()