ewere / tests /conftest.py
andevs's picture
Create tests/conftest.py
37b5f3f verified
Raw
History Blame Contribute Delete
2.62 kB
import pytest
import asyncio
from typing import Generator, Any
from fastapi import FastAPI
from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app import app as main_app
from services.database_service import DatabaseService
import os
import tempfile
import base64
from PIL import Image
import io
# Test database URL
TEST_DATABASE_URL = "sqlite:///./test.db"
@pytest.fixture(scope="session")
def app() -> Generator[FastAPI, Any, None]:
"""
Create a FastAPI test app
"""
yield main_app
@pytest.fixture(scope="session")
def client(app: FastAPI) -> Generator[TestClient, Any, None]:
"""
Create a test client
"""
with TestClient(app) as test_client:
yield test_client
@pytest.fixture(scope="function")
def db_service():
"""
Create a database service for testing
"""
service = DatabaseService()
# Use test database
service.supabase = None # Mock for testing
yield service
@pytest.fixture(scope="function")
def auth_headers():
"""
Create authentication headers for testing
"""
return {"Authorization": "Bearer test_token"}
@pytest.fixture(scope="function")
def sample_image():
"""
Create a sample image for testing
"""
# Create a simple test image
img = Image.new('RGB', (100, 100), color='red')
img_byte_arr = io.BytesIO()
img.save(img_byte_arr, format='JPEG')
img_byte_arr = img_byte_arr.getvalue()
return base64.b64encode(img_byte_arr).decode('utf-8')
@pytest.fixture(scope="function")
def sample_skin_tone():
"""
Sample skin tone data
"""
return {
"primary_tone": "medium",
"undertone": "warm",
"melanin_level": 45.5,
"rgb_values": {
"r": 180,
"g": 120,
"b": 80,
"hex": "B47850"
}
}
@pytest.fixture(scope="function")
def sample_conditions():
"""
Sample skin conditions
"""
return [
{"condition": "blackheads", "severity": "mild", "confidence": 85.5},
{"condition": "oily_skin", "severity": "moderate", "confidence": 92.0}
]
@pytest.fixture(scope="function")
def sample_user():
"""
Sample user data
"""
return {
"id": "test_user_123",
"email": "test@example.com",
"name": "Test User",
"created_at": "2024-01-01T00:00:00Z"
}
@pytest.fixture(scope="function")
def event_loop():
"""
Create an event loop for async tests
"""
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()