Spaces:
Running
Running
| import asyncio | |
| import logging | |
| import sys | |
| import os | |
| # Add parent directory to path so we can import app modules | |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
| from app.database import connect_db, get_db, disconnect_db | |
| from app.models.user import User, UserRole | |
| from app.core.security import hash_password | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| async def create_test_user(): | |
| """Create a test user for development""" | |
| try: | |
| await connect_db() | |
| db = await get_db() | |
| users_collection = db["users"] | |
| email = "test@example.com" | |
| password = "Password123!" | |
| existing_user = await users_collection.find_one({"email": email}) | |
| if existing_user: | |
| logger.info(f"Test user already exists: {email}") | |
| # Ensure it is active | |
| updates = {} | |
| if not existing_user.get("isActive"): | |
| updates["isActive"] = True | |
| if not existing_user.get("isEmailVerified"): | |
| updates["isEmailVerified"] = True | |
| if updates: | |
| logger.info("Activating existing test user...") | |
| await users_collection.update_one( | |
| {"_id": existing_user["_id"]}, | |
| {"$set": updates} | |
| ) | |
| logger.info("User activated.") | |
| return | |
| logger.info(f"Creating test user: {email}") | |
| hashed_pw = hash_password(password) | |
| user_doc = User.create_document( | |
| first_name="Test", | |
| last_name="User", | |
| email=email, | |
| phone=None, | |
| hashed_password=hashed_pw, | |
| role=UserRole.RENTER, | |
| ) | |
| # FIX: Remove phone field if None to avoid unique index violation on null | |
| if user_doc.get("phone") is None: | |
| user_doc.pop("phone", None) | |
| # Override default inactive state | |
| user_doc["isActive"] = True | |
| user_doc["isEmailVerified"] = True | |
| result = await users_collection.insert_one(user_doc) | |
| logger.info(f"✅ Test user created successfully! ID: {result.inserted_id}") | |
| logger.info(f"Email: {email}") | |
| logger.info(f"Password: {password}") | |
| except Exception as e: | |
| logger.error(f"❌ Failed to create test user: {e}") | |
| # Print full traceback if needed | |
| import traceback | |
| traceback.print_exc() | |
| finally: | |
| await disconnect_db() | |
| if __name__ == "__main__": | |
| asyncio.run(create_test_user()) | |