public async Task ExecuteRequestAsync_ThrowsException_Fail() { // 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); // Mock var httpClientMock = new HttpClientMock(); httpClientMock.MockRequestError( url, System.Net.Http.HttpMethod.Get, new Exception()); var httpClient = new DefaultHttpClient(httpClientMock.HttpClient); var retryStrategy = new DefaultRetryStrategy(1); await Assert.ThrowsAsync <Exception>(() => httpClient.SendAsync(request, retryStrategy, default)); }
private async Task <TResponse> SendAsync <TResponse>( string path, HttpMethod httpMethod, object request, RequestOptions requestOptions, CancellationToken cancellationToken) where TResponse : IResource, new() { MercadoPagoResponse response; requestOptions = BuildRequestOptions(requestOptions); try { MercadoPagoRequest mercadoPagoRequest = await BuildRequestAsync( path, httpMethod, request, requestOptions); response = await HttpClient.SendAsync( mercadoPagoRequest, requestOptions.RetryStrategy, cancellationToken).ConfigureAwait(false); } catch (Exception ex) { throw new MercadoPagoException(ex); } return(ParseResponse <TResponse>(response)); }
public async Task ExecuteRequestAsync_AllParameters_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), }; httpResponse.Headers.Add("X-Custom-Response-Header", "456"); // Mock var httpClientMock = new HttpClientMock(); httpClientMock.MockRequest(url, System.Net.Http.HttpMethod.Get, httpResponse); var httpClient = new DefaultHttpClient(httpClientMock.HttpClient); var retryStrategy = new DefaultRetryStrategy(0); MercadoPagoResponse response = await httpClient.SendAsync(request, retryStrategy, default); Assert.Equal((int)responseStatusCode, response.StatusCode); Assert.Equal(responseContent, response.Content); }
private static void AddIdempotencyKey(MercadoPagoRequest mercadoPagoRequest, object request) { if (mercadoPagoRequest.Method == HttpMethod.Post) { if (request is IdempotentRequest) { mercadoPagoRequest.Headers.Add(Headers.IdempotencyKey, IdempotentRequest.CreateIdempotencyKey()); } } }
private void AddIdempotencyKey(MercadoPagoRequest mercadoPagoRequest, object request) { if (mercadoPagoRequest.Method == HttpMethod.POST) { bool headerHasIdempotencyKey = mercadoPagoRequest.ContainsHeader(Headers.IDEMPOTENCY_KEY); if (request is IdempotentRequest idempotentRequest && !headerHasIdempotencyKey) { mercadoPagoRequest.Headers.Add(Headers.IDEMPOTENCY_KEY, idempotentRequest.CreateIdempotencyKey()); } } }
private MercadoPagoRequest BuildRequest( string path, HttpMethod httpMethod, RequestOptions requestOptions) { var mercadoPagoRequest = new MercadoPagoRequest { Url = $"{MercadoPagoConfig.BaseUrl}{path}", Method = httpMethod, }; AddRequestHeaders(path, mercadoPagoRequest, requestOptions); return(mercadoPagoRequest); }
public async Task <MercadoPagoResponse> MercadoPago(MercadoPagoRequest mercadoPago) { XDocument xml = new XDocument( new XElement("paymentmp", new XElement("pago", new XElement("aplicacion", mercadoPago.aplicacion), new XElement("codigoreferencia", mercadoPago.codigoreferencia), new XElement("descripcion", mercadoPago.descripcion), new XElement("monto", mercadoPago.monto) ))); MERCADOPAGOResponse response = await new ws_lolimsaservicesSoapPortClient().MERCADOPAGOAsync(xml.ToString()); return(new MercadoPagoResponse { url = response.Result }); }
private void AddRequestHeaders( string path, MercadoPagoRequest mercadoPagoRequest, RequestOptions requestOptions) { foreach (var header in DefaultHeaders) { mercadoPagoRequest.Headers.Add(header); } path = path ?? string.Empty; if (!path.Equals("/oauth/token", StringComparison.InvariantCultureIgnoreCase)) { mercadoPagoRequest.Headers.Add(Headers.AUTHORIZATION, $"Bearer {requestOptions.AccessToken}"); } if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.CorporationId)) { mercadoPagoRequest.Headers.Add(Headers.CORPORATION_ID, MercadoPagoConfig.CorporationId); } if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.IntegratorId)) { mercadoPagoRequest.Headers.Add(Headers.INTEGRATOR_ID, MercadoPagoConfig.IntegratorId); } if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.PlatformId)) { mercadoPagoRequest.Headers.Add(Headers.PLATFORM_ID, MercadoPagoConfig.PlatformId); } foreach (var header in requestOptions.CustomHeaders) { if (!mercadoPagoRequest.Headers.ContainsKey(header.Key) && !Headers.CONTENT_TYPE.Equals(header.Key, StringComparison.InvariantCultureIgnoreCase)) { mercadoPagoRequest.Headers.Add(header); } } }
private void AddRequestHeaders( string path, MercadoPagoRequest mercadoPagoRequest, RequestOptions requestOptions) { foreach (var header in DefaultHeaders) { mercadoPagoRequest.Headers.Add(header); } path ??= string.Empty; if (!path.Equals("/oauth/token", StringComparison.InvariantCultureIgnoreCase)) { mercadoPagoRequest.Headers.Add(Headers.Authorization, $"Bearer {requestOptions.AccessToken}"); } if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.CorporationId)) { mercadoPagoRequest.Headers.Add(Headers.CorporationId, MercadoPagoConfig.CorporationId); } if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.IntegratorId)) { mercadoPagoRequest.Headers.Add(Headers.IntegratorId, MercadoPagoConfig.IntegratorId); } if (!string.IsNullOrWhiteSpace(MercadoPagoConfig.PlatformId)) { mercadoPagoRequest.Headers.Add(Headers.PlatformId, MercadoPagoConfig.PlatformId); } foreach (var header in requestOptions.CustomHeaders) { if (!mercadoPagoRequest.Headers.ContainsKey(header.Key) && !Headers.ContentType.Equals(header.Key, StringComparison.InvariantCultureIgnoreCase)) { mercadoPagoRequest.Headers.Add(header); } } }
public async Task ExecuteRequestAsync_WithOperationCanceledExceptionRetry_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 finalHttpResponse = new HttpResponseMessage(responseStatusCode) { Content = new StringContent(responseContent), }; // Mock var httpClientMock = new HttpClientMock(); httpClientMock.MockRequest( url, System.Net.Http.HttpMethod.Get, (setupReturns) => setupReturns .ThrowsAsync(new OperationCanceledException()) .ReturnsAsync(finalHttpResponse)); 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); }