import pytest import requests from am_http_client.client import Client from httpretty import activate, httpretty from smelog.factory import SmeBoundLogger # noinspection PyTestParametrized @pytest.mark.parametrize('api_dummy_response__status_code', [429, 500, 599]) def test_client_retries_ok(credentials, api_dummy_response, logger: SmeBoundLogger): logger: SmeBoundLogger max_retries = 5 album_id = '1460462589' storefront = 'foo' url = f'https://api.music.apple.com/v1/catalog/{storefront}/albums/{album_id}' httpretty.enable(allow_net_connect=False) httpretty.register_uri(httpretty.GET, url, responses=[api_dummy_response]) with pytest.raises(requests.exceptions.HTTPError) as e: client = Client(credentials, max_retries=max_retries, retry_interval=0, logger=logger) client.get_album(album_id, storefront) assert len(httpretty.latest_requests) == max_retries assert isinstance(e, requests.exceptions.HTTPError) # noinspection PyTestParametrized @pytest.mark.parametrize('api_dummy_response__status_code', [428, 431, 499]) def test_client_retries_skipped(credentials, api_dummy_response, logger: SmeBoundLogger): max_retries = 5 album_id = '1460462589' storefront = 'foo' url = f'https://api.music.apple.com/v1/catalog/{storefront}/albums/{album_id}' httpretty.enable(allow_net_connect=False) httpretty.register_uri(httpretty.GET, url, responses=[api_dummy_response]) with pytest.raises(requests.exceptions.HTTPError) as e: client = Client(credentials, max_retries=max_retries, retry_interval=0, logger=logger) client.get_album(album_id, storefront) assert len(httpretty.latest_requests) == 1 assert isinstance(e, requests.exceptions.HTTPError)