| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | 
                        - import uuid
 - from unittest.mock import MagicMock, patch
 - 
 - from core.app.entities.app_invoke_entities import InvokeFrom
 - from services.conversation_service import ConversationService
 - 
 - 
 - class TestConversationService:
 -     def test_pagination_with_empty_include_ids(self):
 -         """Test that empty include_ids returns empty result"""
 -         mock_session = MagicMock()
 -         mock_app_model = MagicMock(id=str(uuid.uuid4()))
 -         mock_user = MagicMock(id=str(uuid.uuid4()))
 - 
 -         result = ConversationService.pagination_by_last_id(
 -             session=mock_session,
 -             app_model=mock_app_model,
 -             user=mock_user,
 -             last_id=None,
 -             limit=20,
 -             invoke_from=InvokeFrom.WEB_APP,
 -             include_ids=[],  # Empty include_ids should return empty result
 -             exclude_ids=None,
 -         )
 - 
 -         assert result.data == []
 -         assert result.has_more is False
 -         assert result.limit == 20
 - 
 -     def test_pagination_with_non_empty_include_ids(self):
 -         """Test that non-empty include_ids filters properly"""
 -         mock_session = MagicMock()
 -         mock_app_model = MagicMock(id=str(uuid.uuid4()))
 -         mock_user = MagicMock(id=str(uuid.uuid4()))
 - 
 -         # Mock the query results
 -         mock_conversations = [MagicMock(id=str(uuid.uuid4())) for _ in range(3)]
 -         mock_session.scalars.return_value.all.return_value = mock_conversations
 -         mock_session.scalar.return_value = 0
 - 
 -         with patch("services.conversation_service.select") as mock_select:
 -             mock_stmt = MagicMock()
 -             mock_select.return_value = mock_stmt
 -             mock_stmt.where.return_value = mock_stmt
 -             mock_stmt.order_by.return_value = mock_stmt
 -             mock_stmt.limit.return_value = mock_stmt
 -             mock_stmt.subquery.return_value = MagicMock()
 - 
 -             result = ConversationService.pagination_by_last_id(
 -                 session=mock_session,
 -                 app_model=mock_app_model,
 -                 user=mock_user,
 -                 last_id=None,
 -                 limit=20,
 -                 invoke_from=InvokeFrom.WEB_APP,
 -                 include_ids=["conv1", "conv2"],  # Non-empty include_ids
 -                 exclude_ids=None,
 -             )
 - 
 -             # Verify the where clause was called with id.in_
 -             assert mock_stmt.where.called
 - 
 -     def test_pagination_with_empty_exclude_ids(self):
 -         """Test that empty exclude_ids doesn't filter"""
 -         mock_session = MagicMock()
 -         mock_app_model = MagicMock(id=str(uuid.uuid4()))
 -         mock_user = MagicMock(id=str(uuid.uuid4()))
 - 
 -         # Mock the query results
 -         mock_conversations = [MagicMock(id=str(uuid.uuid4())) for _ in range(5)]
 -         mock_session.scalars.return_value.all.return_value = mock_conversations
 -         mock_session.scalar.return_value = 0
 - 
 -         with patch("services.conversation_service.select") as mock_select:
 -             mock_stmt = MagicMock()
 -             mock_select.return_value = mock_stmt
 -             mock_stmt.where.return_value = mock_stmt
 -             mock_stmt.order_by.return_value = mock_stmt
 -             mock_stmt.limit.return_value = mock_stmt
 -             mock_stmt.subquery.return_value = MagicMock()
 - 
 -             result = ConversationService.pagination_by_last_id(
 -                 session=mock_session,
 -                 app_model=mock_app_model,
 -                 user=mock_user,
 -                 last_id=None,
 -                 limit=20,
 -                 invoke_from=InvokeFrom.WEB_APP,
 -                 include_ids=None,
 -                 exclude_ids=[],  # Empty exclude_ids should not filter
 -             )
 - 
 -             # Result should contain the mocked conversations
 -             assert len(result.data) == 5
 - 
 -     def test_pagination_with_non_empty_exclude_ids(self):
 -         """Test that non-empty exclude_ids filters properly"""
 -         mock_session = MagicMock()
 -         mock_app_model = MagicMock(id=str(uuid.uuid4()))
 -         mock_user = MagicMock(id=str(uuid.uuid4()))
 - 
 -         # Mock the query results
 -         mock_conversations = [MagicMock(id=str(uuid.uuid4())) for _ in range(3)]
 -         mock_session.scalars.return_value.all.return_value = mock_conversations
 -         mock_session.scalar.return_value = 0
 - 
 -         with patch("services.conversation_service.select") as mock_select:
 -             mock_stmt = MagicMock()
 -             mock_select.return_value = mock_stmt
 -             mock_stmt.where.return_value = mock_stmt
 -             mock_stmt.order_by.return_value = mock_stmt
 -             mock_stmt.limit.return_value = mock_stmt
 -             mock_stmt.subquery.return_value = MagicMock()
 - 
 -             result = ConversationService.pagination_by_last_id(
 -                 session=mock_session,
 -                 app_model=mock_app_model,
 -                 user=mock_user,
 -                 last_id=None,
 -                 limit=20,
 -                 invoke_from=InvokeFrom.WEB_APP,
 -                 include_ids=None,
 -                 exclude_ids=["conv1", "conv2"],  # Non-empty exclude_ids
 -             )
 - 
 -             # Verify the where clause was called for exclusion
 -             assert mock_stmt.where.called
 
 
  |