def test_get_raise_for_status(self, mock_get, mock_rate_limit): max_retries = 7 expected_result = "test_text" test_url = "example.com/route" api = PushshiftAPIMinimal(max_retries=max_retries, rate_limit_per_minute=self._rate_limit) # Test a subset of codes that should cause an outright failure for idx, status_code in enumerate( [400, 401, 403, 404, 405, 500, 502, 503, 504]): mock_get.return_value = MockResponse( status_code=status_code, text=json.dumps(expected_result)) try: api._get(test_url) self.fail("call failed to trigger expected exception") except HTTPError as exc: self.assertIn( "{} {} Error".format( status_code, "Server" if status_code >= 500 else "Client"), str(exc), ) expected_calls = max_retries * (idx + 1) # Ensure the correct count of retries triggered mock_get.assert_called_with(test_url, params={}) self.assertEqual(expected_calls, mock_get.call_count) # Ensure the rate limit was applied self.assertEqual(expected_calls, mock_rate_limit.call_count) mock_rate_limit.assert_has_calls( [mock.call(idx) for idx in range(0, max_retries)]) mock_get.return_value.raise_for_status.assert_called_once()
def test_get(self, mock_get, mock_rate_limit): max_retries = 7 expected_result = "test_text" test_url = "example.com/route" api = PushshiftAPIMinimal(max_retries=max_retries, rate_limit_per_minute=self._rate_limit) mock_get.return_value = MockResponse(status_code=200, text=json.dumps(expected_result)) self.assertEqual(expected_result, api._get(test_url)) # Ensure the correct count of retries triggered mock_get.assert_called_with(test_url, params={}) self.assertEqual(1, mock_get.call_count) # Ensure the rate limit was applied self.assertEqual(1, mock_rate_limit.call_count) mock_rate_limit.assert_has_calls([mock.call(0)]) mock_get.return_value.raise_for_status.assert_called_once()
def test_get_429(self, mock_get, mock_rate_limit): max_retries = 7 expected_result = "test_text" test_url = "example.com/route" api = PushshiftAPIMinimal(max_retries=max_retries, rate_limit_per_minute=self._rate_limit) mock_get.return_value = MockResponse(status_code=429, text=json.dumps(expected_result)) self.assertEqual(expected_result, api._get(test_url)) # Ensure the correct count of retries triggered mock_get.assert_called_with(test_url, params={}) self.assertEqual(max_retries, mock_get.call_count) # Ensure the rate limit was applied self.assertEqual(max_retries, mock_rate_limit.call_count) mock_rate_limit.assert_has_calls( [mock.call(idx) for idx in range(0, max_retries)]) # This is the key difference with code 429 mock_get.return_value.raise_for_status.assert_not_called()