125 lines
3.1 KiB
Markdown
125 lines
3.1 KiB
Markdown
# Backend API Tests
|
|
|
|
백엔드 API 엔드포인트에 대한 테스트 스위트입니다.
|
|
|
|
## 테스트 구조
|
|
|
|
```
|
|
tests/
|
|
├── __init__.py
|
|
├── conftest.py # 공통 fixture 및 설정
|
|
└── api/
|
|
└── v1/
|
|
├── __init__.py
|
|
├── test_auth.py # 인증 API 테스트
|
|
├── test_user.py # 사용자 API 테스트
|
|
├── test_moviemakers.py # MovieMaker API 테스트
|
|
├── test_social.py # 소셜 로그인 API 테스트
|
|
└── test_uservideo.py # 비디오 스트리밍 API 테스트
|
|
```
|
|
|
|
## 테스트 실행 방법
|
|
|
|
### 모든 테스트 실행
|
|
```bash
|
|
cd backend
|
|
pytest tests/
|
|
```
|
|
|
|
### 특정 파일의 테스트만 실행
|
|
```bash
|
|
pytest tests/api/v1/test_auth.py
|
|
```
|
|
|
|
### 특정 테스트 함수만 실행
|
|
```bash
|
|
pytest tests/api/v1/test_auth.py::TestAuthAPI::test_login_success
|
|
```
|
|
|
|
### 테스트 커버리지 확인
|
|
```bash
|
|
pytest tests/ --cov=app --cov-report=html
|
|
```
|
|
|
|
## 테스트 케이스 설명
|
|
|
|
### 1. Auth API Tests (test_auth.py)
|
|
- **회원가입 테스트**
|
|
- 성공적인 회원가입
|
|
- 중복 이메일 처리
|
|
- 비밀번호 불일치 처리
|
|
|
|
- **로그인 테스트**
|
|
- 성공적인 로그인
|
|
- 잘못된 인증정보 처리
|
|
- 빈 값 검증
|
|
|
|
### 2. User API Tests (test_user.py)
|
|
- **아이템 관리**
|
|
- 아이템 목록 조회
|
|
- 아이템 업데이트
|
|
- 아이템 삭제
|
|
|
|
- **비디오 관리**
|
|
- 비디오 목록 조회
|
|
- 비디오 삭제
|
|
|
|
- **프로필 관리**
|
|
- 프로필 조회
|
|
- 프로필 업데이트
|
|
- 존재하지 않는 사용자 처리
|
|
|
|
### 3. MovieMaker API Tests (test_moviemakers.py)
|
|
- **워크플로우 시작**
|
|
- 정상적인 워크플로우 시작
|
|
- 잘못된 URL 처리
|
|
|
|
- **진행상황 조회**
|
|
- 진행 중인 작업 상태 확인
|
|
- 완료된 작업 확인
|
|
- 존재하지 않는 작업 처리
|
|
|
|
### 4. Social API Tests (test_social.py)
|
|
- **Google OAuth 로그인**
|
|
- 로그인 URL 생성
|
|
- OAuth 콜백 처리
|
|
- 에러 처리
|
|
|
|
- **토큰 정보 조회**
|
|
- 임시 토큰으로 정보 조회
|
|
- 만료된 토큰 처리
|
|
|
|
### 5. User Video API Tests (test_uservideo.py)
|
|
- **비디오 스트리밍**
|
|
- 정상적인 스트리밍
|
|
- 파일이 없는 경우 처리
|
|
- URL 인코딩된 파일명 처리
|
|
- 경로 탐색 공격 방지
|
|
|
|
## Mock 사용
|
|
|
|
테스트에서는 실제 서비스 대신 Mock 객체를 사용합니다:
|
|
|
|
- `mock_auth_service`: 인증 서비스 Mock
|
|
- `mock_user_service`: 사용자 서비스 Mock
|
|
- `mock_video_service`: 비디오 서비스 Mock
|
|
- `mock_google_service`: Google OAuth 서비스 Mock
|
|
- `mock_redis_manager`: Redis 관리자 Mock
|
|
|
|
## 테스트 환경 설정
|
|
|
|
테스트는 SQLite 메모리 데이터베이스를 사용하며, 각 테스트마다 깨끗한 상태에서 시작합니다.
|
|
|
|
```python
|
|
SQLALCHEMY_DATABASE_URL = "sqlite:///:memory:"
|
|
```
|
|
|
|
## 추가 테스트 작성 가이드
|
|
|
|
새로운 엔드포인트를 추가할 때:
|
|
|
|
1. 해당 API 파일에 테스트 클래스 추가
|
|
2. 성공 케이스와 실패 케이스 모두 작성
|
|
3. Mock 객체를 활용하여 외부 의존성 제거
|
|
4. 엣지 케이스 고려 (빈 값, 잘못된 형식 등)
|