pychatbot / tests /test_service /test_MySQLService.py
kltn20133118's picture
Upload 203 files
f7b9e98 verified
raw
history blame
24.2 kB
import unittest
from unittest.mock import patch
from response import ResponseMySQL as res
import sys
import os
app_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(0, app_path)
from entity import Database_Entity
from service.MySQLService import edit_chat, delete_chat, render_chat_history, load_chat_history
from request.RequestMySQL import RequestEditNameChat, RequestDeleteChat, RequestRenderChatHistory, \
RequestLoadChatHistory
from response.ResponseMySQL import ResponseEditChat, ResponseDeleteChat, ReponseError, Message, \
ResponseRenderChatHistory, UserInfoListResponse, ListUserChat, ResponseLoadChatHistory, ChatDetail, ListChatDeTail
class TestMySQLService(unittest.TestCase):
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf')
def test_edit_chat_success(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = 'example@example.com'
name_old = 'chat123'
name_new = 'chat1234'
mock_support_function.check_email_service.return_value = email
mock_chat_history_repo.getIdChatHistoryByUserIdAndNameChat.return_value = True
mock_chat_history_repo.getIdChatHistoryByUserIdAndNameChatNew.return_value = None
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ResponseEditChat)
self.assertEqual(response.status, 200)
@patch('service.MySQLService.UserRepository.getEmailUserByIdFix')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf')
def test_edit_chat_server_error(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = 'example@example.com'
name_old = 'chat123'
name_new = 'chat1234'
mock_support_function.check_email_service.side_effect = Exception("error")
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 500)
self.assertEqual(response.data.message, "Server Error")
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf')
def test_edit_chat_id_not_exist(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
name_old = 'chat123'
name_new = 'chat1234'
mock_support_function.check_email_service.return_value = ReponseError(status=400, data=res.Message(
message="Id not exist"))
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Id not exist'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf')
def test_edit_chat_email_empty(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = '1'
email = None
name_old = 'chat123'
name_new = 'chat1234'
mock_support_function.check_email_service.return_value = res.ReponseError(status=400, data=res.Message(
message="Email is empty"))
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Email is empty'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf')
def test_edit_chat_email_in_valid(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = "20133118"
name_old = 'chat123'
name_new = 'chat1234'
mock_support_function.check_email_service.return_value = res.ReponseError(status=400, data=res.Message(
message="Email invalid"))
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Email invalid'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
def test_edit_chat_name_old_empty(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = "20133118@gmail.com"
name_old = ""
name_new = 'chat1234'
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='name_old is empty'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
def test_edit_chat_name_new_empty(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = "20133118@gmail.com"
name_old = 'chat123'
name_new = ''
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='name_new is empty'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
def test_edit_chat_update_error(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = "20133118@gmail.com"
name_old = 'chat123'
name_new = 'chat1234'
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
mock_chat_history_repo.getIdChatHistoryByUserIdAndNameChat.return_value = False
mock_chat_history_repo.getIdChatHistoryByUserIdAndNameChatNew.return_value = None
request = RequestEditNameChat(user_id=user_id, name_old=name_old, name_new=name_new)
response = edit_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 500)
self.assertEqual(response.data, Message(message='Update chat error'))
class TestDeleteChat(unittest.TestCase):
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
def test_delete_chat_success(self, mock_support_function, mock_detail_chat_repo, mock_chat_history_repo,
mock_user_repo):
user_id = "1"
email = 'example@example.com'
chat_name = 'test'
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
mock_detail_chat_repo.delete_chat_detail.return_value = True
mock_chat_history_repo.deleteChatHistory.return_value = True
request = RequestDeleteChat(user_id=user_id, chat_name=chat_name)
response = delete_chat(request)
self.assertIsInstance(response, ResponseDeleteChat)
self.assertEqual(response.status, 200)
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', side_effect=Exception("Error"))
def test_delete_chat_server_error(self, mock_support_function, mock_detail_chat_repo, mock_chat_history_repo,
mock_user_repo):
user_id = "1"
email = 'example@example.com'
chat_name = 'test'
mock_detail_chat_repo.delete_chat_detail.return_value = True
mock_chat_history_repo.deleteChatHistory.return_value = True
request = RequestDeleteChat(user_id=user_id, chat_name=chat_name)
response = delete_chat(request)
self.assertIsInstance(response, ResponseDeleteChat)
self.assertEqual(response.status, 500)
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=ReponseError(status=400, data=res.Message(
message="Id not exist")))
def test_delete_chat_id_not_exist(self, mock_support_function, mock_detail_chat_repo, mock_chat_history_repo,
mock_user_repo):
user_id = "1"
email = 'example@example.com'
chat_name = 'test'
mock_user_repo.getEmailUserByIdFix.return_value = None
request = RequestDeleteChat(user_id=user_id, chat_name=chat_name)
response = delete_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Id not exist'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=ReponseError(status=400, data=res.Message(
message="Email is empty")))
def test_delete_chat_email_empty(self, mock_support_function, mock_detail_chat_repo, mock_chat_history_repo,
mock_user_repo):
user_id = "1"
email = ""
chat_name = 'test'
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
request = RequestDeleteChat(user_id=user_id, chat_name=chat_name)
response = delete_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Email is empty'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=ReponseError(status=400, data=res.Message(
message="Email invalid")))
def test_delete_chat_email_invalid(self, mock_support_function, mock_detail_chat_repo, mock_chat_history_repo,
mock_user_repo):
user_id = "1"
email = "20133118"
chat_name = 'test'
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
request = RequestDeleteChat(user_id=user_id, chat_name=chat_name)
response = delete_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Email invalid'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
def test_delete_chat_chatname_empty(self, mock_support_function, mock_detail_chat_repo, mock_chat_history_repo,
mock_user_repo):
user_id = "1"
email = "20133118@gmail.com"
chat_name = ""
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
request = RequestDeleteChat(user_id=user_id, chat_name=chat_name)
response = delete_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='chat_name is empty'))
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
def test_delete_chat_error_1(self, mock_support_function, mock_detail_chat_repo, mock_chat_history_repo,
mock_user_repo):
user_id = "1"
email = "20133118@gmail.com"
chat_name = 'test'
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
mock_chat_history_repo.deleteChatHistory.return_value = False
request = RequestDeleteChat(user_id=user_id, chat_name=chat_name)
response = delete_chat(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 500)
self.assertEqual(response.data, Message(message='Delete conversation chat error'))
class TestRenderChatHistory(unittest.TestCase):
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
def test_render_chat_history_success(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = 'example@example.com'
chat_detail = [Database_Entity.ChatHistory(id=1, email="example@example.com", name_chat="chat1"),
Database_Entity.ChatHistory(id=2, email="example@example.com", name_chat="chat2")]
mock_user_repo.getEmailUserByIdFix.return_value = (email,)
mock_chat_history_repo.getChatHistoryById.return_value = chat_detail
request = RequestRenderChatHistory(user_id=user_id)
response = render_chat_history(request)
self.assertIsInstance(response, ResponseRenderChatHistory)
self.assertEqual(response.status, 200)
self.assertIsInstance(response.data, UserInfoListResponse)
self.assertEqual(len(response.data.chat), 2) # Kiểm tra số lượng chat được trả về
self.assertIsInstance(response.data.chat[0], ListUserChat)
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf.check_email_service', side_effect=Exception("Error"))
def test_render_chat_history_server_err(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = 'example@example.com'
chat_detail = [Database_Entity.ChatHistory(id=1, email="example@example.com", name_chat="chat1"),
Database_Entity.ChatHistory(id=2, email="example@example.com", name_chat="chat2")]
mock_user_repo.getEmailUserByIdFix.side_effect = Exception("error")
request = RequestRenderChatHistory(user_id=user_id)
response = render_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 500)
self.assertEqual(response.data.message, "Server Error")
@patch('service.MySQLService.UserRepository')
@patch('service.MySQLService.ChatHistoryRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=ReponseError(status=400, data=res.Message(
message="Id not exist")))
def test_render_chat_history_id_not_exist(self, mock_support_function, mock_chat_history_repo, mock_user_repo):
user_id = "1"
email = 'example@example.com'
chat_detail = [Database_Entity.ChatHistory(id=1, email="example@example.com", name_chat="chat1"),
Database_Entity.ChatHistory(id=2, email="example@example.com", name_chat="chat2")]
mock_user_repo.getEmailUserByIdFix.return_value = None
request = RequestRenderChatHistory(user_id=user_id)
response = render_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Id not exist'))
class TestLoadChatHistory(unittest.TestCase):
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=True)
@patch('service.MySQLService.ChatHistoryRepository')
def test_load_chat_history_success(self, mock_chat_history_repo, mock_support_functon, mock_detail_chat_repo):
chat_id = "1"
user_id = "1"
chat_detail = [Database_Entity.DetailChat(id=1, chat_id=1, YouMessage="question1", AiMessage="AImessage1",
data_relevant="abc", source_file="abcd"),
Database_Entity.DetailChat(id=2, chat_id=1, YouMessage="question2", AiMessage="AImessage2",
data_relevant="abc", source_file="abcd")]
mock_chat_history_repo.getChatHistoryByChatIdAndUserId.return_value = True
mock_detail_chat_repo.getListDetailChatByChatId.return_value = chat_detail
request = RequestLoadChatHistory(user_id=user_id, chat_id=chat_id)
response = load_chat_history(request)
self.assertIsInstance(response, ResponseLoadChatHistory)
self.assertEqual(response.status, 200)
self.assertIsInstance(response.data, ListChatDeTail)
self.assertEqual(len(response.data.detail_chat), 2)
self.assertIsInstance(response.data.detail_chat[0], ChatDetail)
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.ChatHistoryRepository', return_value=True)
@patch('service.MySQLService.sf.check_email_service', side_effect=Exception("Error"))
def test_load_chat_history_server_err(self, mock_support_function, mock_chat_history_repo, mock_detail_chat_repo):
chat_id = "1"
user_id = "1"
chat_detail = [Database_Entity.DetailChat(id=1, chat_id=1, YouMessage="question1", AiMessage="AImessage1",
data_relevant="abc", source_file="abcd"),
Database_Entity.DetailChat(id=2, chat_id=1, YouMessage="question2", AiMessage="AImessage2",
data_relevant="abc", source_file="abcd")]
mock_chat_history_repo.getChatHistoryByChatIdAndUserId.return_value = True
mock_detail_chat_repo.getListDetailChatByChatId.side_effect = Exception("error")
request = RequestLoadChatHistory(user_id=user_id, chat_id=chat_id)
response = load_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 500)
self.assertEqual(response.data.message, "Server Error")
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value="20133118@gmail.com")
@patch('service.MySQLService.ChatHistoryRepository', return_value=True)
def test_load_chat_history_error(self, mock_repo1, mock_support_function, mock_detail_chat_repo):
chat_id = None
user_id = "1"
request = RequestLoadChatHistory(user_id=user_id, chat_id=chat_id)
mock_repo1.getChatHistoryByChatIdAndUserId.return_value = None
response = load_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='chat_id is empty'))
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value="12345@gmail.com")
@patch('service.MySQLService.ChatHistoryRepository')
def test_load_chat_history_not_found_chat(self, mock_repo1, mock_support_function, mock_detail_chat_repo):
chat_id = "1"
user_id = None
mock_repo1.getChatHistoryByChatIdAndUserId.return_value = None
request = RequestLoadChatHistory(user_id=user_id, chat_id=chat_id)
response = load_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Not found chat width chat_id and user_id'))
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=res.ReponseError(status=400,
data=res.Message(message="user_id must be an integer")))
@patch('service.MySQLService.ChatHistoryRepository')
def test_load_chat_history_user_id_str(self, mock_repo1, mock_support_function, mock_detail_chat_repo):
chat_id = "1"
user_id = None
mock_repo1.getChatHistoryByChatIdAndUserId.return_value = None
request = RequestLoadChatHistory(user_id=user_id, chat_id=chat_id)
response = load_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='user_id must be an integer'))
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=res.ReponseError(status=400,
data=res.Message(
message="Id not exist")))
@patch('service.MySQLService.ChatHistoryRepository')
def test_load_chat_history_user_id_str(self, mock_repo1, mock_support_function, mock_detail_chat_repo):
chat_id = "1"
user_id = None
mock_repo1.getChatHistoryByChatIdAndUserId.return_value = None
request = RequestLoadChatHistory(user_id=user_id, chat_id=chat_id)
response = load_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Id not exist'))
@patch('service.MySQLService.DetailChatRepository')
@patch('service.MySQLService.sf.check_email_service', return_value=res.ReponseError(status=400,
data=res.Message(
message="Id not exist")))
@patch('service.MySQLService.ChatHistoryRepository')
def test_load_chat_history_user_id_str(self, mock_repo1, mock_support_function, mock_detail_chat_repo):
chat_id = "1"
user_id = None
mock_repo1.getChatHistoryByChatIdAndUserId.return_value = None
request = RequestLoadChatHistory(user_id=user_id, chat_id=chat_id)
response = load_chat_history(request)
self.assertIsInstance(response, ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, Message(message='Id not exist'))
if __name__ == '__main__':
unittest.main()