O2Sound_ver2_final/backend/tests/api/v1/test_user.py

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"]