import unittest
from unittest.mock import MagicMock, patch
from datetime import datetime
from apps.db.mysql import MysqlDB, Conversation
from apps.logger import get_logger
from apps.services.conversation import ConversationManager
class TestUserQaRecordManager(unittest.TestCase):
def test_get_user_qa_record_by_user(self):
user_sub = "test_user_sub"
with patch.object(MysqlDB, 'get_session') as mock_get_session:
mock_session = MagicMock()
mock_query = MagicMock()
mock_all = MagicMock(return_value=["result"])
mock_query.filter().all = mock_all
mock_session.query.return_value = mock_query
mock_get_session.return_value.__enter__.return_value = mock_session
result = ConversationManager.get_conversation_by_user(user_sub)
self.assertEqual(result, ["result"])
def test_get_user_qa_record_by_session_id(self):
session_id = "test_session_id"
with patch.object(MysqlDB, 'get_session') as mock_get_session:
mock_session = MagicMock()
mock_query = MagicMock()
mock_first = MagicMock(return_value="result")
mock_query.filter().first = mock_first
mock_session.query.return_value = mock_query
mock_get_session.return_value.__enter__.return_value = mock_session
result = ConversationManager.get_conversation_by_conversation_id(session_id)
self.assertEqual(result, "result")
def test_add_user_qa_record_by_user(self):
user_sub = "test_user_sub"
with patch.object(MysqlDB, 'get_session') as mock_get_session:
mock_session = MagicMock()
mock_add = MagicMock()
mock_commit = MagicMock()
mock_session.add = mock_add
mock_session.commit = mock_commit
mock_get_session.return_value.__enter__.return_value = mock_session
result = ConversationManager.add_conversation_by_user(user_sub)
self.assertIsInstance(result, str)
def test_update_user_qa_record_by_session_id(self):
session_id = "test_session_id"
title = "test_title"
mock_user_qa_record = Conversation(id=session_id, title=title)
with patch.object(ConversationManager, 'get_user_qa_record_by_session_id', return_value=mock_user_qa_record):
with patch.object(MysqlDB, 'get_session') as mock_get_session:
mock_session = MagicMock()
mock_query = MagicMock()
mock_update = MagicMock()
mock_commit = MagicMock()
mock_session.query.return_value = mock_query
mock_query.filter().update = mock_update
mock_session.commit = mock_commit
mock_get_session.return_value.__enter__.return_value = mock_session
result = ConversationManager.update_conversation_by_conversation_id(session_id, title)
self.assertIsInstance(result, Conversation)
def test_delete_user_qa_record_by_session_id(self):
session_id = "test_session_id"
with patch.object(MysqlDB, 'get_session') as mock_get_session:
mock_session = MagicMock()
mock_query = MagicMock()
mock_delete = MagicMock()
mock_commit = MagicMock()
mock_session.query.return_value = mock_query
mock_query.filter().delete = mock_delete
mock_session.commit = mock_commit
mock_get_session.return_value.__enter__.return_value = mock_session
ConversationManager.delete_conversation_by_conversation_id(session_id)
mock_delete.assert_called_once()
def test_delete_user_qa_record_by_user(self):
user_sub = "test_user_sub"
with patch.object(MysqlDB, 'get_session') as mock_get_session:
mock_session = MagicMock()
mock_query = MagicMock()
mock_delete = MagicMock()
mock_commit = MagicMock()
mock_session.query.return_value = mock_query
mock_query.filter().delete = mock_delete
mock_session.commit = mock_commit
mock_get_session.return_value.__enter__.return_value = mock_session
ConversationManager.delete_conversation_by_user(user_sub)
mock_delete.assert_called_once()
if __name__ == "__main__":
unittest.main()