"""Tests for extraction API endpoints.""" import pytest from httpx import AsyncClient class TestExtractionEndpoints: """Test extraction API endpoints.""" @pytest.mark.asyncio async def test_create_extraction_success( self, test_client: AsyncClient, auth_cookies: dict[str, str], ) -> None: """Test successful extraction creation.""" # Set cookies on client instance to avoid deprecation warning test_client.cookies.update(auth_cookies) response = await test_client.post( "/api/v1/sounds/extract", params={"url": "https://www.youtube.com/watch?v=test"}, ) # This will fail because we don't have actual extraction service mocked # But at least we'll get past authentication assert response.status_code in [200, 400, 500] # Allow any non-auth error @pytest.mark.asyncio async def test_create_extraction_unauthenticated(self, test_client: AsyncClient) -> None: """Test extraction creation without authentication.""" response = await test_client.post( "/api/v1/sounds/extract", params={"url": "https://www.youtube.com/watch?v=test"}, ) # Should return 401 for missing authentication assert response.status_code == 401 @pytest.mark.asyncio async def test_get_extraction_unauthenticated(self, test_client: AsyncClient) -> None: """Test extraction retrieval without authentication.""" response = await test_client.get("/api/v1/sounds/extract/1") # Should return 401 for missing authentication assert response.status_code == 401 @pytest.mark.asyncio async def test_get_processor_status_moved_to_admin( self, test_client: AsyncClient, admin_cookies: dict[str, str], ) -> None: """Test that processor status endpoint was moved to admin.""" # Set cookies on client instance to avoid deprecation warning test_client.cookies.update(admin_cookies) # The new admin endpoint should work response = await test_client.get("/api/v1/admin/sounds/extract/status") assert response.status_code == 200 data = response.json() assert "running" in data or "is_running" in data assert "max_concurrent" in data @pytest.mark.asyncio async def test_get_user_extractions( self, test_client: AsyncClient, auth_cookies: dict[str, str], ) -> None: """Test getting user extractions.""" # Set cookies on client instance to avoid deprecation warning test_client.cookies.update(auth_cookies) response = await test_client.get("/api/v1/sounds/extract") # Should succeed and return empty list (no extractions in test DB) assert response.status_code == 200 data = response.json() assert "extractions" in data assert isinstance(data["extractions"], list)