private MercadoPagoApiException BuildApiErrorException(MercadoPagoResponse response) { ApiError apiError; try { apiError = Serializer.DeserializeFromJson <ApiError>(response.Content); } catch (Exception) { apiError = null; } return(new MercadoPagoApiException("Error response from API.", response) { ApiError = apiError, }); }
public async Task ExecuteRequestAsync_WithHttpRequestExceptionRetry_Success() { // Request var url = "http://localhost:8080/x"; var method = HttpMethod.GET; var requestContent = "Test"; var requestHeaders = new Dictionary <string, string> { ["X-Custom-Header"] = "123", }; var request = new MercadoPagoRequest(url, method, requestHeaders, requestContent); // Response var responseStatusCode = HttpStatusCode.OK; var responseContent = "OK"; var httpResponse = new HttpResponseMessage(responseStatusCode) { Content = new StringContent(responseContent), }; // Mock var httpClientMock = new HttpClientMock(); httpClientMock.MockRequest( url, System.Net.Http.HttpMethod.Get, (setupReturns) => setupReturns .ThrowsAsync(new HttpRequestException()) .ReturnsAsync(httpResponse)); var httpClient = new DefaultHttpClient(httpClientMock.HttpClient); var retryStrategy = new DefaultRetryStrategy(1); MercadoPagoResponse response = await httpClient.SendAsync(request, retryStrategy, default); Assert.Equal((int)responseStatusCode, response.StatusCode); Assert.Equal(responseContent, response.Content); }
private TResponse ParseResponse <TResponse>(MercadoPagoResponse response) where TResponse : IResource, new() { if (response.StatusCode != 200 && response.StatusCode != 201) { throw BuildApiErrorException(response); } TResponse resource; try { resource = Serializer.DeserializeFromJson <TResponse>(response.Content); } catch (Exception) { throw BuildInvalidResponseException(response); } resource.ApiResponse = response; return(resource); }
private MercadoPagoApiException BuildInvalidResponseException(MercadoPagoResponse response) { return(new MercadoPagoApiException("Invalid response from API.", response)); }
/// <summary> /// Initializes a new instance of the <see cref="MercadoPagoApiException"/> class. /// </summary> /// <param name="message">Message of the exception.</param> /// <param name="response">Response from API.</param> public MercadoPagoApiException(string message, MercadoPagoResponse response) : base(message) { ApiResponse = response; StatusCode = response?.StatusCode; }