diff --git a/api/v1/schemas/user.py b/api/v1/schemas/user.py index 095135e11..f0f4702ea 100644 --- a/api/v1/schemas/user.py +++ b/api/v1/schemas/user.py @@ -5,12 +5,15 @@ List, Annotated, Dict, Literal) -from pydantic import (BaseModel, EmailStr, - field_validator, ConfigDict, - StringConstraints, - model_validator) - -from pydantic import Field # Added this import +from pydantic import ( + BaseModel, + EmailStr, + field_validator, + ConfigDict, + StringConstraints, + model_validator, + Field +) def validate_mx_record(domain: str): """ @@ -252,6 +255,9 @@ def validate_password(cls, values: dict): email = values.get("email") totp_code = values.get("totp_code") + if not password: + return values + # constraints for password if not any(c.islower() for c in password): raise ValueError("password must include at least one lowercase character") diff --git a/tests/v1/auth/test_signin.py b/tests/v1/auth/test_signin.py index e940a79e7..cb2660772 100644 --- a/tests/v1/auth/test_signin.py +++ b/tests/v1/auth/test_signin.py @@ -244,6 +244,23 @@ def test_swagger_ui_auth_form_handling(self): assert response_json.get("status_code") == 422 assert response_json.get("message") == "Invalid input" or "Invalid" in response_json.get("message", "") + def test_user_login_failure_without_password(self, monkeypatch): + """Test login failure when password is not provided""" + + monkeypatch.setattr( + user_service, + "authenticate_user", + lambda db, email, password: self.mock_user + ) + + response = self.client.post( + "/api/v1/auth/login", + json={"email": "testuser1@gmail.com"}, + ) + response_json = response.json() + + assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY + assert response_json.get("message") == "Invalid input" # Mock the database dependency @pytest.fixture