""" 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)