pychatbot / tests /test_service /test_OTPService.py
kltn20133118's picture
Upload 48 files
6b725f7 verified
raw
history blame
16 kB
import unittest
import sys
import os
app_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(0, app_path)
from request import RequestOTP as req
from response import ResponseOTP as res
from unittest.mock import patch, MagicMock
from datetime import datetime, timedelta
from service.OTPService import createOTP, verifyOTP, createOTPReset, verifyOTPReset
class TestCreateOTPReset(unittest.TestCase):
@patch('service.OTPService.check_email')
@patch('service.OTPService.get_user1')
@patch('service.OTPService.OTPRepository.addOTP')
@patch('service.OTPService.generate_otp')
@patch('service.OTPService.sf')
def test_createOTPReset_success(self,mock_support_function, mock_generate_otp, mock_addOTP, mock_get_user1, mock_check_email):
mock_get_user1.return_value = MagicMock()
email = "user@example.com"
mock_support_function.check_email_empty_invalid.return_value = True
mock_generate_otp.return_value = "123456"
response = createOTPReset(email)
self.assertEqual(response.status, 200)
self.assertEqual(response.data.check, True)
self.assertEqual(response.otp, "123456")
@patch('service.OTPService.check_email')
@patch('service.OTPService.get_user1')
@patch('service.OTPService.OTPRepository.addOTP')
@patch('service.OTPService.sf')
def test_createOTPReset_email_empty(self,mock_support_function, mock_addOTP, mock_get_user1, mock_check_email):
email = None
mock_support_function.check_email_empty_invalid.return_value = res.ReponseError(status=400, data=res.Message(
message="Email is empty"))
response = createOTPReset(email)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, res.Message(message='Email is empty'))
@patch('service.OTPService.check_email')
@patch('service.OTPService.sf')
def test_createOTPReset_email_invalid(self,mock_support_function, mock_check_email):
email = "201333"
mock_support_function.check_email_empty_invalid.return_value = res.ReponseError(status=400, data=res.Message(
message="Email invalid"))
response = createOTPReset(email)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data, res.Message(message='Email invalid'))
class TestCreateOTPFunctions(unittest.TestCase):
@patch('service.OTPService.generate_otp')
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository')
@patch('service.OTPService.sf')
def test_createOTP_success(self,mock_support_function, mock_addOTP, mock_check_email, mock_generate_otp):
mock_generate_otp.return_value = "123AB6"
email = "20133118@gmail.com"
otp = "123AB6"
mock_support_function.check_email_empty_invalid.return_value = True
mock_addOTP.addOTP(email, otp)
request = req.RequestCreateOTP(email=email)
response = createOTP(request)
self.assertIsInstance(response, res.ResponseCreateOTP)
self.assertEqual(response.status, 200)
self.assertTrue(response.data.check)
self.assertEqual(response.otp, "123AB6")
@patch('service.OTPService.check_email')
@patch('service.OTPService.sf')
def test_createOTP_failed_empty_email(self,mock_support_function, mock_check_email):
email = None
mock_support_function.check_email_empty_invalid.return_value = res.ReponseError(status=400, data=res.Message(
message="Email is empty"))
request = req.RequestCreateOTP(email=email)
response = createOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Email is empty")
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository.addOTP')
@patch('service.OTPService.sf')
def test_createOTP_failed_empty_invalid(self,mock_support_function, mock_addOTP, mock_check_email):
email = "20133"
mock_support_function.check_email_empty_invalid.return_value = res.ReponseError(status=400, data=res.Message(
message="Email invalid"))
request = req.RequestCreateOTP(email=email)
mock_check_email.return_value = False
response = createOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Email invalid")
mock_addOTP.assert_not_called()
class TestVerifyOTPFunctions(unittest.TestCase):
@patch('service.OTPService.check_email', return_value=True)
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.OTPRepository.deleteOTP')
@patch('service.OTPService.sf')
def test_verifyOTP_success(self,mock_support_function, mock_deleteOTP, mock_getOtpByEmail, mock_check_email):
current_time = datetime.now()
mock_support_function.check_email_empty_invalid.return_value = True
mock_getOtpByEmail.return_value = MagicMock(otp="123456", created_at=current_time - timedelta(minutes=5))
email = "user@example.com"
otp = "123456"
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTP(request)
mock_deleteOTP(email, otp)
self.assertIsInstance(response, res.ResponseVerifyOTPSignUp)
self.assertEqual(response.status, 200)
self.assertEqual(response.data.message, "OTP is valid")
@patch('service.OTPService.check_email', return_value=True)
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.sf')
def test_verifyOTP_failed_invalid_otp(self,mock_support_function, mock_getOtpByEmail, mock_check_email):
current_time = datetime.now()
mock_support_function.check_email_empty_invalid.return_value = True
mock_getOtpByEmail.return_value = MagicMock(otp="654321", created_at=current_time - timedelta(minutes=5))
email = "user@example.com"
otp = "123456"
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Invalid OTP")
@patch('service.OTPService.check_email')
@patch('service.OTPService.sf')
def test_verifyOTP_failed_invalid_email(self,mock_support_function, mock_check_email):
email = "invalidemail"
otp = "123456"
mock_support_function.check_email_empty_invalid.return_value =res.ReponseError(status=400, data=res.Message(
message="Email invalid"))
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Email invalid")
@patch('service.OTPService.sf')
def test_verifyOTP_failed_empty_email(self,mock_support_function):
email = None
otp = "123456"
mock_support_function.check_email_empty_invalid.return_value = res.ReponseError(status=400, data=res.Message(
message="Email is empty"))
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Email is empty")
@patch('service.OTPService.check_email')
@patch('service.OTPService.sf')
def test_verifyOTP_failed_empty_otp(self,mock_support_function, mock_check_email):
email = "user@example.com"
otp = None
mock_support_function.check_email_empty_invalid.return_value = True
request = req.RequestVerifyOTP(email=email, otp=otp)
mock_check_email.return_value = True
response = verifyOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "otp is empty")
@patch('service.OTPService.check_email', return_value=True)
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.sf')
def test_verifyOTP_failed_no_otp_found(self,mock_support_function, mock_getOtpByEmail, mock_check_email):
mock_getOtpByEmail.return_value = None
email = "user@example.com"
otp = "123456"
mock_support_function.check_email_empty_invalid.return_value = True
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 404)
self.assertEqual(response.data.message, "No OTP found for this email")
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.sf')
def test_verifyOTP_has_expired(self,mock_support_function, mock_getOtpByEmail, mock_check_email):
current_time = datetime.now()
mock_getOtpByEmail.return_value = MagicMock(otp="123456", created_at=current_time - timedelta(minutes=100))
email = "user@example.com"
otp = "123456"
mock_support_function.check_email_empty_invalid.return_value = True
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTP(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "OTP has expired")
class TestVerifyOTPReset(unittest.TestCase):
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.OTPRepository')
@patch('service.OTPService.auth.get_user_by_email')
@patch('service.OTPService.auth')
@patch('service.OTPService.sf')
def test_verifyOTPReset_success(self,mock_support_function, mock_update_user, mock_get_user_by_email, mock_deleteOTP, mock_getOtpByEmail,
mock_check_email):
current_time = datetime.now()
mock_support_function.check_email_empty_invalid.return_value = True
mock_getOtpByEmail.return_value = MagicMock(otp="123456", created_at=current_time - timedelta(minutes=5))
mock_get_user_by_email.return_value = MagicMock(uid="12345")
email = "user@example.com"
otp = "123456"
mock_check_email.return_value = True
request = req.RequestVerifyOTP(email=email, otp=otp)
mock_update_user.update_user(uid="12345", )
response = verifyOTPReset(request)
mock_deleteOTP.deleteOTP("user@example.com", "123456")
self.assertIsInstance(response, res.ResponseVerifyOTP)
self.assertEqual(response.status, 200)
self.assertEqual(response.data.message, "New Password send to Email")
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.sf')
def test_verifyOTPReset_failed_invalid_otp(self,mock_support_function, mock_getOtpByEmail, mock_check_email):
current_time = datetime.now()
mock_support_function.check_email_empty_invalid.return_value = True
mock_getOtpByEmail.return_value = MagicMock(otp="654321", created_at=current_time - timedelta(minutes=5))
email = "user@example.com"
otp = "123456"
mock_check_email.return_value = True
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTPReset(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Invalid OTP")
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.sf')
def test_verifyOTPReset_failed_no_otp_found(self,mock_support_function, mock_getOtpByEmail, mock_check_email):
mock_getOtpByEmail.return_value = None
email = "user@example.com"
otp = "123456"
request = req.RequestVerifyOTP(email=email, otp=otp)
mock_support_function.check_email_empty_invalid.return_value = True
response = verifyOTPReset(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 404)
self.assertEqual(response.data.message, "No OTP found for this email")
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.sf')
def test_verifyOTPReset_has_expired(self,mock_support_function, mock_getOtpByEmail, mock_check_email):
current_time = datetime.now()
mock_getOtpByEmail.return_value = MagicMock(otp="123456", created_at=current_time - timedelta(minutes=100))
email = "vonhuy@gmail.com"
otp = "123456"
mock_support_function.check_email_empty_invalid.return_value = True
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTPReset(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "OTP has expired")
@patch('service.OTPService.check_email')
@patch('service.OTPService.sf')
def test_verifyOTPReset_failed_invalid_email(self,mock_support_function, mock_check_email):
email = "invalidemail"
otp = "123456"
mock_support_function.check_email_empty_invalid.return_value = res.ReponseError(status=400, data=res.Message(
message="Email invalid"))
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTPReset(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Email invalid")
@patch('service.OTPService.check_email')
@patch('service.OTPService.OTPRepository.getOtpByEmail')
@patch('service.OTPService.sf')
def test_verifyOTPReset_failed_empty_email(self,mock_support_function, mock_getOtpByEmail, mock_check_email):
email = None
otp = "123456"
request = req.RequestVerifyOTP(email=email, otp=otp)
mock_support_function.check_email_empty_invalid.return_value = res.ReponseError(status=400, data=res.Message(
message="Email is empty"))
response = verifyOTPReset(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "Email is empty")
@patch('service.OTPService.check_email', return_value=True)
@patch('service.OTPService.sf')
def test_verifyOTPReset_failed_empty_otp(self,mock_support_function, mock_check_email):
email = "user@example.com"
otp = None
mock_support_function.check_email_empty_invalid.return_value = True
request = req.RequestVerifyOTP(email=email, otp=otp)
response = verifyOTPReset(request)
self.assertIsInstance(response, res.ReponseError)
self.assertEqual(response.status, 400)
self.assertEqual(response.data.message, "OTP is empty")
if __name__ == '__main__':
unittest.main()