O2Sound_ver2_final/backend/tests/conftest_simple.py

135 lines
3.3 KiB
Python

"""
테스트 환경 설정
실제 데이터베이스를 사용하지 않고 Mock만 사용하는 간단한 테스트 설정
"""
import pytest
from fastapi.testclient import TestClient
from unittest.mock import MagicMock, AsyncMock
import sys
import os
# 프로젝트 루트를 Python 경로에 추가
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from app.main import app
from app.dependencies import get_auth_service, get_user_service, get_video_service, get_google_service
from app.core.database import get_db
# Mock 데이터베이스 세션
class MockDB:
def __init__(self):
self.committed = False
self.rolled_back = False
def commit(self):
self.committed = True
def rollback(self):
self.rolled_back = True
def close(self):
pass
def add(self, obj):
pass
def query(self, model):
return MagicMock()
def refresh(self, obj):
pass
# 테스트용 데이터베이스 의존성 오버라이드
def override_get_db():
try:
db = MockDB()
yield db
finally:
db.close()
# Mock 서비스 생성
def create_mock_auth_service():
mock = MagicMock()
mock.join = MagicMock()
mock.login = MagicMock()
return mock
def create_mock_user_service():
mock = MagicMock()
mock.get_items = MagicMock()
mock.update_item = MagicMock()
mock.delete_item = MagicMock()
mock.get_user_profile = MagicMock()
mock.update_user_profile = MagicMock()
return mock
def create_mock_video_service():
mock = MagicMock()
mock.get_all_by_user_id = MagicMock()
mock.delete_by_video_id = MagicMock()
return mock
def create_mock_google_service():
mock = MagicMock()
mock.get_login_url = AsyncMock()
mock.handle_callback = AsyncMock()
mock.get_token_by_temp_id = AsyncMock()
return mock
def create_mock_redis_manager():
mock = MagicMock()
mock.get = AsyncMock(return_value=None)
mock.set = AsyncMock(return_value=True)
mock.delete = AsyncMock(return_value=True)
mock.exists = AsyncMock(return_value=False)
return mock
# 공통 Fixtures
@pytest.fixture
def client():
# 의존성 오버라이드
app.dependency_overrides[get_db] = override_get_db
with TestClient(app) as test_client:
yield test_client
app.dependency_overrides.clear()
@pytest.fixture
def mock_auth_service():
return create_mock_auth_service()
@pytest.fixture
def mock_user_service():
return create_mock_user_service()
@pytest.fixture
def mock_video_service():
return create_mock_video_service()
@pytest.fixture
def mock_google_service():
return create_mock_google_service()
@pytest.fixture
def mock_redis_manager():
return create_mock_redis_manager()
@pytest.fixture
def authenticated_client(client, mock_auth_service):
"""인증된 테스트 클라이언트"""
app.dependency_overrides[get_auth_service] = lambda: mock_auth_service
# 로그인 성공 시뮬레이션
mock_auth_service.login.return_value = {
"access_token": "test_access_token",
"token_type": "bearer",
"user_id": 1
}
# 헤더에 토큰 추가
client.headers = {"Authorization": "Bearer test_access_token"}
yield client
app.dependency_overrides.clear()