コード例 #1
0
        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);
        }