File size: 2,660 Bytes
8c9362b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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())