haystack/test/utils/test_requests.py
ZanSara 49e037a055
fix: rename requests.py into requests_utils.py (#5099)
* requests.py -> requests_utils.py

* fix tests

* reimport requrests

* fix more tests

* review feedback
2023-06-12 12:40:21 +02:00

73 lines
2.8 KiB
Python

from unittest.mock import patch, Mock
import pytest
import requests
from haystack.utils.requests_utils import request_with_retry
@pytest.mark.unit
@patch("haystack.utils.requests_utils.requests.request")
def test_request_with_retry_defaults_successfully(mock_request):
# Make requests with default retry configuration
request_with_retry(method="GET", url="https://example.com")
# Verifies request has not been retried
mock_request.assert_called_once_with(method="GET", url="https://example.com", timeout=10)
@pytest.mark.unit
@patch("haystack.utils.requests_utils.requests.request")
def test_request_with_retry_custom_timeout(mock_request):
# Make requests with default retry configuration
request_with_retry(method="GET", url="https://example.com", timeout=5)
# Verifies request has not been retried
mock_request.assert_called_once_with(method="GET", url="https://example.com", timeout=5)
@pytest.mark.unit
@patch("haystack.utils.requests_utils.requests.request")
def test_request_with_retry_failing_request_and_expected_status_code(mock_request):
# Create fake failed response with status code that triggers retry
fake_response = requests.Response()
fake_response.status_code = 408
mock_request.return_value = fake_response
# Make request with expected status code and verify error is raised
with pytest.raises(requests.HTTPError):
request_with_retry(method="GET", url="https://example.com", timeout=1, attempts=2, status_codes_to_retry=[408])
# Veries request has been retried the expected number of times
assert mock_request.call_count == 2
@pytest.mark.unit
@patch("haystack.utils.requests_utils.requests.request")
def test_request_with_retry_failing_request_and_ignored_status_code(mock_request):
# Create fake failed response with status code that doesn't trigger retry
fake_response = requests.Response()
fake_response.status_code = 500
mock_request.return_value = fake_response
# Make request with status code that won't trigger a retry and verify error is raised
with pytest.raises(requests.HTTPError):
request_with_retry(method="GET", url="https://example.com", timeout=1, status_codes_to_retry=[404])
# Verify request has not been retried
mock_request.assert_called_once()
@pytest.mark.unit
@patch("haystack.utils.requests_utils.requests.request")
def test_request_with_retry_timed_out_request(mock_request: Mock):
# Make request fail cause of a timeout
mock_request.side_effect = TimeoutError()
# Make request and verifies it fails
with pytest.raises(TimeoutError):
request_with_retry(method="GET", url="https://example.com", timeout=1, attempts=2)
# Verifies request has been retried the expected number of times
assert mock_request.call_count == 2