from unittest.mock import patch from flexmock import flexmock from oto import response from owsrequest import request import pytest from requests import Response from masters_registry import utils from masters_registry.constant import error from masters_registry.models import ows_carveouts PATCH_TARGET = 'masters_registry.models.ows_carveouts.' PATCH_TARGET += '_get_from_ows_carveouts_service' def mock_get_for_dms(*args): return response.Response( message={'424': {'distros': ['1'], 'dms_name': 'rDio'}}) def mock_get_for_territories(*args): return response.Response( message={'3': 'GB', '4': 'DE'}) def mock_get_store_name(*args): return response.Response( message={'453': 'YouTube', '454': 'Inform-mobil'} ) def mock_get_store_name_no_carveouts_response(*args): return response.Response( status=404 ) def mock_get_store_name_no_store(*args): return response.Response( status=404, message=error.STORE_DOES_NOT_EXIST ) @patch(target=PATCH_TARGET, side_effect=mock_get_for_dms) def test_get_dms_carveout_for_upc(mock_get): res = ows_carveouts.get_dms_carveout_for_upc(123) assert mock_get(None).status == res.status assert mock_get(None).message == res.message def test_get_dms_carveout_for_upc_exception(): """Test for handling exception of OwsCarveoutError """ (flexmock(ows_carveouts) .should_receive('_get_from_ows_carveouts_service') .and_raise(ows_carveouts.OwsCarveoutError( status_code=504, message='Test message' ))) result = ows_carveouts.get_dms_carveout_for_upc(123) assert result.status == 504 assert result.errors['message'] == 'Test message' @patch(target=PATCH_TARGET, side_effect=mock_get_for_territories) def test_get_territory_carveout_for_upc(mock_get): res = ows_carveouts.get_territory_carveout_for_upc(123) assert mock_get(None).status == res.status assert mock_get(None).message == res.message def test_get_territory_carveout_for_upc_exception(): """Test for handling exception of OwsCarveoutError """ (flexmock(ows_carveouts) .should_receive('_get_from_ows_carveouts_service') .and_raise(ows_carveouts.OwsCarveoutError( status_code=504, message='Test message' ))) result = ows_carveouts.get_territory_carveout_for_upc(123) assert result.status == 504 assert result.errors['message'] == 'Test message' @patch(target=PATCH_TARGET, side_effect=mock_get_store_name) def test_get_store_name_success(mock_get): res = ows_carveouts.get_store_name('453') assert mock_get(None).message['453'] == res.message @patch(target=PATCH_TARGET, side_effect=mock_get_store_name_no_carveouts_response) def test_get_store_name_no_carveouts_response(mock_get): ows_carveouts.store_names_cache = {} res = ows_carveouts.get_store_name('453') assert mock_get(None).status == res.status @patch(target=PATCH_TARGET, side_effect=mock_get_store_name_no_store) def test_get_store_name_no_store(mock_get): ows_carveouts.store_names_cache = {} res = ows_carveouts.get_store_name('453') assert mock_get(None).status == res.status assert mock_get(None).message == res.message def test_get_from_ows_carveouts_service_success(monkeypatch): """Test successful case of calling function _get_from_ows_carveouts_service """ resp = Response() resp.status_code = 200 (flexmock(request).should_receive('get').and_return(resp)) result = ows_carveouts._get_from_ows_carveouts_service('/test', '1234') assert result.status == 200 def test_get_from_ows_carveouts_service_raise_exception(monkeypatch): """Test case with raising exception in function _get_from_ows_carveouts_service """ resp = Response() resp.status_code = 504 (flexmock(request).should_receive('get').and_return(resp)) with pytest.raises(utils.RetryCountExceededError): ows_carveouts._get_from_ows_carveouts_service('/test', '1234')