AIDA / scripts /verify_user_fields.py
destinyebuka's picture
fyp
32ae427
"""
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)