pychatbot / tests /test_controller /test_UserController.py
kltn20133118's picture
Upload 258 files
13ba451 verified
import os
import sys
from unittest.mock import patch, Mock, MagicMock
from fastapi.testclient import TestClient
app_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(0, app_path)
from controller import UserController
from response import ResponseDefault as res1
client = TestClient(UserController.router)
@patch('function.support_function.check_email_service')
@patch('function.support_function.check_email_empty_invalid', return_value = True)
@patch('service.UserService.check_email')
@patch('service.UserService.get_user1')
@patch('repository.UserInfoRepository.getUserInfo')
@patch('repository.UserInfoRepository.updateUserInfo')
@patch('repository.UserInfoRepository.addUserInfo')
@patch('service.UserService.update_info_user')
def test_update_user_info_success(mock_update_info_user, mock_add_user_info, mock_update_user_info, mock_get_user_info, mock_get_user, mock_check_email, mock_check1, mock_get_email_by_id):
mock_get_email_by_id.return_value = "old_email@example.com"
mock_get_user.return_value = Mock() # Simulate user exists
mock_get_user_info.return_value = Mock()
response = client.put("/update_user_info", json={"user_id":1,
"email": "new_email@example.com",
"uid":"uid123",
"display_name":"New Name",
"photo_url":"http://photo.url"})
assert response.json()['status'] == 200
assert response.json() == {
"status": 200,
"data": {
"message": "User info updated successfully",
}
}
from response import ResponseUser as res
@patch('function.support_function.check_email_service')
@patch('function.support_function.check_email_empty_invalid',return_value = True)
@patch('repository.UserRepository.getEmailUserByIdFix')
def test_update_user_info_id_not_exist(mock_get_email_by_id,mock_check1,mock_check2):
mock_check2.return_value = res1.ReponseError(status=400, data=res.Message(
message="Id not exist"))
response = client.put("/update_user_info", json={"user_id":1,
"email": "new_email@example.com",
"uid":"uid123",
"display_name":"New Name",
"photo_url":"http://photo.url"})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Id not exist",
}
}
def test_update_user_info_email_empty():
response = client.put("/update_user_info", json={"user_id":1,
"email": None,
"uid":"uid123",
"display_name":"New Name",
"photo_url":"http://photo.url"})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "email field is required.",
}
}
@patch('function.support_function.check_email_service', return_value = "20133118@gmail.com")
@patch('service.UserService.sf.check_email_empty_invalid')
def test_update_user_info_email_invalid(mock_check,mock_service):
mock_check.return_value = res.ReponseError(status=400, data=res.Message(
message="Email invalid"))
response = client.put("/update_user_info", json={"user_id":1,
"email": "20133",
"uid":"uid123",
"display_name":"New Name",
"photo_url":"http://photo.url"})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Email invalid",
}
}
@patch('function.support_function.check_email_service', return_value = "20133118@gmail.com")
@patch('service.UserService.sf.check_email_empty_invalid')
@patch('service.UserService.get_user1')
def test_update_user_info_email_or_password_error(mock_get_user, mock_check_email, mock_get_email_by_id):
mock_get_email_by_id.return_value = "old_email@example.com"
mock_check_email.return_value = True
mock_get_user.return_value = None
response = client.put("/update_user_info", json={"user_id":1,
"email": "nhuy@gmail.com",
"uid":"uid123",
"display_name":"New Name",
"photo_url":"http://photo.url"})
assert response.json()['status'] == 404
assert response.json() == {
"status": 404,
"data": {
"message": "Not found user",
}
}
@patch('function.support_function.check_email_service', return_value = "20133118@gmail.com")
@patch('service.UserService.check_email')
@patch('repository.UserInfoRepository.getUserInfo')
@patch('repository.UserRepository.getEmailUserByIdFix', return_value = "20133118@gmail.com")
def test_check_info_google_success(mock_check,mock_user_info_repo, mock_check_email,mock_user_repo_email):
mock_user_info_repo.return_value = Mock()
user_id = "1"
response = client.get("/check_info_google", params={"user_id": user_id})
assert response.json()['status'] == 200
assert response.json() == {
"status": 200,
"data": {
"check": True,
}
}
@patch('function.support_function.check_email_service', return_value = res.ReponseError(status=400, data=res.Message(
message="Id not exist")))
@patch('repository.UserRepository.getEmailUserByIdFix', return_value = "20133118@gmail.com")
def test_check_info_google_id_not_exist(mock_check1,mock_user_repo):
user_id = "1"
response = client.get("/check_info_google", params={"user_id": user_id})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Id not exist",
}
}
@patch('function.support_function.check_email_service', return_value=res.ReponseError(status=400, data=res.Message(
message="Email is empty")))
@patch('repository.UserRepository.getEmailUserByIdFix', return_value = "20133118@gmail.com")
def test_check_info_google_email_empty(mock_check1,mock_user_repo_id):
user_id = "1"
response = client.get("/check_info_google", params={"user_id": user_id})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Email is empty",
}
}
@patch('function.support_function.check_email_service', return_value = res.ReponseError(status=400, data=res.Message(
message="Email invalid")))
@patch('repository.UserRepository.getEmailUserByIdFix', return_value = "20133118@gmail.com")
def test_check_info_google_email_invalid(mock_check_1,mock_user_repo):
user_id = "1"
response = client.get("/check_info_google", params={"user_id": user_id})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Email invalid",
}
}
@patch('service.UserService.sf.check_email_empty_invalid', return_value=True)
@patch('service.UserService.UserInfoRepository')
def test_check_info_google_by_email_success(mock_user_info_repo, mock_check_email):
email = "test@gmail.com"
mock_user_info_repo.getUserInfo.return_value = Mock()
response = client.get("/check_info_google_signup", params={"email": email})
assert response.json()['status'] == 200
assert response.json() == {
"status": 200,
"data": {
"check": True,
}
}
def test_check_info_google_signup_email_empty():
email = ""
response = client.get("/check_info_google_signup", params={"email": None})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Email is required.",
}
}
def test_check_info_google_signup_email_invalid():
email ="quangphuc"
response = client.get("/check_info_google_signup", params={"email": email})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Email invalid",
}
}
@patch('service.UserService.sf.check_email_service')
@patch('service.UserService.check_email')
@patch('service.UserService.get_user1')
@patch('repository.UserLoginRepository.getUserSessionIdByUserEmail')
def test_check_state_login_success(mock_user_login_repo,mock_get_user1,mock_check_email,mock_user_repo):
user_id = "1"
email ="test@gmail.com"
session_id = "session"
mock_user_repo.return_value = email
mock_check_email.return_value = True
mock_get_user1.return_value = Mock()
mock_user_login_repo.return_value = session_id
response = client.get("/check_state_login", params={"user_id": user_id,"session_id_now" :session_id})
assert response.json()['status'] == 200
assert response.json() == {
"status": 200,
"data": {
"check": True,
}
}
@patch('service.UserService.sf.check_email_service')
def test_check_state_login_id_not_exits(mock_user_repo):
user_id = "1"
email ="test@gmail.com"
session_id = "session"
mock_user_repo.return_value = res1.ReponseError(status=400, data=res.Message(
message="Id not exist"))
response = client.get("/check_state_login", params={"user_id": user_id,
"session_id_now" :session_id})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Id not exist",
}
}
@patch('service.UserService.sf.check_email_service')
def test_check_state_login_email_empty(mock_user_repo):
user_id = "1"
email =None
session_id = "session"
mock_user_repo.return_value = res1.ReponseError(status=400, data=res.Message(
message="Email is empty"))
response = client.get("/check_state_login", params={"user_id": user_id,
"session_id_now" :session_id})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Email is empty",
}
}
@patch('service.UserService.sf.check_email_service')
@patch('service.UserService.check_email')
def test_check_state_login_email_invalid(mock_check_email,mock_user_repo):
user_id = "1"
email = "20133118"
session_id = "session"
mock_user_repo.return_value = res1.ReponseError(status=400, data=res.Message(
message="Email invalid"))
response = client.get("/check_state_login", params={"user_id": user_id,
"session_id_now" :session_id})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Email invalid",
}
}
@patch('service.UserService.sf.check_email_service')
@patch('service.UserService.check_email')
@patch('repository.UserLoginRepository.getUserSessionIdByUserEmail')
def test_check_state_session_empty(mock_user_login_repo,mock_check_email, mock_user_repo):
user_id = "1"
email = "20133@gmail.com"
session_id = None
mock_user_repo.return_value = email
mock_user_login_repo.return_value = "some_session_id"
response = client.get("/check_state_login", params={"user_id": user_id,
"session_id_now": session_id})
assert response.json()['status'] == 400
assert response.json() == {
"status": 400,
"data": {
"message": "Session Id is required.",
}
}
@patch('service.UserService.sf.check_email_service')
@patch('service.UserService.check_email')
@patch('service.UserService.get_user1')
@patch('repository.UserLoginRepository.getUserSessionIdByUserEmail')
def test_check_state_login_not_found(mock_user_login_repo,mock_get_user1,mock_check_email,mock_user_repo):
user_id = "1"
email ="test@gmail.com"
session_id = "session"
mock_user_repo.return_value = email
mock_check_email.return_value = True
mock_get_user1.return_value = None
mock_user_login_repo.return_value = session_id
response = client.get("/check_state_login", params={"user_id": user_id,
"session_id_now" : session_id})
assert response.json()['status'] == 404
assert response.json() == {
"status": 404,
"data": {
"message": "Not found user",
}
}
@patch('service.UserService.sf.check_email_service',return_value= "test@example.com")
@patch('service.UserService.sf.check_email_empty_invalid', return_value=True)
@patch('service.UserService.sign_in_with_email_and_password')
@patch('service.UserService.auth')
def test_change_password_success(mock_auth, mock_sign_in, mock_check_email, mock_get_email):
user_id='123'
new_password='new_password'
current_password='current_password'
confirm_new_password = 'new_password'
mock_sign_in.return_value = MagicMock()
mock_auth.get_user_by_email.return_value = MagicMock(uid='user_uid')
response = client.put("/change_password", json={"user_id": user_id,
"new_password" : new_password,
"current_password": current_password,
"confirm_new_password": confirm_new_password})
assert response.json()['status'] == 200
assert response.json()['data']['message'] == "Update password success"
@patch('service.UserService.sf.check_email_service', return_value=res1.ReponseError(status=400, data=res.Message(
message="Id not exist")))
def test_change_password_id_not_exist(mock_get_email):
user_id='123'
new_password='new_password'
current_password='current_password'
confirm_new_password = 'new_password'
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password,
"confirm_new_password": confirm_new_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Id not exist"
@patch('service.UserService.sf.check_email_service', return_value=res1.ReponseError(status=400, data=res.Message(
message="Email is empty")))
def test_change_password_email_is_empty(mock_get_email):
user_id='123'
new_password='new_password'
current_password='current_password'
confirm_new_password = 'new_password'
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password,
"confirm_new_password": confirm_new_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email is empty"
@patch('service.UserService.sf.check_email_service', return_value=res1.ReponseError(status=400, data=res.Message(
message="Email invalid")))
def test_change_password_email_invalid(mock_check_email):
user_id='123'
new_password='new_password'
current_password='current_password'
confirm_new_password = 'new_password'
response = client.put("/change_password", json={"user_id": user_id,
"new_password" : new_password,
"current_password": current_password,
"confirm_new_password": confirm_new_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email invalid"
@patch('service.UserService.sf.check_email_service')
def test_change_password_new_password_empty( mock_get_email):
user_id='123'
new_password= None
current_password='current_password'
mock_get_email.return_value = "20133@gmail.com"
confirm_new_password = 'new_password'
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password,
"confirm_new_password": confirm_new_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "New password field is required."
@patch('service.UserService.sf.check_email_service')
def test_change_password_current_password_empty(mock_get_email):
user_id='123'
new_password= "new"
current_password= None
mock_get_email.return_value = "20133@gmail.com"
confirm_new_password = 'new_password'
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password,
"confirm_new_password": confirm_new_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Current password field is required."
@patch('service.UserService.check_email')
@patch('service.UserService.get_user1')
@patch('service.UserService.createOTPReset')
@patch('service.UserService.sf.check_email_empty_invalid', return_value=True)
def test_reset_password_success(mock_check,mock_createOTPReset, mock_get_user1, mock_check_email):
email = "user@example.com"
mock_get_user1.return_value = {"email": "user@example.com"}
mock_createOTPReset.return_value = "123456"
response = client.post("/reset_password", json={"email": email})
assert response.json()['status'] == 200
assert response.json()['data']['check'] == True
assert response.json()['otp'] == "123456"
def test_reset_password_invalid_email():
email = "invalid"
response = client.post("/reset_password", json={"email": email})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email invalid"
def test_reset_password_user_not_found():
email = "nonexistent@example.com"
response = client.post("/reset_password", json={"email": email})
assert response.json()['status'] == 404
assert response.json()['data']['message'] == "Email not exist"
def test_reset_password_email_is_None():
email = None
response = client.post("/reset_password", json={"email": email})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email is required."
def test_update_user_info_user_id_required():
email = None
response = client.put("/update_user_info", json={"user_id": None,
"email": "new_email@example.com",
"uid": "uid123",
"display_name": "New Name",
"photo_url": "http://photo.url"})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id field is required."
def test_update_user_info_user_id_integer_required():
response = client.put("/update_user_info", json={"user_id": "aaaa",
"email": "new_email@example.com",
"uid": "uid123",
"display_name": "New Name",
"photo_url": "http://photo.url"})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be an integer"
def test_update_user_info_user_id_greater_than_0():
response = client.put("/update_user_info", json={"user_id": 0,
"email": "new_email@example.com",
"uid": "uid123",
"display_name": "New Name",
"photo_url": "http://photo.url"})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be greater than 0"
def test_update_user_info_uid_field_required():
response = client.put("/update_user_info", json={"user_id": 1,
"email": "new_email@example.com",
"uid": "",
"display_name": "New Name",
"photo_url": "http://photo.url"})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "uid field is required."
def test_update_user_info_email_field_required():
response = client.put("/update_user_info", json={"user_id": 1,
"email": None,
"uid": "aaaa",
"display_name": "New Name",
"photo_url": "http://photo.url"})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "email field is required."
def test_update_user_info_dis_play_name_field_required():
response = client.put("/update_user_info", json={"user_id": 1,
"email": "test@gmail.com",
"uid": "aaaa",
"display_name": "",
"photo_url": "http://photo.url"})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "display_name field is required."
def test_update_user_info_photo_url_field_required():
response = client.put("/update_user_info", json={"user_id": 1,
"email": "test@gmail.com",
"uid": "aaaa",
"display_name": "aaaa",
"photo_url": ""})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "photo_url field is required."
def test_check_info_google_user_id_required():
user_id = None
response = client.get("/check_info_google",params={"user_id": user_id})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id field is required."
def test_check_info_google_user_id_must_integer():
user_id = "aaaa"
response = client.get("/check_info_google",params={"user_id": user_id})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be an integer"
def test_check_info_google_user_id_must_integer_greater_than_0():
user_id = "0"
response = client.get("/check_info_google",params={"user_id": user_id})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be greater than 0"
def test_check_info_google_sign_up_email_is_required():
email = None
response = client.get("/check_info_google_signup", params={"email": email})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email is required."
def test_check_info_google_sign_up_email_must_str():
email = "777"
response = client.get("/check_info_google_signup", params={"email": email})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email must be a string, not a number."
def test_check_state_login_user_id_required():
user_id = None
session_id_now = "abcde"
response = client.get("/check_state_login", params={"user_id": user_id,"session_id_now":session_id_now})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id field is required."
def test_check_state_login_user_id_must_integer():
user_id = "aaaa"
session_id_now = "abcde"
response = client.get("/check_state_login", params={"user_id": user_id, "session_id_now": session_id_now})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be an integer"
def test_check_state_login_user_id_must_integer_greater_than_0():
user_id = "0"
session_id_now = "abcde"
response = client.get("/check_state_login", params={"user_id": user_id, "session_id_now": session_id_now})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be greater than 0"
def test_check_state_login_session_id_required():
user_id = 1
session_id_now = None
response = client.get("/check_state_login", params={"user_id": user_id,"session_id_now":session_id_now})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Session Id is required."
def test_check_state_login_session_id_must_str():
user_id = 1
session_id_now = "134"
response = client.get("/check_state_login", params={"user_id": user_id, "session_id_now": session_id_now})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Session Id must be a string, not a number."
def test_reset_email_required():
email = None
response = client.post("/reset_password", json={"email": email})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email is required."
def test_reset_email_must_str():
email = "20133"
response = client.post("/reset_password", json={"email": email })
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Email must be a string, not a number."
def test_change_password_user_id_required():
user_id = None
new_password = "ABC"
current_password = "abc"
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id field is required."
def test_change_password_user_id_integer():
user_id = "aaa"
new_password = "ABC"
current_password = "abc"
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be an integer"
def test_change_password_user_id_integer_greater_than_0():
user_id = "0"
new_password = "ABC"
current_password = "abc"
confirm_password = "abc"
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password,
"confirm_new_password": confirm_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "user_id must be greater than 0"
def test_change_password_new_password_required():
user_id = "1"
new_password = None
current_password = "abc"
confirm_password = "abc"
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password,
"confirm_new_password": confirm_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "New password field is required."
def test_change_password_current_password_required():
user_id = "1"
new_password = "abc"
current_password = None
confirm_password = "abc"
response = client.put("/change_password", json={"user_id": user_id,
"new_password": new_password,
"current_password": current_password,
"confirm_new_password": confirm_password})
assert response.json()['status'] == 400
assert response.json()['data']['message'] == "Current password field is required."