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