public async Task MinDistanceIs0SoDontUseCache()
        {
            GetVolunteerCoordinatesRequest request = new GetVolunteerCoordinatesRequest()
            {
                MinDistanceBetweenInMetres = 0,
                VolunteerType  = 3,
                IsVerifiedType = 3,
                SWLatitude     = 1,
                SWLongitude    = 2,
                NELatitude     = 3,
                NELongitude    = 4
            };


            string key = $"{nameof(CachedVolunteerDto)}_MinDistance_{request.MinDistanceBetweenInMetres}_{request.VolunteerType}_{request.IsVerifiedType}_WithCreationDate";

            GetVolunteerCoordinatesHandler getVolunteerCoordinatesHandler = new GetVolunteerCoordinatesHandler(_memDistCache.Object, _volunteerCache.Object, _volunteersFilteredByMinDistanceGetter.Object);

            GetVolunteerCoordinatesResponse result = await getVolunteerCoordinatesHandler.Handle(request, CancellationToken.None);

            Assert.AreEqual(2, result.Coordinates.Count);
            Assert.AreEqual(1, result.Coordinates.FirstOrDefault(x => x.Postcode == "NG1 1AA").Latitude);
            Assert.AreEqual(2, result.Coordinates.FirstOrDefault(x => x.Postcode == "NG1 1AA").Longitude);
            Assert.AreEqual(2, result.Coordinates.FirstOrDefault(x => x.Postcode == "NG1 1AA").NumberOfHelpers);
            Assert.AreEqual(1, result.Coordinates.FirstOrDefault(x => x.Postcode == "NG1 1AA").NumberOfStreetChampions);

            Assert.AreEqual(2, result.NumberOfHelpers);
            Assert.AreEqual(3, result.NumberOfStreetChampions);
            Assert.AreEqual(5, result.TotalNumberOfVolunteers);

            _volunteerCache.Verify(x => x.GetCachedVolunteersAsync(It.IsAny <VolunteerType>(), It.IsAny <CancellationToken>()), Times.Once);


            _memDistCache.Verify(x => x.GetCachedData(It.IsAny <Func <CancellationToken, IEnumerable <CachedVolunteerDto> > >(), It.Is <string>(y => y == key), It.Is <RefreshBehaviour>(y => y == RefreshBehaviour.DontWaitForFreshData), It.IsAny <CancellationToken>(), It.IsAny <NotInCacheBehaviour>()), Times.Never);

            _volunteersFilteredByMinDistanceGetter.Verify(x => x.GetVolunteersFilteredByMinDistanceAsync(It.IsAny <GetVolunteerCoordinatesRequest>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Example #2
0
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
            [RequestBodyType(typeof(GetVolunteerCoordinatesRequest), "Get Volunteer Coordinates")] GetVolunteerCoordinatesRequest req,
            ILogger log)
        {
            try
            {
                NewRelic.Api.Agent.NewRelic.SetTransactionName("UserService", "GetVolunteerCoordinates");
                log.LogInformation("C# HTTP trigger function processed a request.");

                GetVolunteerCoordinatesResponse response = await _mediator.Send(req);

                return(new OkObjectResult(ResponseWrapper <GetVolunteerCoordinatesResponse, UserServiceErrorCode> .CreateSuccessfulResponse(response)));
            }
            catch (Exception exc)
            {
                LogError.Log(log, exc, req);

                return(new ObjectResult(ResponseWrapper <GetVolunteerCoordinatesResponse, UserServiceErrorCode> .CreateUnsuccessfulResponse(UserServiceErrorCode.UnhandledError, "Internal Error"))
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }