You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_conversation_service.py 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import uuid
  2. from unittest.mock import MagicMock, patch
  3. from core.app.entities.app_invoke_entities import InvokeFrom
  4. from services.conversation_service import ConversationService
  5. class TestConversationService:
  6. def test_pagination_with_empty_include_ids(self):
  7. """Test that empty include_ids returns empty result"""
  8. mock_session = MagicMock()
  9. mock_app_model = MagicMock(id=str(uuid.uuid4()))
  10. mock_user = MagicMock(id=str(uuid.uuid4()))
  11. result = ConversationService.pagination_by_last_id(
  12. session=mock_session,
  13. app_model=mock_app_model,
  14. user=mock_user,
  15. last_id=None,
  16. limit=20,
  17. invoke_from=InvokeFrom.WEB_APP,
  18. include_ids=[], # Empty include_ids should return empty result
  19. exclude_ids=None,
  20. )
  21. assert result.data == []
  22. assert result.has_more is False
  23. assert result.limit == 20
  24. def test_pagination_with_non_empty_include_ids(self):
  25. """Test that non-empty include_ids filters properly"""
  26. mock_session = MagicMock()
  27. mock_app_model = MagicMock(id=str(uuid.uuid4()))
  28. mock_user = MagicMock(id=str(uuid.uuid4()))
  29. # Mock the query results
  30. mock_conversations = [MagicMock(id=str(uuid.uuid4())) for _ in range(3)]
  31. mock_session.scalars.return_value.all.return_value = mock_conversations
  32. mock_session.scalar.return_value = 0
  33. with patch("services.conversation_service.select") as mock_select:
  34. mock_stmt = MagicMock()
  35. mock_select.return_value = mock_stmt
  36. mock_stmt.where.return_value = mock_stmt
  37. mock_stmt.order_by.return_value = mock_stmt
  38. mock_stmt.limit.return_value = mock_stmt
  39. mock_stmt.subquery.return_value = MagicMock()
  40. result = ConversationService.pagination_by_last_id(
  41. session=mock_session,
  42. app_model=mock_app_model,
  43. user=mock_user,
  44. last_id=None,
  45. limit=20,
  46. invoke_from=InvokeFrom.WEB_APP,
  47. include_ids=["conv1", "conv2"], # Non-empty include_ids
  48. exclude_ids=None,
  49. )
  50. # Verify the where clause was called with id.in_
  51. assert mock_stmt.where.called
  52. def test_pagination_with_empty_exclude_ids(self):
  53. """Test that empty exclude_ids doesn't filter"""
  54. mock_session = MagicMock()
  55. mock_app_model = MagicMock(id=str(uuid.uuid4()))
  56. mock_user = MagicMock(id=str(uuid.uuid4()))
  57. # Mock the query results
  58. mock_conversations = [MagicMock(id=str(uuid.uuid4())) for _ in range(5)]
  59. mock_session.scalars.return_value.all.return_value = mock_conversations
  60. mock_session.scalar.return_value = 0
  61. with patch("services.conversation_service.select") as mock_select:
  62. mock_stmt = MagicMock()
  63. mock_select.return_value = mock_stmt
  64. mock_stmt.where.return_value = mock_stmt
  65. mock_stmt.order_by.return_value = mock_stmt
  66. mock_stmt.limit.return_value = mock_stmt
  67. mock_stmt.subquery.return_value = MagicMock()
  68. result = ConversationService.pagination_by_last_id(
  69. session=mock_session,
  70. app_model=mock_app_model,
  71. user=mock_user,
  72. last_id=None,
  73. limit=20,
  74. invoke_from=InvokeFrom.WEB_APP,
  75. include_ids=None,
  76. exclude_ids=[], # Empty exclude_ids should not filter
  77. )
  78. # Result should contain the mocked conversations
  79. assert len(result.data) == 5
  80. def test_pagination_with_non_empty_exclude_ids(self):
  81. """Test that non-empty exclude_ids filters properly"""
  82. mock_session = MagicMock()
  83. mock_app_model = MagicMock(id=str(uuid.uuid4()))
  84. mock_user = MagicMock(id=str(uuid.uuid4()))
  85. # Mock the query results
  86. mock_conversations = [MagicMock(id=str(uuid.uuid4())) for _ in range(3)]
  87. mock_session.scalars.return_value.all.return_value = mock_conversations
  88. mock_session.scalar.return_value = 0
  89. with patch("services.conversation_service.select") as mock_select:
  90. mock_stmt = MagicMock()
  91. mock_select.return_value = mock_stmt
  92. mock_stmt.where.return_value = mock_stmt
  93. mock_stmt.order_by.return_value = mock_stmt
  94. mock_stmt.limit.return_value = mock_stmt
  95. mock_stmt.subquery.return_value = MagicMock()
  96. result = ConversationService.pagination_by_last_id(
  97. session=mock_session,
  98. app_model=mock_app_model,
  99. user=mock_user,
  100. last_id=None,
  101. limit=20,
  102. invoke_from=InvokeFrom.WEB_APP,
  103. include_ids=None,
  104. exclude_ids=["conv1", "conv2"], # Non-empty exclude_ids
  105. )
  106. # Verify the where clause was called for exclusion
  107. assert mock_stmt.where.called