From 089a0c9b1f3f85e059de8d57b66d004bf4209d6b Mon Sep 17 00:00:00 2001 From: Esteban Maya Cadavid Date: Thu, 18 Apr 2024 22:27:43 -0500 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=85=20Update=20test=20to=20add=20veri?= =?UTF-8?q?fication=20database=20records?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/tests/api/routes/test_login.py | 14 ++++- backend/app/tests/api/routes/test_users.py | 62 ++++++++++++++++++++-- 2 files changed, 69 insertions(+), 7 deletions(-) diff --git a/backend/app/tests/api/routes/test_login.py b/backend/app/tests/api/routes/test_login.py index 4570abea46..755e7e84c4 100644 --- a/backend/app/tests/api/routes/test_login.py +++ b/backend/app/tests/api/routes/test_login.py @@ -1,8 +1,11 @@ from unittest.mock import patch from fastapi.testclient import TestClient +from sqlmodel import Session, select from app.core.config import settings +from app.core.security import verify_password +from app.models import User from app.utils import generate_password_reset_token @@ -67,10 +70,10 @@ def test_recovery_password_user_not_exits( def test_reset_password( - client: TestClient, superuser_token_headers: dict[str, str] + client: TestClient, superuser_token_headers: dict[str, str], db: Session ) -> None: token = generate_password_reset_token(email=settings.FIRST_SUPERUSER) - data = {"new_password": settings.FIRST_SUPERUSER_PASSWORD, "token": token} + data = {"new_password": "changethis", "token": token} r = client.post( f"{settings.API_V1_STR}/reset-password/", headers=superuser_token_headers, @@ -79,6 +82,13 @@ def test_reset_password( assert r.status_code == 200 assert r.json() == {"message": "Password updated successfully"} + # * db asserts + user_query = select(User).where(User.email == settings.FIRST_SUPERUSER) + user = db.exec(user_query).first() + db.refresh(user) + assert user + assert verify_password(data["new_password"], user.hashed_password) + def test_reset_password_invalid_token( client: TestClient, superuser_token_headers: dict[str, str] diff --git a/backend/app/tests/api/routes/test_users.py b/backend/app/tests/api/routes/test_users.py index 28bffe8057..b8e2e6094b 100644 --- a/backend/app/tests/api/routes/test_users.py +++ b/backend/app/tests/api/routes/test_users.py @@ -1,11 +1,13 @@ from unittest.mock import patch +import pytest from fastapi.testclient import TestClient -from sqlmodel import Session +from sqlmodel import Session, select from app import crud from app.core.config import settings -from app.models import UserCreate +from app.core.security import verify_password +from app.models import User, UserCreate from app.tests.utils.utils import random_email, random_lower_string @@ -167,7 +169,7 @@ def test_retrieve_users( def test_update_user_me( - client: TestClient, normal_user_token_headers: dict[str, str] + client: TestClient, normal_user_token_headers: dict[str, str], db: Session ) -> None: full_name = "Updated Name" email = random_email() @@ -182,9 +184,18 @@ def test_update_user_me( assert updated_user["email"] == email assert updated_user["full_name"] == full_name + # * db asserts + user_query = select(User).where(User.email == email) + user_db = db.exec(user_query).first() + db.refresh(user_db) + if not user_db: + pytest.fail("user not found") + assert user_db.email == email + assert user_db.full_name == full_name + def test_update_password_me( - client: TestClient, superuser_token_headers: dict[str, str] + client: TestClient, superuser_token_headers: dict[str, str], db: Session ) -> None: new_password = random_lower_string() data = { @@ -200,6 +211,15 @@ def test_update_password_me( updated_user = r.json() assert updated_user["message"] == "Password updated successfully" + # * db asserts + user_query = select(User).where(User.email == settings.FIRST_SUPERUSER) + user_db = db.exec(user_query).first() + db.refresh(user_db) + if not user_db: + pytest.fail("user not found") + assert user_db.email == settings.FIRST_SUPERUSER + assert verify_password(new_password, user_db.hashed_password) + # Revert to the old password to keep consistency in test old_data = { "current_password": new_password, @@ -210,7 +230,10 @@ def test_update_password_me( headers=superuser_token_headers, json=old_data, ) + db.refresh(user_db) + assert r.status_code == 200 + assert verify_password(settings.FIRST_SUPERUSER_PASSWORD, user_db.hashed_password) def test_update_password_me_incorrect_password( @@ -265,7 +288,7 @@ def test_update_password_me_same_password_error( ) -def test_register_user(client: TestClient) -> None: +def test_register_user(client: TestClient, db: Session) -> None: with patch("app.core.config.settings.USERS_OPEN_REGISTRATION", True): username = random_email() password = random_lower_string() @@ -280,6 +303,16 @@ def test_register_user(client: TestClient) -> None: assert created_user["email"] == username assert created_user["full_name"] == full_name + # * db asserts + user_query = select(User).where(User.email == username) + user_db = db.exec(user_query).first() + db.refresh(user_db) + if not user_db: + pytest.fail("user not found") + assert user_db.email == username + assert user_db.full_name == full_name + assert verify_password(password, user_db.hashed_password) + def test_register_user_forbidden_error(client: TestClient) -> None: with patch("app.core.config.settings.USERS_OPEN_REGISTRATION", False): @@ -333,8 +366,17 @@ def test_update_user( ) assert r.status_code == 200 updated_user = r.json() + assert updated_user["full_name"] == "Updated_full_name" + # * db asserts + user_query = select(User).where(User.email == username) + user_db = db.exec(user_query).first() + db.refresh(user_db) + if not user_db: + pytest.fail("user not found") + assert user_db.full_name == "Updated_full_name" + def test_update_user_not_exists( client: TestClient, superuser_token_headers: dict[str, str] @@ -388,6 +430,11 @@ def test_delete_user_super_user( deleted_user = r.json() assert deleted_user["message"] == "User deleted successfully" + # * db asserts + user_query = select(User).where(User.id == user_id) + user_db = db.execute(user_query).first() + assert user_db is None + def test_delete_user_current_user(client: TestClient, db: Session) -> None: username = random_email() @@ -413,6 +460,11 @@ def test_delete_user_current_user(client: TestClient, db: Session) -> None: deleted_user = r.json() assert deleted_user["message"] == "User deleted successfully" + # * db asserts + user_query = select(User).where(User.id == user_id) + user_db = db.execute(user_query).first() + assert user_db is None + def test_delete_user_not_found( client: TestClient, superuser_token_headers: dict[str, str] From 9ac09ed620e9ce971947d1e9ab069ff7b33c5cfb Mon Sep 17 00:00:00 2001 From: Esteban Maya Cadavid Date: Mon, 22 Apr 2024 13:45:56 -0500 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=A5=20Remove=20useless=20comments?= =?UTF-8?q?=20and=20pytest=20fail=20from=20login=20and=20user=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/tests/api/routes/test_login.py | 2 -- backend/app/tests/api/routes/test_users.py | 22 ++++------------------ 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/backend/app/tests/api/routes/test_login.py b/backend/app/tests/api/routes/test_login.py index 755e7e84c4..34fe8ee560 100644 --- a/backend/app/tests/api/routes/test_login.py +++ b/backend/app/tests/api/routes/test_login.py @@ -82,10 +82,8 @@ def test_reset_password( assert r.status_code == 200 assert r.json() == {"message": "Password updated successfully"} - # * db asserts user_query = select(User).where(User.email == settings.FIRST_SUPERUSER) user = db.exec(user_query).first() - db.refresh(user) assert user assert verify_password(data["new_password"], user.hashed_password) diff --git a/backend/app/tests/api/routes/test_users.py b/backend/app/tests/api/routes/test_users.py index b8e2e6094b..d6923a5a5e 100644 --- a/backend/app/tests/api/routes/test_users.py +++ b/backend/app/tests/api/routes/test_users.py @@ -1,6 +1,5 @@ from unittest.mock import patch -import pytest from fastapi.testclient import TestClient from sqlmodel import Session, select @@ -184,12 +183,9 @@ def test_update_user_me( assert updated_user["email"] == email assert updated_user["full_name"] == full_name - # * db asserts user_query = select(User).where(User.email == email) user_db = db.exec(user_query).first() - db.refresh(user_db) - if not user_db: - pytest.fail("user not found") + assert user_db assert user_db.email == email assert user_db.full_name == full_name @@ -211,12 +207,9 @@ def test_update_password_me( updated_user = r.json() assert updated_user["message"] == "Password updated successfully" - # * db asserts user_query = select(User).where(User.email == settings.FIRST_SUPERUSER) user_db = db.exec(user_query).first() - db.refresh(user_db) - if not user_db: - pytest.fail("user not found") + assert user_db assert user_db.email == settings.FIRST_SUPERUSER assert verify_password(new_password, user_db.hashed_password) @@ -303,12 +296,9 @@ def test_register_user(client: TestClient, db: Session) -> None: assert created_user["email"] == username assert created_user["full_name"] == full_name - # * db asserts user_query = select(User).where(User.email == username) user_db = db.exec(user_query).first() - db.refresh(user_db) - if not user_db: - pytest.fail("user not found") + assert user_db assert user_db.email == username assert user_db.full_name == full_name assert verify_password(password, user_db.hashed_password) @@ -369,12 +359,10 @@ def test_update_user( assert updated_user["full_name"] == "Updated_full_name" - # * db asserts user_query = select(User).where(User.email == username) user_db = db.exec(user_query).first() db.refresh(user_db) - if not user_db: - pytest.fail("user not found") + assert user_db assert user_db.full_name == "Updated_full_name" @@ -430,7 +418,6 @@ def test_delete_user_super_user( deleted_user = r.json() assert deleted_user["message"] == "User deleted successfully" - # * db asserts user_query = select(User).where(User.id == user_id) user_db = db.execute(user_query).first() assert user_db is None @@ -460,7 +447,6 @@ def test_delete_user_current_user(client: TestClient, db: Session) -> None: deleted_user = r.json() assert deleted_user["message"] == "User deleted successfully" - # * db asserts user_query = select(User).where(User.id == user_id) user_db = db.execute(user_query).first() assert user_db is None