public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] [RequestBodyType(typeof(GetNumberOfAddressesPerPostcodeInBoundaryRequest), "Get Number Of Addresses Per Postcode In Boundary")] GetNumberOfAddressesPerPostcodeInBoundaryRequest req, CancellationToken cancellationToken) { try { _logger.LogInformation("C# HTTP trigger function processed a request."); if (req.IsValid(out var validationResults)) { GetNumberOfAddressesPerPostcodeInBoundaryResponse response = await _mediator.Send(req, cancellationToken); return(new OkObjectResult(ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode> .CreateSuccessfulResponse(response))); } else { return(new ObjectResult(ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode> .CreateUnsuccessfulResponse(AddressServiceErrorCode.ValidationError, validationResults)) { StatusCode = 422 });; } } catch (Exception ex) { _logger.LogError($"Unhandled error in {nameof(GetNumberOfAddressesPerPostcodeInBoundary)}", ex); return(new ObjectResult(ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode> .CreateUnsuccessfulResponse(AddressServiceErrorCode.UnhandledError, "Internal Error")) { StatusCode = StatusCodes.Status500InternalServerError }); } }
public async Task HappyPath() { GetNumberOfAddressesPerPostcodeInBoundaryRequest req = new GetNumberOfAddressesPerPostcodeInBoundaryRequest() { SwLatitude = 1, SwLongitude = 2, NeLatitude = 3, NeLongitude = 4 }; GetNumberOfAddressesPerPostcodeInBoundary GetNumberOfAddressesPerPostcodeInBoundary = new GetNumberOfAddressesPerPostcodeInBoundary(_mediator.Object, _logger.Object); IActionResult result = await GetNumberOfAddressesPerPostcodeInBoundary.Run(req, CancellationToken.None); OkObjectResult objectResult = result as OkObjectResult; Assert.IsNotNull(objectResult); Assert.AreEqual(200, objectResult.StatusCode); ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode> deserialisedResponse = objectResult.Value as ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode>; Assert.IsNotNull(deserialisedResponse); Assert.IsTrue(deserialisedResponse.HasContent); Assert.IsTrue(deserialisedResponse.IsSuccessful); Assert.AreEqual(0, deserialisedResponse.Errors.Count()); Assert.AreEqual("NG1 1AA", deserialisedResponse.Content.PostcodesWithNumberOfAddresses.FirstOrDefault().Postcode); _mediator.Verify(x => x.Send(It.IsAny <GetNumberOfAddressesPerPostcodeInBoundaryRequest>(), It.IsAny <CancellationToken>())); }
public async Task ErrorThrown() { _mediator.Setup(x => x.Send(It.IsAny <GetNumberOfAddressesPerPostcodeInBoundaryRequest>(), It.IsAny <CancellationToken>())).Throws <Exception>(); GetNumberOfAddressesPerPostcodeInBoundaryRequest req = new GetNumberOfAddressesPerPostcodeInBoundaryRequest() { SwLatitude = 1, SwLongitude = 2, NeLatitude = 3, NeLongitude = 4 }; GetNumberOfAddressesPerPostcodeInBoundary GetNumberOfAddressesPerPostcodeInBoundary = new GetNumberOfAddressesPerPostcodeInBoundary(_mediator.Object, _logger.Object); IActionResult result = await GetNumberOfAddressesPerPostcodeInBoundary.Run(req, CancellationToken.None); ObjectResult objectResult = result as ObjectResult; Assert.IsNotNull(objectResult); ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode> deserialisedResponse = objectResult.Value as ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode>; Assert.IsNotNull(deserialisedResponse); Assert.AreEqual(500, objectResult.StatusCode);; Assert.IsFalse(deserialisedResponse.HasContent); Assert.IsFalse(deserialisedResponse.IsSuccessful); Assert.AreEqual(1, deserialisedResponse.Errors.Count()); Assert.AreEqual(AddressServiceErrorCode.UnhandledError, deserialisedResponse.Errors[0].ErrorCode); _mediator.Verify(x => x.Send(It.IsAny <GetNumberOfAddressesPerPostcodeInBoundaryRequest>(), It.IsAny <CancellationToken>())); _logger.Verify(x => x.LogError(It.Is <string>(y => y.Contains("Unhandled error in GetNumberOfAddressesPerPostcodeInBoundary")), It.IsAny <Exception>())); }
public async Task ValidationFails() { _mediator.Setup(x => x.Send(It.IsAny <GetNumberOfAddressesPerPostcodeInBoundaryRequest>(), It.IsAny <CancellationToken>())).Throws <Exception>(); GetNumberOfAddressesPerPostcodeInBoundaryRequest req = new GetNumberOfAddressesPerPostcodeInBoundaryRequest() { SwLatitude = 999, // invalid SwLongitude = 2, NeLatitude = 3, NeLongitude = 4 }; GetNumberOfAddressesPerPostcodeInBoundary GetNumberOfAddressesPerPostcodeInBoundary = new GetNumberOfAddressesPerPostcodeInBoundary(_mediator.Object, _logger.Object); IActionResult result = await GetNumberOfAddressesPerPostcodeInBoundary.Run(req, CancellationToken.None); ObjectResult objectResult = result as ObjectResult; Assert.IsNotNull(objectResult); ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode> deserialisedResponse = objectResult.Value as ResponseWrapper <GetNumberOfAddressesPerPostcodeInBoundaryResponse, AddressServiceErrorCode>; Assert.IsNotNull(deserialisedResponse); Assert.AreEqual(422, objectResult.StatusCode);; Assert.IsFalse(deserialisedResponse.HasContent); Assert.IsFalse(deserialisedResponse.IsSuccessful); Assert.AreEqual(1, deserialisedResponse.Errors.Count()); Assert.AreEqual(AddressServiceErrorCode.ValidationError, deserialisedResponse.Errors[0].ErrorCode); _mediator.Verify(x => x.Send(It.IsAny <GetNumberOfAddressesPerPostcodeInBoundaryRequest>(), It.IsAny <CancellationToken>()), Times.Never); }
public async Task GetNumberOfAddressesPerPostcodeInBoundaryResponse() { GetNumberOfAddressesPerPostcodeInBoundaryRequest request = new GetNumberOfAddressesPerPostcodeInBoundaryRequest() { SwLatitude = 1, SwLongitude = 2, NeLatitude = 3, NeLongitude = 4 }; GetNumberOfAddressesPerPostcodeInBoundaryHandler getNumberOfAddressesPerPostcodeInBoundaryHandler = new GetNumberOfAddressesPerPostcodeInBoundaryHandler(_repository.Object, _postcodeAndAddressGetter.Object); GetNumberOfAddressesPerPostcodeInBoundaryResponse result = await getNumberOfAddressesPerPostcodeInBoundaryHandler.Handle(request, CancellationToken.None); Assert.AreEqual(1, result.PostcodesWithNumberOfAddresses.Count); Assert.AreEqual(3, result.PostcodesWithNumberOfAddresses.FirstOrDefault().NumberOfAddresses); Assert.AreEqual("NG1 1AA", result.PostcodesWithNumberOfAddresses.FirstOrDefault().Postcode); _repository.Verify(x => x.GetPostcodesInBoundaryAsync(It.Is <double>(y => y == 1d), It.Is <double>(y => y == 2d), It.Is <double>(y => y == 3d), It.Is <double>(y => y == 4d)), Times.Once); _postcodeAndAddressGetter.Verify(x => x.GetNumberOfAddressesPerPostcodeAsync(It.Is <IEnumerable <string> >(y => y.Count() == 1 && y.Contains("NG1 1AA")), It.IsAny <CancellationToken>())); }