215 lines
7.7 KiB
Python
215 lines
7.7 KiB
Python
import pytest
|
|
from app.dependencies import get_user_service, get_video_service
|
|
|
|
class TestUserAPI:
|
|
"""사용자 관련 API 테스트"""
|
|
|
|
# User Items 관련 테스트
|
|
def test_get_items_success(self, authenticated_client, mock_user_service):
|
|
"""사용자 아이템 조회 성공 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_user_service] = lambda: mock_user_service
|
|
mock_user_service.get_items.return_value = {
|
|
"items": [
|
|
{"id": 1, "name": "Item 1", "type": "video"},
|
|
{"id": 2, "name": "Item 2", "type": "audio"}
|
|
],
|
|
"total": 2
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.post("/api/v1/user/items", json={
|
|
"user_id": 1,
|
|
"page": 1,
|
|
"limit": 10
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
assert len(data["data"]["items"]) == 2
|
|
assert data["data"]["total"] == 2
|
|
|
|
def test_get_items_empty(self, authenticated_client, mock_user_service):
|
|
"""아이템이 없는 경우 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_user_service] = lambda: mock_user_service
|
|
mock_user_service.get_items.return_value = {
|
|
"items": [],
|
|
"total": 0
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.post("/api/v1/user/items", json={
|
|
"user_id": 1,
|
|
"page": 1,
|
|
"limit": 10
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["data"]["items"] == []
|
|
assert data["data"]["total"] == 0
|
|
|
|
def test_update_item_success(self, authenticated_client, mock_user_service):
|
|
"""아이템 업데이트 성공 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_user_service] = lambda: mock_user_service
|
|
mock_user_service.update_item.return_value = {
|
|
"id": 1,
|
|
"name": "Updated Item",
|
|
"type": "video",
|
|
"updated": True
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.put("/api/v1/user/item/update", json={
|
|
"item_id": 1,
|
|
"name": "Updated Item",
|
|
"description": "Updated description"
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
assert data["data"]["name"] == "Updated Item"
|
|
assert data["data"]["updated"] == True
|
|
|
|
def test_delete_item_success(self, authenticated_client, mock_user_service):
|
|
"""아이템 삭제 성공 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_user_service] = lambda: mock_user_service
|
|
mock_user_service.delete_item.return_value = {
|
|
"deleted": True,
|
|
"item_id": 1
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.delete("/api/v1/user/item/delete", json={
|
|
"item_id": 1,
|
|
"user_id": 1
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
assert data["data"]["deleted"] == True
|
|
|
|
# User Videos 관련 테스트
|
|
def test_get_videos_success(self, authenticated_client, mock_video_service):
|
|
"""사용자 비디오 조회 성공 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_video_service] = lambda: mock_video_service
|
|
mock_video_service.get_all_by_user_id.return_value = {
|
|
"videos": [
|
|
{"id": 1, "title": "Video 1", "duration": 120},
|
|
{"id": 2, "title": "Video 2", "duration": 180}
|
|
],
|
|
"total": 2
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.post("/api/v1/user/videos", json={
|
|
"user_id": 1,
|
|
"page": 1,
|
|
"limit": 10
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
assert len(data["data"]["videos"]) == 2
|
|
|
|
def test_delete_video_success(self, authenticated_client, mock_video_service):
|
|
"""비디오 삭제 성공 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_video_service] = lambda: mock_video_service
|
|
mock_video_service.delete_by_video_id.return_value = {
|
|
"deleted": True,
|
|
"video_id": 1
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.delete("/api/v1/user/video/delete", json={
|
|
"video_id": 1,
|
|
"user_id": 1
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
assert data["data"]["deleted"] == True
|
|
|
|
# User Profile 관련 테스트
|
|
def test_get_profile_success(self, authenticated_client, mock_user_service):
|
|
"""프로필 조회 성공 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_user_service] = lambda: mock_user_service
|
|
mock_user_service.get_user_profile.return_value = {
|
|
"user_id": 1,
|
|
"email": "test@example.com",
|
|
"name": "Test User",
|
|
"profile_image": "https://example.com/profile.jpg",
|
|
"bio": "Hello, I'm a test user"
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.post("/api/v1/user/profile", json={
|
|
"user_id": 1
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
assert data["data"]["email"] == "test@example.com"
|
|
assert data["data"]["name"] == "Test User"
|
|
|
|
def test_update_profile_success(self, authenticated_client, mock_user_service):
|
|
"""프로필 업데이트 성공 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_user_service] = lambda: mock_user_service
|
|
mock_user_service.update_user_profile.return_value = {
|
|
"user_id": 1,
|
|
"name": "Updated User",
|
|
"bio": "Updated bio",
|
|
"updated": True
|
|
}
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.put("/api/v1/user/profile/update", json={
|
|
"user_id": 1,
|
|
"name": "Updated User",
|
|
"bio": "Updated bio"
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["status"] == "success"
|
|
assert data["data"]["name"] == "Updated User"
|
|
assert data["data"]["bio"] == "Updated bio"
|
|
|
|
def test_get_profile_not_found(self, authenticated_client, mock_user_service):
|
|
"""존재하지 않는 프로필 조회 테스트"""
|
|
# Mock 설정
|
|
authenticated_client.app.dependency_overrides[get_user_service] = lambda: mock_user_service
|
|
mock_user_service.get_user_profile.side_effect = ValueError("사용자를 찾을 수 없습니다")
|
|
|
|
# 테스트 실행
|
|
response = authenticated_client.post("/api/v1/user/profile", json={
|
|
"user_id": 999
|
|
})
|
|
|
|
# 검증
|
|
assert response.status_code == 400
|
|
data = response.json()
|
|
assert data["status"] == "error"
|
|
assert "사용자를 찾을 수 없습니다" in data["message"]
|