1+ import pytest
2+ from fastapi .testclient import TestClient
3+ from sqlalchemy import create_engine
4+ from sqlalchemy .orm import sessionmaker
5+ from sqlalchemy .ext .asyncio import create_async_engine , AsyncSession
6+ from sqlalchemy .ext .declarative import declarative_base
7+
8+ from openai_api_client .main import app
9+ from openai_api_client .dependencies .database import Base , get_async_session
10+ from openai_api_client .services .user import user_service
11+ from openai_api_client .services .openai import openai_service
12+ from openai_api_client .models .user import User
13+ from openai_api_client .schemas .user import UserCreate
14+
15+ # --- Database Setup ---
16+
17+ @pytest .fixture (scope = "session" )
18+ async def async_session ():
19+ async_engine = create_async_engine (
20+ "postgresql://user:password@host:port/database" , echo = True
21+ )
22+ async_session = sessionmaker (
23+ autocommit = False ,
24+ autoflush = False ,
25+ bind = async_engine ,
26+ class_ = AsyncSession ,
27+ )
28+ async with async_session () as session :
29+ yield session
30+
31+ @pytest .fixture (scope = "session" )
32+ async def engine ():
33+ async_engine = create_async_engine (
34+ "postgresql://user:password@host:port/database" , echo = True
35+ )
36+ async with async_engine .begin () as conn :
37+ await conn .run_sync (Base .metadata .create_all )
38+ yield async_engine
39+
40+ # --- Mock Services ---
41+
42+ @pytest .fixture
43+ async def mock_user_service (async_session ):
44+ async with user_service (db = async_session ) as service :
45+ yield service
46+
47+ @pytest .fixture
48+ async def mock_openai_service ():
49+ async with openai_service () as service :
50+ yield service
51+
52+ # --- Test Client ---
53+
54+ @pytest .fixture
55+ def client ():
56+ return TestClient (app )
57+
58+ # --- Test Data ---
59+
60+ @pytest .fixture
61+ async def test_user (mock_user_service ):
62+ user_data = UserCreate (
63+ username = "testuser" ,
64+ email = "test@example.com" ,
65+ password = "testpassword" ,
66+ )
67+ user = await mock_user_service .create_user (user_data )
68+ yield user
69+ await mock_user_service .delete_user (user .id )
0 commit comments