public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
            [RequestBodyType(typeof(GetUserGroupsRequest), "get user groups")] GetUserGroupsRequest req,
            CancellationToken cancellationToken)
        {
            try
            {
                if (req.IsValid(out var validationResults))
                {
                    GetUserGroupsResponse response = await _mediator.Send(req, cancellationToken);

                    return(new OkObjectResult(ResponseWrapper <GetUserGroupsResponse, GroupServiceErrorCode> .CreateSuccessfulResponse(response)));
                }
                else
                {
                    return(new ObjectResult(ResponseWrapper <GetUserGroupsResponse, GroupServiceErrorCode> .CreateUnsuccessfulResponse(GroupServiceErrorCode.ValidationError, validationResults))
                    {
                        StatusCode = 422
                    });
                }
            }
            catch (Exception ex)
            {
                _logger.LogErrorAndNotifyNewRelic($"Unhandled error in GetUserGroups", ex);
                return(new ObjectResult(ResponseWrapper <GetUserGroupsResponse, GroupServiceErrorCode> .CreateUnsuccessfulResponse(GroupServiceErrorCode.InternalServerError, "Internal Error"))
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }
示例#2
0
        public async Task WhenVolunteerAndRequestedByIsTheSame_ReturnsTrue()
        {
            _request = new PutUpdateShiftStatusToAcceptedRequest
            {
                CreatedByUserID = 1,
                RequestID       = 1,
                SupportActivity = new SingleSupportActivityRequest()
                {
                    SupportActivity = SupportActivities.VolunteerSupport
                },
                VolunteerUserID = 1
            };
            _jobId    = 0;
            _newJobId = 1;
            _getUserGroupsResponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    -1
                }
            };
            _groups = new List <int>()
            {
                -1
            };

            var response = await _classUnderTest.Handle(_request, CancellationToken.None);

            _repository.Verify(x => x.VolunteerAlreadyAcceptedShift(It.IsAny <int>(), It.IsAny <SupportActivities>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _jobService.Verify(x => x.HasPermissionToChangeRequestAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Never);
            _repository.Verify(x => x.UpdateRequestStatusToAccepted(It.IsAny <int>(), It.IsAny <SupportActivities>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _repository.Verify(x => x.GetGroupsForRequestAsync(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _groupService.Verify(x => x.GetUserGroups(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            Assert.AreEqual(UpdateJobStatusOutcome.Success, response.Outcome);
        }
示例#3
0
        public async Task PrepareTemplateData_ReturnsNullWhenNoUserGroupsData2()
        {
            int?   recipientUserId = 1;
            int?   jobId           = null;
            int?   groupId         = null;
            int?   requestId       = null;
            string templateName    = string.Empty;

            _getUserGroupsResponse = null;

            var result = await _classUnderTest.PrepareTemplateData(Guid.NewGuid(), recipientUserId, jobId, groupId, requestId, null, templateName);

            Assert.AreEqual(null, result);
        }
示例#4
0
        public async Task WhenVolunteerAlreadyAssignedForRequestAndSupportActivity_ReturnsNoLongerAvailable()
        {
            _hasPermission = true;
            int requestID = 1;
            SupportActivities activity = SupportActivities.VolunteerSupport;
            int volunteerUserID        = 1;

            _request = new PutUpdateShiftStatusToAcceptedRequest
            {
                CreatedByUserID = 2,
                RequestID       = requestID,
                SupportActivity = new SingleSupportActivityRequest()
                {
                    SupportActivity = activity
                },
                VolunteerUserID = volunteerUserID
            };
            _jobId = 0;
            _getUserGroupsResponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    -1
                }
            };
            _groups = new List <int>()
            {
                -1
            };

            _repository.Setup(x => x.UpdateRequestStatusToAccepted(It.IsAny <int>(), It.IsAny <SupportActivities>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Throws(new UnableToUpdateShiftException($"Unable to UpdateShiftStatus for RequestID:{requestID} SupportActivity:{activity} Volunteer:{volunteerUserID}"));

            var response = await _classUnderTest.Handle(_request, CancellationToken.None);

            _repository.Verify(x => x.VolunteerAlreadyAcceptedShift(It.IsAny <int>(), It.IsAny <SupportActivities>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _jobService.Verify(x => x.HasPermissionToChangeRequestAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _repository.Verify(x => x.UpdateRequestStatusToAccepted(It.IsAny <int>(), It.IsAny <SupportActivities>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _repository.Verify(x => x.GetGroupsForRequestAsync(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _groupService.Verify(x => x.GetUserGroups(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            Assert.AreEqual(UpdateJobStatusOutcome.NoLongerAvailable, response.Outcome);
        }
示例#5
0
        public async Task WhenjobGroupDoesNotContainsVolunteerGroups_ReturnsBadRequest()
        {
            _updateJobStatusOutcome = UpdateJobStatusOutcome.BadRequest;
            _request = new PutUpdateJobStatusToInProgressRequest
            {
                CreatedByUserID = 1,
                JobID           = 1,
                VolunteerUserID = 1
            };

            _getUserGroupsReponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    1
                }
            };

            _getGroupsForJobResponse = new List <int>()
            {
                2
            };

            _referringGroupId = 1;

            var response = await _classUnderTest.Handle(_request, CancellationToken.None);

            _repository.Verify(x => x.JobIsInProgressWithSameVolunteerUserId(It.IsAny <int>(), It.IsAny <int?>()), Times.Once);
            _groupService.Verify(x => x.GetUserGroups(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _repository.Verify(x => x.GetGroupsForJobAsync(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _repository.Verify(x => x.GetReferringGroupIDForJobAsync(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _groupService.Verify(x => x.GetGroupMember(It.IsAny <GetGroupMemberRequest>()), Times.Never);
            _groupService.Verify(x => x.GetGroupActivityCredentials(It.IsAny <GetGroupActivityCredentialsRequest>()), Times.Never);
            _repository.Verify(x => x.UpdateJobStatusInProgressAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Never);
            _communicationService.Verify(x => x.RequestCommunication(It.IsAny <RequestCommunicationRequest>(), It.IsAny <CancellationToken>()), Times.Never);
            Assert.AreEqual(UpdateJobStatusOutcome.BadRequest, response.Outcome);
        }
示例#6
0
        public async Task PrepareTemplateData_ReturnsNullAsNoJobsReturned()
        {
            int?   recipientUserId = 1;
            int?   jobId           = null;
            int?   groupId         = null;
            int?   requestId       = null;
            string templateName    = string.Empty;

            _getUserGroupsResponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    1
                }
            };

            _user = new User()
            {
                ID = 1,
                SupportActivities = new List <SupportActivities>()
                {
                    SupportActivities.Shopping
                },
                PostalCode = "NG1 6DQ"
            };

            _getAllJobsByFilterResponse = new GetAllJobsByFilterResponse()
            {
                JobSummaries = new List <JobSummary>(),
                ShiftJobs    = new List <ShiftJob>()
            };

            var result = await _classUnderTest.PrepareTemplateData(Guid.NewGuid(), recipientUserId, jobId, groupId, requestId, null, templateName);

            Assert.AreEqual(null, result);
        }
示例#7
0
        public async Task PrepareTemplateData_Returns()
        {
            int?   recipientUserId = 1;
            int?   jobId           = null;
            int?   groupId         = null;
            int?   requestId       = null;
            string templateName    = string.Empty;

            _getUserGroupsResponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    1
                }
            };

            _user = new User()
            {
                ID = 1,
                SupportActivities = new List <SupportActivities>()
                {
                    SupportActivities.Shopping
                },
                PostalCode          = "NG1 6DQ",
                SupportRadiusMiles  = 20,
                UserPersonalDetails = new UserPersonalDetails()
                {
                    FirstName    = "FIRST NAME",
                    EmailAddress = "EMAIL ADDRESS",
                    DisplayName  = "DISPLAY NAME"
                }
            };

            List <JobSummary> jobSummaries = new List <JobSummary>();

            jobSummaries.Add(new JobSummary()
            {
                RequestID       = 1,
                DistanceInMiles = 1,
                SupportActivity = SupportActivities.Shopping,
                RequestType     = RequestType.Task
            });

            jobSummaries.Add(new JobSummary()
            {
                RequestID       = 2,
                DistanceInMiles = 2,
                SupportActivity = SupportActivities.Shopping,
                RequestType     = RequestType.Task
            });

            jobSummaries.Add(new JobSummary()
            {
                RequestID       = 3,
                DistanceInMiles = 2,
                SupportActivity = SupportActivities.CheckingIn,
                RequestType     = RequestType.Task
            });

            _getPostcodeCoordinatesResponse = new GetPostcodeCoordinatesResponse()
            {
                PostcodeCoordinates = new List <PostcodeCoordinate>()
                {
                    new PostcodeCoordinate()
                    {
                        Postcode = "DE23 6NY", Latitude = 1d, Longitude = 1d
                    }
                }
            };

            _getAllJobsByFilterResponse = new GetAllJobsByFilterResponse()
            {
                JobSummaries = jobSummaries,
                ShiftJobs    = new List <ShiftJob>()
            };

            //_filteredJobs = jobSummaries;

            var criteriaJobs   = jobSummaries.Where(x => _user.SupportActivities.Contains(x.SupportActivity) && x.DistanceInMiles < _user.SupportRadiusMiles);
            var otherJobs      = jobSummaries.Where(x => !criteriaJobs.Contains(x));
            var otherJobsStats = otherJobs.GroupBy(x => x.SupportActivity, x => x.DueDate, (activity, dueDate) => new { Key = activity, Count = dueDate.Count(), Min = dueDate.Min() });

            otherJobsStats = otherJobsStats.OrderByDescending(x => x.Count);

            var result = await _classUnderTest.PrepareTemplateData(Guid.NewGuid(), recipientUserId, jobId, groupId, requestId, null, templateName);

            DailyDigestData ddd = (DailyDigestData)result.BaseDynamicData;


            Assert.AreEqual(criteriaJobs.Count(), ddd.ChosenRequestTasks);
            Assert.AreEqual(otherJobs.Count() > 0, ddd.OtherRequestTasks);
        }
示例#8
0
        public async Task PrepareTemplateData_ReturnsEmailBuildDataAsThereAreNoChosenJobs()
        {
            int?   recipientUserId = 1;
            int?   jobId           = null;
            int?   groupId         = null;
            int?   requestId       = null;
            string templateName    = string.Empty;

            _getUserGroupsResponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    1
                }
            };

            _user = new User()
            {
                ID = 1,
                SupportActivities = new List <SupportActivities>()
                {
                    SupportActivities.Shopping
                },
                PostalCode          = "NG1 6DQ",
                SupportRadiusMiles  = 2,
                UserPersonalDetails = new UserPersonalDetails()
                {
                    FirstName    = "FIRST NAME",
                    EmailAddress = "EMAIL ADDRESS",
                    DisplayName  = "DISPLAY NAME"
                }
            };

            List <JobSummary> jobSummaries = new List <JobSummary>();

            jobSummaries.Add(new JobSummary()
            {
                DistanceInMiles = 2,
                SupportActivity = SupportActivities.CheckingIn,
                RequestType     = RequestType.Task
            });

            _getAllJobsByFilterResponse = new GetAllJobsByFilterResponse()
            {
                JobSummaries = jobSummaries,
                ShiftJobs    = new List <ShiftJob>()
                {
                    new ShiftJob()
                    {
                        SupportActivity = SupportActivities.VaccineSupport,
                        StartDate       = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc),
                        ShiftLength     = 240,
                        DistanceInMiles = 2
                    }
                }
            };

            _getPostcodeCoordinatesResponse = new GetPostcodeCoordinatesResponse()
            {
                PostcodeCoordinates = new List <PostcodeCoordinate>()
                {
                    new PostcodeCoordinate()
                    {
                        Postcode = "DE23 6NY", Latitude = 1d, Longitude = 1d
                    }
                }
            };
            var chosenJobCount = jobSummaries.Count(x => _user.SupportActivities.Contains(x.SupportActivity) && x.DistanceInMiles < _user.SupportRadiusMiles);
            var result         = await _classUnderTest.PrepareTemplateData(Guid.NewGuid(), recipientUserId, jobId, groupId, requestId, null, templateName);

            Assert.AreEqual(null, result);
        }
示例#9
0
        public async Task PrepareTemplateData_ReturnsEmailBuildDataAsThereAreChosenJobs()
        {
            int?   recipientUserId = 1;
            int?   jobId           = null;
            int?   groupId         = null;
            int?   requestId       = null;
            string templateName    = string.Empty;

            _getUserGroupsResponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    1
                }
            };

            _user = new User()
            {
                ID = 1,
                SupportActivities = new List <SupportActivities>()
                {
                    SupportActivities.Shopping
                },
                PostalCode          = "NG1 6DQ",
                SupportRadiusMiles  = 20,
                UserPersonalDetails = new UserPersonalDetails()
                {
                    FirstName    = "FIRST NAME",
                    EmailAddress = "EMAIL ADDRESS",
                    DisplayName  = "DISPLAY NAME"
                }
            };

            List <JobSummary> jobSummaries = new List <JobSummary>();

            jobSummaries.Add(new JobSummary()
            {
                RequestID       = 1,
                DistanceInMiles = 1,
                SupportActivity = SupportActivities.Shopping
            });

            jobSummaries.Add(new JobSummary()
            {
                RequestID       = 2,
                DistanceInMiles = 2,
                SupportActivity = SupportActivities.Shopping
            });

            jobSummaries.Add(new JobSummary()
            {
                RequestID       = 3,
                DistanceInMiles = 2,
                SupportActivity = SupportActivities.CheckingIn
            });

            _getAllJobsByFilterResponse = new GetAllJobsByFilterResponse()
            {
                JobSummaries = jobSummaries,
                ShiftJobs    = new List <ShiftJob>()
            };

            var chosenJobCount = jobSummaries.Count(x => _user.SupportActivities.Contains(x.SupportActivity) && x.DistanceInMiles < _user.SupportRadiusMiles);
            var result         = await _classUnderTest.PrepareTemplateData(Guid.NewGuid(), recipientUserId, jobId, groupId, requestId, null, templateName);

            DailyDigestData ddd = (DailyDigestData)result.BaseDynamicData;


            Assert.AreEqual(chosenJobCount, ddd.ChosenRequestTasks);
        }
示例#10
0
        public async Task WhenCreatedByUserIsSameAsVolunteerUserID_ReturnsSuccess(GroupRoles role)
        {
            _updateJobStatusOutcome = UpdateJobStatusOutcome.Success;
            _request = new PutUpdateJobStatusToInProgressRequest
            {
                CreatedByUserID = 1,
                JobID           = 1,
                VolunteerUserID = 1
            };
            _getUserGroupsReponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    1
                }
            };

            _getGroupsForJobResponse = new List <int>()
            {
                1
            };

            _referringGroupId = 1;

            Dictionary <int, List <int> > roles = new Dictionary <int, List <int> >();

            roles.Add(1, new List <int>()
            {
                (int)role
            });

            _getJobDetailsResponse = new GetJobDetailsResponse()
            {
                JobSummary = new JobSummary()
                {
                    JobID           = 1,
                    SupportActivity = SupportActivities.Shopping
                }
            };

            _getGroupMemberResponse = new GetGroupMemberResponse()
            {
                UserInGroup = new UserInGroup()
                {
                    GroupId    = 1,
                    UserId     = 1,
                    GroupRoles = new List <GroupRoles>()
                    {
                        GroupRoles.Member
                    },
                    ValidCredentials = new List <int>()
                    {
                        -1
                    }
                }
            };

            _getGroupActivityCredentialsResponse = new GetGroupActivityCredentialsResponse()
            {
                CredentialSets = new List <List <int> > {
                    new List <int>()
                    {
                        -1
                    }
                }
            };

            _hasPermission = true;

            var response = await _classUnderTest.Handle(_request, CancellationToken.None);

            _repository.Verify(x => x.JobIsInProgressWithSameVolunteerUserId(It.IsAny <int>(), It.IsAny <int?>()), Times.Once);
            _groupService.Verify(x => x.GetUserGroups(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _groupService.Verify(x => x.GetGroupMember(It.IsAny <GetGroupMemberRequest>()), Times.Once);
            _groupService.Verify(x => x.GetGroupActivityCredentials(It.IsAny <GetGroupActivityCredentialsRequest>()), Times.Once);
            _repository.Verify(x => x.GetGroupsForJobAsync(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _repository.Verify(x => x.GetReferringGroupIDForJobAsync(It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _groupService.Verify(x => x.GetGroupMember(It.IsAny <GetGroupMemberRequest>()), Times.Once);
            _groupService.Verify(x => x.GetGroupActivityCredentials(It.IsAny <GetGroupActivityCredentialsRequest>()), Times.Once);
            _repository.Verify(x => x.UpdateJobStatusInProgressAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _communicationService.Verify(x => x.RequestCommunication(It.IsAny <RequestCommunicationRequest>(), It.IsAny <CancellationToken>()), Times.Once);
            Assert.AreEqual(UpdateJobStatusOutcome.Success, response.Outcome);
        }
示例#11
0
        public async Task CheckTemplateData()
        {
            int?recipientUserId = 1;
            int?jobId           = null;
            int?groupId         = null;
            int?requestId       = null;
            Dictionary <string, string> additionalParameters = new Dictionary <string, string>();

            additionalParameters.Add("locations", "-9,-8");
            string templateName = string.Empty;

            _getUserGroupsResponse = new GetUserGroupsResponse()
            {
                Groups = new List <int>()
                {
                    -1, -2, -3
                }
            };

            _user = new User()
            {
                ID = 1,
                UserPersonalDetails = new UserPersonalDetails()
                {
                    FirstName    = "John",
                    LastName     = "Test",
                    EmailAddress = "*****@*****.**"
                },
                PostalCode = "NG1 6DQ"
            };

            _shiftJobs = new List <ShiftJob>()
            {
                new ShiftJob()
                {
                    JobID           = 1,
                    RequestID       = 1,
                    SupportActivity = SupportActivities.VaccineSupport
                },
                new ShiftJob()
                {
                    JobID           = 2,
                    RequestID       = 1,
                    SupportActivity = SupportActivities.VaccineSupport
                }
            };

            Core.Domains.EmailBuildData result = await _classUnderTest.PrepareTemplateData(
                Guid.NewGuid(),
                recipientUserId,
                jobId,
                groupId,
                requestId,
                additionalParameters,
                templateName);

            var dedupedShifts = _openShiftJobs.Distinct(_shiftJobDedupe_EqualityComparer);
            var notMyShifts   = dedupedShifts.Where(s => !_shiftJobs.Contains(s, _shiftJobDedupe_EqualityComparer)).ToList();


            int i = 1;
        }