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); }
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 }); } }