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

                    return(new OkObjectResult(ResponseWrapper <GetNewRequestActionsResponse, GroupServiceErrorCode> .CreateSuccessfulResponse(response)));
                }
                else
                {
                    return(new ObjectResult(ResponseWrapper <GetNewRequestActionsResponse, GroupServiceErrorCode> .CreateUnsuccessfulResponse(GroupServiceErrorCode.ValidationError, validationResults))
                    {
                        StatusCode = 422
                    });
                }
            }
            catch (Exception ex)
            {
                _logger.LogErrorAndNotifyNewRelic($"Unhandled error in GetNewRequestActions", ex);
                return(new ObjectResult(ResponseWrapper <GetNewRequestActionsResponse, GroupServiceErrorCode> .CreateUnsuccessfulResponse(GroupServiceErrorCode.InternalServerError, "Internal Error"))
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }
示例#2
0
        public async Task WhenIPostDiyRequest_IOnlySendConfirmationEMail()
        {
            _validPostcode = true;
            _emailSent     = true;

            Guid guid = Guid.NewGuid();


            var request = new PostNewRequestForHelpRequest
            {
                HelpRequest = new HelpRequest
                {
                    RequestorType = RequestorType.Myself,
                    Requestor     = new RequestPersonalDetails
                    {
                        EmailAddress = "test",
                        Address      = new Address
                        {
                            Postcode = "test",
                        }
                    },
                    VolunteerUserId = 1,
                },
                NewJobsRequest = new NewJobsRequest
                {
                    Jobs = new List <Job>
                    {
                        new Job
                        {
                            Guid            = guid,
                            HealthCritical  = true,
                            DueDays         = 5,
                            SupportActivity = SupportActivities.Shopping
                        }
                    }
                }
            };

            _getNewRequestActionsResponse = new GetNewRequestActionsResponse()
            {
                Actions = new Dictionary <Guid, TaskAction>(), RequestTaskActions = new Dictionary <NewTaskAction, List <int> >()
            };
            _getNewRequestActionsResponse.Actions.Add(guid, new TaskAction()
            {
                TaskActions = new Dictionary <NewTaskAction, List <int> >()
            });
            _getNewRequestActionsResponse.Actions[guid].TaskActions.Add(NewTaskAction.AssignToVolunteer, new List <int>()
            {
                1
            });

            await _classUnderTest.Handle(request, new CancellationToken());

            _communicationService.Verify(x => x.SendEmailToUsersAsync(It.IsAny <SendEmailToUsersRequest>(), It.IsAny <CancellationToken>()), Times.Never);
            _repository.Verify(x => x.UpdateJobStatusInProgressAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once);
            _userService.Verify(x => x.GetHelpersByPostcodeAndTaskType(It.IsAny <string>(), It.IsAny <List <SupportActivities> >(), It.IsAny <CancellationToken>()), Times.Never);
        }
示例#3
0
        public async Task WhenIPostDiyRequest_FullfiableStatusGetSetToDiy()
        {
            requestId      = 1;
            _validPostcode = true;
            _emailSent     = true;
            Guid guid    = Guid.NewGuid();
            var  request = new PostNewRequestForHelpRequest
            {
                HelpRequest = new HelpRequest
                {
                    RequestorType = RequestorType.Myself,
                    Requestor     = new RequestPersonalDetails
                    {
                        Address = new Address
                        {
                            Postcode = "test",
                        }
                    },
                    VolunteerUserId = 1,
                },
                NewJobsRequest = new NewJobsRequest
                {
                    Jobs = new List <Job>
                    {
                        new Job
                        {
                            Guid            = guid,
                            HealthCritical  = true,
                            DueDays         = 5,
                            SupportActivity = SupportActivities.Shopping
                        }
                    }
                }
            };


            _getNewRequestActionsResponse = new GetNewRequestActionsResponse()
            {
                Actions = new Dictionary <Guid, TaskAction>(), RequestTaskActions = new Dictionary <NewTaskAction, List <int> >()
            };
            _getNewRequestActionsResponse.Actions.Add(guid, new TaskAction()
            {
                TaskActions = new Dictionary <NewTaskAction, List <int> >()
            });
            _getNewRequestActionsResponse.Actions[guid].TaskActions.Add(NewTaskAction.AssignToVolunteer, new List <int>()
            {
                1
            });

            var response = await _classUnderTest.Handle(request, new CancellationToken());

            Assert.AreEqual(Fulfillable.Accepted_DiyRequest, response.Fulfillable);
        }
示例#4
0
        private void SetupGroupService()
        {
            _groupService = new Mock <IGroupService>();
            Dictionary <Guid, TaskAction> actions = new Dictionary <Guid, TaskAction>();

            actions.Add(Guid.NewGuid(), new TaskAction()
            {
                TaskActions = new Dictionary <NewTaskAction, List <int> >()
            });

            _getNewRequestActionsResponse = new GetNewRequestActionsResponse()
            {
                Actions = actions
            };


            _groupService.Setup(x => x.GetNewRequestActions(It.IsAny <GetNewRequestActionsRequest>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => _getNewRequestActionsResponse);

            _getGroupMembersResponse = new GetGroupMembersResponse()
            {
                Users = new List <int>()
                {
                    1, 2
                }
            };

            _groupService.Setup(x => x.GetGroupMembers(It.IsAny <int>()))
            .ReturnsAsync(() => _getGroupMembersResponse);

            _formVariantResponse = new GetRequestHelpFormVariantResponse()
            {
                AccessRestrictedByRole           = false,
                RequestorDefinedByGroup          = false,
                RequestHelpFormVariant           = RequestHelpFormVariant.Default,
                TargetGroups                     = TargetGroups.GenericGroup,
                SuppressRecipientPersonalDetails = true
            };

            _groupService.Setup(x => x.GetRequestHelpFormVariant(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => _formVariantResponse);

            _groupService.Setup(x => x.GetGroupMember(It.IsAny <GetGroupMemberRequest>()))
            .ReturnsAsync(() => _getGroupMemberResponse);

            _groupService.Setup(x => x.GetUserRoles(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => _getUserRolesResponse);

            _groupService.Setup(x => x.GetGroup(It.IsAny <int>()))
            .ReturnsAsync(() => _getGroupResponse);
        }
示例#5
0
        public async Task WhenAccessRestrictedByRole_ReturnsCorrectResponse(int createdByUserId, GroupRoles role, Fulfillable fulfillable, int timesGroupMemberCalled)
        {
            requestId      = 1;
            _validPostcode = true;
            _emailSent     = true;
            int referringGroupId = -20;

            Guid guid    = Guid.NewGuid();
            var  request = new PostNewRequestForHelpRequest
            {
                HelpRequest = new HelpRequest
                {
                    RequestorType = RequestorType.Myself,
                    Recipient     = new RequestPersonalDetails
                    {
                        Address = new Address
                        {
                            Postcode = "test",
                        }
                    },
                    VolunteerUserId  = 1,
                    CreatedByUserId  = createdByUserId,
                    ReferringGroupId = referringGroupId
                },
                NewJobsRequest = new NewJobsRequest
                {
                    Jobs = new List <Job>
                    {
                        new Job
                        {
                            Guid            = guid,
                            HealthCritical  = true,
                            DueDays         = 5,
                            SupportActivity = SupportActivities.Shopping
                        }
                    }
                }
            };

            _formVariantResponse = new GetRequestHelpFormVariantResponse()
            {
                AccessRestrictedByRole   = true,
                RequestorDefinedByGroup  = true,
                RequestHelpFormVariant   = RequestHelpFormVariant.Default,
                TargetGroups             = TargetGroups.GenericGroup,
                RequestorPersonalDetails = new RequestPersonalDetails()
                {
                    FirstName    = "First",
                    LastName     = "Last",
                    EmailAddress = "Email",
                    MobileNumber = "Mobile",
                    OtherNumber  = "Other"
                },
                SuppressRecipientPersonalDetails = true
            };

            _getGroupMemberResponse = new GetGroupMemberResponse()
            {
                UserInGroup = new UserInGroup()
                {
                    UserId     = 1,
                    GroupId    = 1,
                    GroupRoles = new List <GroupRoles>()
                    {
                        role
                    }
                }
            };

            _getGroupResponse = new GetGroupResponse()
            {
                Group = new Group()
                {
                    GroupId = referringGroupId
                }
            };

            _getUserRolesResponse = new GetUserRolesResponse()
            {
                UserGroupRoles = new Dictionary <int, List <int> >()
            };

            _getNewRequestActionsResponse = new GetNewRequestActionsResponse()
            {
                Actions = new Dictionary <Guid, TaskAction>(), RequestTaskActions = new Dictionary <NewTaskAction, List <int> >()
            };
            _getNewRequestActionsResponse.Actions.Add(guid, new TaskAction()
            {
                TaskActions = new Dictionary <NewTaskAction, List <int> >()
            });
            _getNewRequestActionsResponse.Actions[guid].TaskActions.Add(NewTaskAction.AssignToVolunteer, new List <int>()
            {
                1
            });

            var response = await _classUnderTest.Handle(request, new CancellationToken());

            _groupService.Verify(x => x.GetRequestHelpFormVariant(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Once);
            _groupService.Verify(x => x.GetGroupMember(It.IsAny <GetGroupMemberRequest>()), Times.Exactly(timesGroupMemberCalled));
            Assert.AreEqual(fulfillable, response.Fulfillable);
        }
示例#6
0
        public async Task WhenRequestorDefinedByGroup_Populate()
        {
            _validPostcode = true;
            _emailSent     = true;
            Guid guid    = Guid.NewGuid();
            var  request = new PostNewRequestForHelpRequest
            {
                HelpRequest = new HelpRequest
                {
                    RequestorType = RequestorType.Myself,
                    Recipient     = new RequestPersonalDetails
                    {
                        Address = new Address
                        {
                            Postcode = "test",
                        }
                    },
                    VolunteerUserId = 1,
                },
                NewJobsRequest = new NewJobsRequest
                {
                    Jobs = new List <Job>
                    {
                        new Job
                        {
                            Guid            = guid,
                            HealthCritical  = true,
                            DueDays         = 5,
                            SupportActivity = SupportActivities.Shopping
                        }
                    }
                }
            };

            _formVariantResponse = new GetRequestHelpFormVariantResponse()
            {
                AccessRestrictedByRole   = false,
                RequestorDefinedByGroup  = true,
                RequestHelpFormVariant   = RequestHelpFormVariant.Default,
                TargetGroups             = TargetGroups.GenericGroup,
                RequestorPersonalDetails = new RequestPersonalDetails()
                {
                    FirstName    = "First",
                    LastName     = "Last",
                    EmailAddress = "Email",
                    MobileNumber = "Mobile",
                    OtherNumber  = "Other"
                },
                SuppressRecipientPersonalDetails = true
            };



            _getNewRequestActionsResponse = new GetNewRequestActionsResponse()
            {
                Actions = new Dictionary <Guid, TaskAction>(), RequestTaskActions = new Dictionary <NewTaskAction, List <int> >()
            };
            _getNewRequestActionsResponse.Actions.Add(guid, new TaskAction()
            {
                TaskActions = new Dictionary <NewTaskAction, List <int> >()
            });
            _getNewRequestActionsResponse.Actions[guid].TaskActions.Add(NewTaskAction.AssignToVolunteer, new List <int>()
            {
                1
            });

            var response = await _classUnderTest.Handle(request, new CancellationToken());

            _groupService.Verify(x => x.GetRequestHelpFormVariant(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Once);
            Assert.AreEqual(_formVariantResponse.RequestorPersonalDetails, request.HelpRequest.Requestor);
            Assert.AreEqual(Fulfillable.Accepted_DiyRequest, response.Fulfillable);
        }
示例#7
0
        public async Task WhenIPostRequest_WithNoChampions_IGetManualReer()
        {
            requestId      = 1;
            _validPostcode = true;
            _championCount = 0;
            _emailSent     = true;

            Guid guid = Guid.NewGuid();

            _getVolunteersByPostcodeAndActivityResponse = new GetVolunteersByPostcodeAndActivityResponse
            {
                Volunteers = new List <VolunteerSummary>
                {
                    new VolunteerSummary
                    {
                        UserID          = 1,
                        DistanceInMiles = 1,
                    }
                }
            };
            var request = new PostNewRequestForHelpRequest
            {
                HelpRequest = new HelpRequest
                {
                    RequestorType = RequestorType.Myself,
                    Requestor     = new RequestPersonalDetails
                    {
                        Address = new Address
                        {
                            Postcode = "test",
                        }
                    }
                },
                NewJobsRequest = new NewJobsRequest
                {
                    Jobs = new List <Job>
                    {
                        new Job
                        {
                            Guid            = guid,
                            HealthCritical  = true,
                            DueDays         = 5,
                            SupportActivity = SupportActivities.Shopping
                        }
                    }
                }
            };

            _getNewRequestActionsResponse = new GetNewRequestActionsResponse()
            {
                Actions = new Dictionary <Guid, TaskAction>(), RequestTaskActions = new Dictionary <NewTaskAction, List <int> >()
            };
            _getNewRequestActionsResponse.Actions.Add(guid, new TaskAction()
            {
                TaskActions = new Dictionary <NewTaskAction, List <int> >()
            });
            _getNewRequestActionsResponse.Actions[guid].TaskActions.Add(NewTaskAction.MakeAvailableToGroups, new List <int>()
            {
                1
            });
            _getNewRequestActionsResponse.Actions[guid].TaskActions.Add(NewTaskAction.NotifyMatchingVolunteers, new List <int>()
            {
                1
            });


            var response = await _classUnderTest.Handle(request, new CancellationToken());

            Assert.AreEqual(Fulfillable.Accepted_ManualReferral, response.Fulfillable);
        }