Spaces:
Running
Running
| """ | |
| Verification script to test user profile fields | |
| """ | |
| import sys | |
| import os | |
| sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) | |
| from app.models.user import User | |
| from datetime import datetime | |
| def test_user_creation(): | |
| """Test that User.create_document includes all new fields""" | |
| print("Testing User.create_document()...") | |
| user_doc = User.create_document( | |
| first_name="Test", | |
| last_name="User", | |
| email="test@example.com", | |
| phone=None, | |
| hashed_password="hashed_password", | |
| role="renter" | |
| ) | |
| # Check new fields exist | |
| required_fields = ["reviews_count", "location", "languages", "isVerified", "createdAt"] | |
| for field in required_fields: | |
| if field in user_doc: | |
| print(f"β Field '{field}' exists with value: {user_doc[field]}") | |
| else: | |
| print(f"β Field '{field}' is MISSING!") | |
| return False | |
| # Verify default values | |
| assert user_doc["reviews_count"] == 0, "reviews_count should default to 0" | |
| assert user_doc["location"] is None, "location should default to None" | |
| assert user_doc["languages"] == [], "languages should default to empty array" | |
| assert user_doc["isVerified"] is False, "isVerified should default to False" | |
| assert isinstance(user_doc["createdAt"], datetime), "createdAt should be a datetime" | |
| print("\nβ All fields created correctly with proper defaults!\n") | |
| return True | |
| def test_user_format_response(): | |
| """Test that User.format_response includes all new fields""" | |
| print("Testing User.format_response()...") | |
| # Create a mock user document | |
| from bson import ObjectId | |
| mock_user = { | |
| "_id": ObjectId(), | |
| "firstName": "Test", | |
| "lastName": "User", | |
| "email": "test@example.com", | |
| "phone": None, | |
| "role": "renter", | |
| "subscriptionType": "free", | |
| "subscriptionExpiresAt": None, | |
| "isEmailVerified": True, | |
| "isPhoneVerified": False, | |
| "isActive": True, | |
| "totalListings": 0, | |
| "profilePicture": None, | |
| "bio": None, | |
| "location": "New York", | |
| "languages": ["English", "Spanish"], | |
| "isVerified": True, | |
| "reviews_count": 5, | |
| "lastLogin": None, | |
| "createdAt": datetime.utcnow(), | |
| "updatedAt": datetime.utcnow(), | |
| } | |
| formatted = User.format_response(mock_user) | |
| # Check new fields are in response | |
| required_fields = ["reviews_count", "location", "languages", "isVerified", "createdAt"] | |
| for field in required_fields: | |
| if field in formatted: | |
| print(f"β Field '{field}' in response with value: {formatted[field]}") | |
| else: | |
| print(f"β Field '{field}' is MISSING from response!") | |
| return False | |
| # Verify values | |
| assert formatted["reviews_count"] == 5, "reviews_count should be 5" | |
| assert formatted["location"] == "New York", "location should be 'New York'" | |
| assert formatted["languages"] == ["English", "Spanish"], "languages should match" | |
| assert formatted["isVerified"] is True, "isVerified should be True" | |
| print("\nβ All fields formatted correctly in response!\n") | |
| return True | |
| def test_user_format_response_with_missing_fields(): | |
| """Test that User.format_response handles missing fields with defaults""" | |
| print("Testing User.format_response() with missing fields...") | |
| from bson import ObjectId | |
| # Create a mock user document without new fields (old user) | |
| mock_old_user = { | |
| "_id": ObjectId(), | |
| "firstName": "Old", | |
| "lastName": "User", | |
| "email": "old@example.com", | |
| "phone": None, | |
| "role": "landlord", | |
| "subscriptionType": "free", | |
| "isEmailVerified": True, | |
| "isPhoneVerified": False, | |
| "isActive": True, | |
| "totalListings": 3, | |
| "createdAt": datetime.utcnow(), | |
| "updatedAt": datetime.utcnow(), | |
| } | |
| formatted = User.format_response(mock_old_user) | |
| # Check that defaults are applied | |
| assert formatted["reviews_count"] == 0, "reviews_count should default to 0" | |
| assert formatted["location"] is None, "location should default to None" | |
| assert formatted["languages"] == [], "languages should default to empty array" | |
| assert formatted["isVerified"] is False, "isVerified should default to False" | |
| print("β Missing fields handled correctly with defaults!\n") | |
| return True | |
| if __name__ == "__main__": | |
| print("=" * 60) | |
| print("USER PROFILE FIELDS VERIFICATION") | |
| print("=" * 60) | |
| print() | |
| try: | |
| success = True | |
| success = test_user_creation() and success | |
| success = test_user_format_response() and success | |
| success = test_user_format_response_with_missing_fields() and success | |
| if success: | |
| print("=" * 60) | |
| print("β ALL TESTS PASSED!") | |
| print("=" * 60) | |
| sys.exit(0) | |
| else: | |
| print("=" * 60) | |
| print("β SOME TESTS FAILED!") | |
| print("=" * 60) | |
| sys.exit(1) | |
| except Exception as e: | |
| print(f"\nβ ERROR: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| sys.exit(1) | |