"""Test for ows-artist.""" from contextlib import nullcontext from typing import ContextManager from unittest.mock import MagicMock, call import pytest from flask.ctx import AppContext from owsrequest.utils import mock_request from requests import HTTPError from assets.constants import service from assets.exceptions import ArtistNotFound from assets.models import ows_artist @pytest.mark.parametrize( ( "mock_raises", "raise_for_status_exception", ), [ pytest.param( nullcontext(), None, id="200 success", ), pytest.param( pytest.raises(ArtistNotFound), HTTPError(response=MagicMock(status_code=404)), id="404 not found", ), pytest.param( pytest.raises(HTTPError, check=lambda e: e.response.status_code == 400), HTTPError(response=MagicMock(status_code=400)), id="400 bad request", ), pytest.param( pytest.raises(HTTPError, check=lambda e: e.response.status_code == 403), HTTPError(response=MagicMock(status_code=403)), id="403 forbidden", ), pytest.param( pytest.raises(HTTPError, check=lambda e: e.response.status_code == 500), HTTPError(response=MagicMock(status_code=500)), id="500 failure", ), ], ) def test_check_ownership( mock_raises: ContextManager[None], raise_for_status_exception: HTTPError, fixture_artist_id: int, fixture_app: AppContext, mock_raise_for_status: MagicMock, ) -> None: """Test for check_ownership method.""" path = f"/artist/{fixture_artist_id}" account_type = "vendor" account_id = "12345" mock_raise_for_status.side_effect = raise_for_status_exception mock_request.get(service.OWS_ARTIST, path) with mock_raises: ows_artist.check_ownership(fixture_artist_id, account_type, account_id) assert mock_raise_for_status.mock_calls == [call()]