diff --git a/api/tests/unit_tests/services/test_conversation_service.py b/api/tests/unit_tests/services/test_conversation_service.py index 641731c4384..3d73922fd4e 100644 --- a/api/tests/unit_tests/services/test_conversation_service.py +++ b/api/tests/unit_tests/services/test_conversation_service.py @@ -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()