"""Tests for ows-blacklist-manager model.""" import json import pytest from requests import Response from backend.constants import error from backend.exceptions import RequestError from backend.models import ows_blacklist_manager def _mock_blacklist_request(status_code, payload, mocker): """Mock POST method of owsrequest.request for ows-blacklist-manager.""" mock_response = Response() mock_response._content = json.dumps(payload).encode('latin1') mock_response.status_code = status_code mock_method = mocker.patch.object( ows_blacklist_manager.request, 'post', return_value=mock_response) return mock_method def test_validate_artists_success(mocker, validate_artists_request_payload): """A 200 response means no watchlist matches; should return an empty dict.""" _mock_blacklist_request(200, {}, mocker) result = ows_blacklist_manager.validate_artists(validate_artists_request_payload) assert result == {} def test_validate_artists_validation_result( mocker, validate_artists_request_payload, spotify_watchlist_validation_errors_response): """A 400 response indicates watchlist matches; body should be returned as-is.""" _mock_blacklist_request(400, spotify_watchlist_validation_errors_response, mocker) result = ows_blacklist_manager.validate_artists(validate_artists_request_payload) assert result == spotify_watchlist_validation_errors_response def test_validate_artists_error(mocker, validate_artists_request_payload): """A 500 response should raise a RequestError with the blacklist manager error code.""" _mock_blacklist_request(500, {'message': 'internal server error'}, mocker) with pytest.raises(RequestError) as exc_info: ows_blacklist_manager.validate_artists(validate_artists_request_payload) assert exc_info.value.error_code == error.OWS_BLACKLIST_MANAGER_ERROR