public async Task <GetPostcodeCoordinatesResponse> GetPostcodeCoordinatesAsync(List <string> postCodes, CancellationToken cancellationToken) { string path = $"api/GetPostcodeCoordinates"; GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest = new GetPostcodeCoordinatesRequest() { Postcodes = postCodes }; var streamContent = HttpContentUtils.SerialiseToJsonAndCompress(getPostcodeCoordinatesRequest); ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> getPostcodeCoordinatesResponseWithWrapper; using (HttpResponseMessage response = await _httpClientWrapper.PostAsync(HttpClientConfigName.AddressService, path, streamContent, cancellationToken).ConfigureAwait(false)) { response.EnsureSuccessStatusCode(); Stream stream = await response.Content.ReadAsStreamAsync(); getPostcodeCoordinatesResponseWithWrapper = await Utf8Json.JsonSerializer.DeserializeAsync <ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> >(stream, StandardResolver.AllowPrivate); } if (!getPostcodeCoordinatesResponseWithWrapper.IsSuccessful) { throw new Exception($"Calling Address Service GetPostcodeCoordinatesAsync endpoint unsuccessful: {getPostcodeCoordinatesResponseWithWrapper.Errors.FirstOrDefault()?.ErrorMessage}"); } return(getPostcodeCoordinatesResponseWithWrapper.Content); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage reqAsHttpRequestMessage, CancellationToken cancellationToken) { try { NewRelic.Api.Agent.NewRelic.SetTransactionName("AddressService", "GetPostcodeCoordinates"); _logger.LogInformation("C# HTTP trigger function processed a request."); // accept compressed requests (can't do this with middleware) GetPostcodeCoordinatesRequest req = await HttpRequestMessageCompressionUtils.DeserialiseAsync <GetPostcodeCoordinatesRequest>(reqAsHttpRequestMessage); if (req.IsValid(out var validationResults)) { GetPostcodeCoordinatesResponse response = await _mediator.Send(req, cancellationToken); return(new OkObjectResult(ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> .CreateSuccessfulResponse(response))); } else { return(new ObjectResult(ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> .CreateUnsuccessfulResponse(AddressServiceErrorCode.ValidationError, validationResults)) { StatusCode = 422 }); } } catch (Exception ex) { _logger.LogErrorAndNotifyNewRelic($"Unhandled error in GetPostcodeCoordinates", ex); return(new ObjectResult(ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> .CreateUnsuccessfulResponse(AddressServiceErrorCode.UnhandledError, "Internal Error")) { StatusCode = StatusCodes.Status500InternalServerError }); } }
private HttpRequestMessage CreateInvalidRequest() { GetPostcodeCoordinatesRequest req = new GetPostcodeCoordinatesRequest() { Postcodes = null }; var httpRequestMessage = new HttpRequestMessage(); httpRequestMessage.Content = new StringContent(JsonConvert.SerializeObject(req)); return(httpRequestMessage); }
public async Task <GetPostcodeCoordinatesResponse> GetPostcodeCoordinates(GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest) { string json = JsonConvert.SerializeObject(getPostcodeCoordinatesRequest); StringContent data = new StringContent(json, Encoding.UTF8, "application/json"); HttpResponseMessage response = await Client.PostAsync("/api/GetPostcodeCoordinates", data); string str = await response.Content.ReadAsStringAsync(); var objResponse = JsonConvert.DeserializeObject <ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> >(str); if (objResponse.HasContent && objResponse.IsSuccessful) { return(objResponse.Content); } throw new System.Exception("Unable to fetch postcode coordinate response"); }
public async Task <List <PostcodeCoordinate> > GetPostcodeCoordinates(string postcode) { postcode = PostcodeFormatter.FormatPostcode(postcode); GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest = new GetPostcodeCoordinatesRequest() { Postcodes = new List <string>() { postcode } }; var response = await _addressRepository.GetPostcodeCoordinates(getPostcodeCoordinatesRequest); return(response.PostcodeCoordinates.ToList()); }
public async Task <GetPostcodeCoordinatesResponse> GetPostcodeCoordinates(GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest) { string json = JsonConvert.SerializeObject(getPostcodeCoordinatesRequest); StringContent data = new StringContent(json, Encoding.UTF8, "application/json"); using (HttpResponseMessage response = await _httpClientWrapper.PostAsync(HttpClientConfigName.AddressService, "/api/GetPostcodeCoordinates", data, CancellationToken.None)) { string jsonResponse = await response.Content.ReadAsStringAsync(); var sendEmailResponse = JsonConvert.DeserializeObject <ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> >(jsonResponse); if (sendEmailResponse.HasContent && sendEmailResponse.IsSuccessful) { return(sendEmailResponse.Content); } } return(null); }
public async Task Success() { GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest = new GetPostcodeCoordinatesRequest() { Postcodes = new List <string>() { "NG1 1AA" }, }; Core.Services.AddressService addressService = new Core.Services.AddressService(_httpClientWrapper.Object); GetPostcodeCoordinatesResponse result = await addressService.GetPostcodeCoordinatesAsync(getPostcodeCoordinatesRequest, CancellationToken.None); Assert.IsTrue(result.PostcodeCoordinates.Any(x => x.Postcode == "NG1 1AA" && x.Latitude == 45 && x.Longitude == 50)); _httpClientWrapper.Setup(x => x.PostAsync(It.Is <HttpClientConfigName>(y => y == HttpClientConfigName.AddressService), It.Is <string>(y => y == "api/GetPostcodeCoordinates"), It.IsAny <HttpContent>(), It.IsAny <CancellationToken>())); }
public async Task Unsuccessful() { HttpResponseMessage httpResponseMessage = CreateUnsuccesssfuResponseWrapperHttpResponseMessage <GetPostcodeCoordinatesResponse>(); _httpClientWrapper.Setup(x => x.PostAsync(It.IsAny <HttpClientConfigName>(), It.IsAny <string>(), It.IsAny <HttpContent>(), It.IsAny <CancellationToken>())).ReturnsAsync(httpResponseMessage); GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest = new GetPostcodeCoordinatesRequest() { Postcodes = new List <string>() { "NG1 1AA" }, }; Core.Services.AddressService addressService = new Core.Services.AddressService(_httpClientWrapper.Object); Exception ex = Assert.ThrowsAsync <Exception>(async() => await addressService.GetPostcodeCoordinatesAsync(getPostcodeCoordinatesRequest, CancellationToken.None)); Assert.AreEqual("Calling Address Service GetPostcodeCoordinatesAsync endpoint unsuccessful: Error", ex.Message); }
public async Task GetPostcodeCoordinates() { GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest = new GetPostcodeCoordinatesRequest() { Postcodes = new List <string>() { "NG1 5FS", "NG1 5BL" } }; GetPostcodeCoordinatesHandler getPostcodeCoordinatesHandler = new GetPostcodeCoordinatesHandler(_postcodeCoordinatesGetter.Object); GetPostcodeCoordinatesResponse result = await getPostcodeCoordinatesHandler.Handle(getPostcodeCoordinatesRequest, CancellationToken.None); Assert.AreEqual(2, result.PostcodeCoordinates.Count()); Assert.AreEqual(52.954885, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5FS").Latitude); Assert.AreEqual(-1.155263, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5FS").Longitude); Assert.AreEqual(52.955494, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5BL").Latitude); Assert.AreEqual(-1.154864, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5BL").Longitude); }