Spaces:
Sleeping
Sleeping
| import os | |
| import sys | |
| from unittest.mock import patch, 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 OTPController | |
| client = TestClient(OTPController.router) | |
| def test_createOTPReset_success(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 = client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 200 | |
| assert response.json()['data']['check'] == True | |
| assert response.json()['otp'] == "123456" | |
| def test_createOTPReset_email_empty(): | |
| email = "" | |
| response = client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email is required." | |
| def test_createOTPReset_email_invalid(): | |
| email = "201333" | |
| response =client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email must be a string, not a number." | |
| def test_createOTP_success(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(email,otp) | |
| response =client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 200 | |
| assert response.json()['data']['check'] == True | |
| assert response.json()['otp'] == "123AB6" | |
| def test_createOTP_failed_empty_email(): | |
| email = "" | |
| response =client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email is required." | |
| def test_createOTP_failed_empty_invalid(): | |
| email = "20133" | |
| response =client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email must be a string, not a number." | |
| from datetime import datetime,timedelta | |
| def test_verifyOTP_success(mock_deleteOTP, mock_getOtpByEmail, mock_check_email): | |
| current_time = datetime.now() | |
| mock_getOtpByEmail.return_value = MagicMock(otp="abcdef", created_at=current_time - timedelta(minutes=5)) | |
| email = "user@example.com" | |
| otp = "abcdef" | |
| response = client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| mock_deleteOTP(email,otp) | |
| assert response.json()['status'] == 200 | |
| assert response.json()['data']['message'] == "OTP is valid" | |
| def test_verifyOTP_failed_invalid_otp(mock_getOtpByEmail, mock_check_email): | |
| current_time = datetime.now() | |
| mock_getOtpByEmail.return_value = MagicMock(otp="654321", created_at=current_time - timedelta(minutes=5)) | |
| email = "user@example.com" | |
| otp = "123456" | |
| response =client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP must be a string, not a number." | |
| def test_verifyOTP_failed_invalid_email(): | |
| email = "invalidemail" | |
| otp = "123456" | |
| response =client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP must be a string, not a number." | |
| def test_verifyOTP_failed_empty_email(): | |
| email = None | |
| otp = "123456" | |
| response =client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email is required." | |
| def test_verifyOTP_failed_empty_otp(): | |
| email = "user@example.com" | |
| otp = None | |
| response = client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP is required" | |
| def test_verifyOTP_failed_no_otp_found(mock_getOtpByEmail, mock_check_email): | |
| mock_getOtpByEmail.return_value = None | |
| email = "user@example.com" | |
| otp = "1234ab" | |
| response =client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 404 | |
| assert response.json()['data']['message'] == "No OTP found for this email" | |
| def test_verifyOTP_has_expired( mock_getOtpByEmail, mock_check_email): | |
| current_time = datetime.now() | |
| mock_getOtpByEmail.return_value = MagicMock(otp="1234ab", created_at=current_time - timedelta(minutes=100)) | |
| email = "user@example.com" | |
| otp = "1234ab" | |
| response =client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP has expired" | |
| def test_verifyOTPReset1_success( mock_generate_password,mock_update_user, mock_get_user_by_email, mock_deleteOTP, mock_getOtpByEmail, mock_check_email): | |
| current_time = datetime.now() | |
| mock_getOtpByEmail.return_value = MagicMock(otp="abcd12", created_at=current_time - timedelta(minutes=5)) | |
| mock_get_user_by_email.return_value = MagicMock(uid="12345") | |
| email = "user@example.com" | |
| otp = "abcd12" | |
| mock_generate_password.return_value = "ABC123" | |
| mock_update_user.update_user(uid="12345",) | |
| mock_deleteOTP("user@example.com", "abcd12") | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 200 | |
| assert response.json()['data']['message'] == "New Password send to Email" | |
| assert response.json()['newpassword'] == "ABC123" | |
| def test_verifyOTPReset_failed_invalid_otp(mock_getOtpByEmail, mock_check_email): | |
| current_time = datetime.now() | |
| mock_getOtpByEmail.return_value = MagicMock(otp="654321", created_at=current_time - timedelta(minutes=5)) | |
| email = "user@example.com" | |
| otp = "abcd12" | |
| response =client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Invalid OTP" | |
| def test_verifyOTPReset_failed_no_otp_found(mock_getOtpByEmail, mock_check_email): | |
| mock_getOtpByEmail.return_value = None | |
| email = "user@example.com" | |
| otp = "abcd12" | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 404 | |
| assert response.json()['data']['message'] == "No OTP found for this email" | |
| def test_verifyOTPReset_has_expired(mock_getOtpByEmail, mock_check_email): | |
| current_time = datetime.now() | |
| mock_getOtpByEmail.return_value = MagicMock(otp="1234ab", created_at=current_time - timedelta(minutes=100)) | |
| email = "vonhuy@gmail.com" | |
| otp = "1234ab" | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP has expired" | |
| def test_verifyOTPReset_failed_invalid_email(): | |
| email = "invalidemail" | |
| otp = "abcd12" | |
| response =client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email invalid" | |
| def test_verifyOTPReset_failed_empty_email(): | |
| email = None | |
| otp = "123456" | |
| response =client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email is required." | |
| def test_verifyOTPReset_failed_empty_otp(): | |
| email = "user@example.com" | |
| otp = None | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP is required" | |
| def test_createOTP_email_required(): | |
| email = None | |
| response = client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email is required." | |
| def test_createOTP_email_must_be_string(): | |
| email = "20133" | |
| response = client.post("/create_otp", json={"email": email}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email must be a string, not a number." | |
| def test_verifyOTP_email_is_required(): | |
| email = None | |
| otp ="123abc" | |
| response = client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email is required." | |
| def test_verifyOTP_otp_is_required(): | |
| email = "test@gmail.com" | |
| otp = None | |
| response = client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP is required" | |
| def test_verifyOTP_otp_email_must_be_string(): | |
| email = "20133" | |
| otp = "123abc" | |
| response = client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email must be a string, not a number." | |
| def test_verifyOTP_otp_must_be_string(): | |
| email = "20133@gmail.com" | |
| otp = "123456" | |
| response = client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP must be a string, not a number." | |
| def test_verifyOTP_otp_max_length(): | |
| email = "20133@gmail.com" | |
| otp = "abcdef1" | |
| response = client.post("/verify_otp", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP max length is 6" | |
| def test_verifyOTPReset_email_is_required(): | |
| email = None | |
| otp ="123abc" | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email is required." | |
| def test_verifyOTPReset_otp_is_required(): | |
| email = "test@gmail.com" | |
| otp = None | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP is required" | |
| def test_verifyOTPReset_otp_email_must_be_string(): | |
| email = "20133" | |
| otp = "123abc" | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "Email must be a string, not a number." | |
| def test_verifyOTPReset_otp_must_be_string(): | |
| email = "20133@gmail.com" | |
| otp = "123456" | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP must be a string, not a number." | |
| def test_verifyOTPReset_otp_max_length(): | |
| email = "20133@gmail.com" | |
| otp = "abcdef1" | |
| response = client.post("/verify_otp_reset_password", json={"email": email,"otp": otp}) | |
| assert response.json()['status'] == 400 | |
| assert response.json()['data']['message'] == "OTP max length is 6" |