"""Tests for main handlers, /v2/track base.""" import json from typing import Any import pytest from flask.testing import FlaskClient from flexmock import flexmock from owsresponse import response from assets.exceptions import AssetDeleteFailure from assets.logic import delete as delete_logic_v2, ownership OA_HEADERS = {"Orchard-User-Id": "oa:12345"} ALW_HEADERS = { "Orchard-User-Id": "alw:12345", "Grass-Account-Id": "234234", "Grass-Account-Type": "vendor", } @pytest.mark.parametrize("headers", [OA_HEADERS, ALW_HEADERS, {}]) def test_remove_track_asset_v2_success( fixture_client: FlaskClient, headers: dict[str, Any] ) -> None: """Test route for deleting track assets.""" # mocking track_id = "1" request_url = f"/v2/track/{track_id}" ownership_mock_calls = 1 if headers == ALW_HEADERS else 0 flexmock(ownership).should_receive("check_track_ownership").times( ownership_mock_calls ).and_return(response.Response()) successful_response = {"status": "ok"} flexmock(delete_logic_v2).should_receive("delete_track").and_return( successful_response ) data = {} headers = headers.copy() if not headers: data = {"Orchard-User-Id": "alw:321"} headers["Content-Type"] = "application/json" # test function call result = fixture_client.delete(request_url, data=json.dumps(data), headers=headers) # checking assert result.status_code == 200 assert result.headers.get("Correlation-Id") assert successful_response == json.loads(result.data.decode("utf-8")) def test_remove_track_asset_v2_success_no_user_id(fixture_client: FlaskClient) -> None: """Test route for deleting track assets with no user_id.""" # mocking track_id = "1" request_url = f"/v2/track/{track_id}" flexmock(ownership).should_receive("check_track_ownership").times(0).and_return( response.Response() ) successful_response = {"status": "ok"} flexmock(delete_logic_v2).should_receive("delete_track").and_return( successful_response ) # test function call result = fixture_client.delete(request_url) # checking assert result.status_code == 200 assert result.headers.get("Correlation-Id") assert successful_response == json.loads(result.data.decode("utf-8")) def test_remove_track_asset_v2_permission_failure(fixture_client: FlaskClient) -> None: """Test permission failure of route for deleting track assets.""" # mocking track_id = "1" request_url = f"/v2/track/{track_id}" flexmock(ownership).should_receive("check_track_ownership").and_return( response.create_error_response( code="not_owned", message="not_owned", status=403 ) ) flexmock(delete_logic_v2).should_receive("delete_track").and_return( response.Response() ) # test function call result = fixture_client.delete(request_url, headers=ALW_HEADERS) # checking assert result.status_code == 403 assert result.headers.get("Correlation-Id") def test_remove_track_asset_v2_logic_failure(fixture_client: FlaskClient) -> None: """Test permission failure of route for deleting track assets.""" # mocking track_id = "1" request_url = f"/v2/track/{track_id}" flexmock(ownership).should_receive("check_track_ownership").and_return( response.Response() ) flexmock(delete_logic_v2).should_receive("delete_track").and_raise( AssetDeleteFailure ) # test function call result = fixture_client.delete(request_url, headers=ALW_HEADERS) # checking assert result.status_code == 500 assert result.headers.get("Correlation-Id")