Exemplo n.º 1
0
        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
                });
            }
        }
Exemplo n.º 2
0
        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>()));
        }
Exemplo n.º 3
0
        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>()));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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>()));
        }