"""Functional tests for the DELETE /v2/track/ endpoint.""" from typing import Any from unittest.mock import MagicMock, patch import pytest from flask.testing import FlaskClient TRACK_ID = 10001 MOCK_DELETE_RESULT: dict[str, Any] = { "succeeded": [{"asset_upload": {"id": 1}, "delete_details": {}}], "failed": [], } @pytest.fixture def mock_delete_track() -> Any: """Mock delete_track to avoid real DB and HTTP calls.""" with patch( "assets.logic.delete.delete_track", return_value=MOCK_DELETE_RESULT ) as mock: yield mock def test_remove_track_asset_v2_without_asset_upload_type( fixture_client: FlaskClient, mock_delete_track: MagicMock, ) -> None: """Test DELETE /v2/track/ without asset_upload_type passes None to logic.""" result = fixture_client.delete(f"/v2/track/{TRACK_ID}") assert result.status_code == 200 mock_delete_track.assert_called_once_with(str(TRACK_ID), None) def test_remove_track_asset_v2_with_asset_upload_type( fixture_client: FlaskClient, mock_delete_track: MagicMock, ) -> None: """Test DELETE /v2/track/ with asset_upload_type passes it to logic.""" result = fixture_client.delete( f"/v2/track/{TRACK_ID}", query_string={"asset_upload_type": "stereo"}, ) assert result.status_code == 200 mock_delete_track.assert_called_once_with(str(TRACK_ID), "stereo") def test_remove_track_asset_v2_invalid_asset_upload_type( fixture_client: FlaskClient, mock_delete_track: MagicMock, ) -> None: """Test DELETE /v2/track/ with an invalid asset_upload_type returns 400.""" result = fixture_client.delete( f"/v2/track/{TRACK_ID}", query_string={"asset_upload_type": "invalid_type"}, ) assert result.status_code == 400 mock_delete_track.assert_not_called()