""" Script to create test users in the database Run: python -m scripts.create_test_users """ import asyncio import sys import uuid from pathlib import Path # Add backend directory to path sys.path.insert(0, str(Path(__file__).parent.parent)) from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker import bcrypt from app.config import settings from app.models.user import User def hash_password(password: str) -> str: """Hash password using bcrypt""" return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8') async def create_test_users(): """Create test users in database""" # Create async engine engine = create_async_engine(settings.DATABASE_URL, echo=True) async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) async with async_session() as session: # Check if test users already exist from sqlalchemy import select # Admin user result = await session.execute( select(User).where(User.email == "admin@example.com") ) admin = result.scalar_one_or_none() if not admin: admin = User( id=uuid.uuid4(), azure_ad_id="test_admin", # Special flag for test users email="admin@example.com", display_name="Test Admin", given_name="Admin", surname="User", role="admin", is_active=True, preferences={}, meta_data={ "is_test_user": True, "password_hash": hash_password("admin") } ) session.add(admin) print(f"✅ Created admin user: admin@example.com / admin") else: print(f"ℹ️ Admin user already exists") # Regular user result = await session.execute( select(User).where(User.email == "user@example.com") ) user = result.scalar_one_or_none() if not user: user = User( id=uuid.uuid4(), azure_ad_id="test_user", # Special flag for test users email="user@example.com", display_name="Test User", given_name="Test", surname="User", role="user", is_active=True, preferences={}, meta_data={ "is_test_user": True, "password_hash": hash_password("user") } ) session.add(user) print(f"✅ Created regular user: user@example.com / user") else: print(f"ℹ️ Regular user already exists") await session.commit() await engine.dispose() print("\n" + "="*60) print("Test users created successfully!") print("="*60) print("\n📝 Login credentials:") print(" Admin: admin@example.com / admin") print(" User: user@example.com / user") print("\n🔗 Use these at: http://localhost:3000") print("="*60) if __name__ == "__main__": asyncio.run(create_test_users())