Spaces:
Sleeping
Sleeping
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): | |
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") | |
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')) | |
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): | |
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") | |
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") | |
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): | |
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") | |
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") | |
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") | |
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") | |
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") | |
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") | |
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): | |
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") | |
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") | |
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") | |
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") | |
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") | |
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") | |
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() | |