public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] [RequestBodyType(typeof(GetGroupNewRequestNotificationStrategyRequest), "get group")] GetGroupNewRequestNotificationStrategyRequest req, CancellationToken cancellationToken) { try { if (req.IsValid(out var validationResults)) { GetGroupNewRequestNotificationStrategyResponse response = await _mediator.Send(req, cancellationToken); return(new OkObjectResult(ResponseWrapper <GetGroupNewRequestNotificationStrategyResponse, GroupServiceErrorCode> .CreateSuccessfulResponse(response))); } else { return(new ObjectResult(ResponseWrapper <GetGroupNewRequestNotificationStrategyResponse, GroupServiceErrorCode> .CreateUnsuccessfulResponse(GroupServiceErrorCode.ValidationError, validationResults)) { StatusCode = 422 }); } } catch (Exception ex) { _logger.LogErrorAndNotifyNewRelic($"Unhandled error in GetGroupNewRequestNotificationStrategy", ex); return(new ObjectResult(ResponseWrapper <GetGroupNewRequestNotificationStrategyResponse, GroupServiceErrorCode> .CreateUnsuccessfulResponse(GroupServiceErrorCode.InternalServerError, "Internal Error")) { StatusCode = StatusCodes.Status500InternalServerError }); } }
public async Task IdentifyRecipientsReturnsCorrectUsers() { int?recipientUserId = null; int?jobId = null; int?groupId = GROUPID; int?requestId = 1; int maxVolunteer = 10; _getGroupNewRequestNotificationStrategyResponse = new GetGroupNewRequestNotificationStrategyResponse() { MaxVolunteer = maxVolunteer, NewRequestNotificationStrategy = NewRequestNotificationStrategy.ClosestNEligibleVolunteers }; List <VolunteerSummary> volunteerSummaries = new List <VolunteerSummary>(); Random random = new Random(); for (int i = 1; i < 50; i++) { volunteerSummaries.Add(new VolunteerSummary() { DistanceInMiles = random.NextDouble(), UserID = i }); } _getVolunteersByPostcodeAndActivityResponse = new GetVolunteersByPostcodeAndActivityResponse() { Volunteers = volunteerSummaries }; List <Core.Domains.SendMessageRequest> result = await _classUnderTest.IdentifyRecipients(recipientUserId, jobId, groupId, requestId, null); Assert.AreEqual(maxVolunteer, result.Count(x => x.TemplateName == TemplateName.TaskNotification)); Assert.AreEqual(0, result.Count(x => x.TemplateName == TemplateName.RequestorTaskNotification)); var expected = volunteerSummaries.Where(x => _getGroupMembersResponse.Users.Any(u => u == x.UserID)).OrderBy(x => x.DistanceInMiles).Take(10).Select(x => x.UserID).ToList(); var actual = result.Where(x => x.TemplateName == TemplateName.TaskNotification).Select(x => x.RecipientUserID).ToList(); Assert.AreEqual(expected, actual); }
public void MissingStrategy_ThrowsException() { int?jobId = null; int?groupId = GROUPID; int?recipientUserId = null; int?requestId = 1; _getRequestDetailsResponse = new GetRequestDetailsResponse() { RequestSummary = new RequestSummary() { ReferringGroupID = GROUPID } }; _getGroupNewRequestNotificationStrategyResponse = null; Exception ex = Assert.ThrowsAsync <Exception>(() => _classUnderTest.IdentifyRecipients ( recipientUserId, jobId, groupId, requestId, null )); Assert.AreEqual($"No strategy for {GROUPID}", ex.Message); }