lordofgaming
Initial VoiceForge deployment (clean)
673435a
"""
Tests for Authentication System
"""
import pytest
from fastapi.testclient import TestClient
from app.main import app
from app.models import Base, engine, User, SessionLocal
from app.core.security import get_password_hash
# Reset DB for tests
@pytest.fixture(scope="module")
def setup_db():
Base.metadata.create_all(bind=engine)
yield
# Base.metadata.drop_all(bind=engine) # Optional cleanup
class TestAuth:
@pytest.fixture
def client(self):
return TestClient(app)
@pytest.fixture
def test_user(self):
"""Create a test user directly in DB"""
db = SessionLocal()
email = "test@example.com"
# Check if exists
user = db.query(User).filter(User.email == email).first()
if not user:
user = User(
email=email,
hashed_password=get_password_hash("password123"),
full_name="Test User"
)
db.add(user)
db.commit()
db.refresh(user)
db.close()
return user
def test_register_user(self, client):
"""Test user registration endpoint"""
response = client.post(
"/api/v1/auth/register",
json={
"email": "newuser@example.com",
"password": "securepassword",
"full_name": "New User"
}
)
if response.status_code == 400:
# Might already exist from previous run
assert response.json()["detail"] == "Email already registered"
else:
assert response.status_code == 200
data = response.json()
assert data["email"] == "newuser@example.com"
assert "id" in data
def test_login_success(self, client, test_user):
"""Test login with correct credentials"""
response = client.post(
"/api/v1/auth/login",
data={
"username": "test@example.com",
"password": "password123"
}
)
assert response.status_code == 200
data = response.json()
assert "access_token" in data
assert data["token_type"] == "bearer"
def test_login_failure(self, client):
"""Test login with wrong password"""
response = client.post(
"/api/v1/auth/login",
data={
"username": "test@example.com",
"password": "wrongpassword"
}
)
assert response.status_code == 401
def test_create_api_key(self, client, test_user):
"""Test creating an API key (requires auth)"""
# First login
login_res = client.post(
"/api/v1/auth/login",
data={"username": "test@example.com", "password": "password123"}
)
token = login_res.json()["access_token"]
# Create key
response = client.post(
"/api/v1/auth/api-keys",
headers={"Authorization": f"Bearer {token}"},
json={"name": "Test Key"}
)
assert response.status_code == 200
data = response.json()
assert data["name"] == "Test Key"
assert data["key"].startswith("vf_")