public async Task WhenIPostRequest_WithInvalidPostcode_IGetRejected() { _validPostcode = false; 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 { HealthCritical = true, DueDays = 5, SupportActivity = SupportActivities.Shopping } } } }; var response = await _classUnderTest.Handle(request, new CancellationToken()); Assert.AreEqual(Fulfillable.Rejected_InvalidPostcode, response.Fulfillable); }
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); }
public async Task <LogRequestResponse> PostNewRequestForHelpAsync(PostNewRequestForHelpRequest request) { var response = await PostAsync <BaseRequestHelpResponse <LogRequestResponse> >("/api/PostNewRequestForHelp", request); if (response.HasContent && response.IsSuccessful) { return(response.Content); } return(null); }
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); }
public static EmailJobDTO GetEmailJobDTO(PostNewRequestForHelpRequest request, HelpMyStreet.Utils.Models.Job job, string postCode) { return(new EmailJobDTO() { IsHealthCritical = job.HealthCritical, PostCode = postCode, Activity = job.SupportActivity, Requestor = request.HelpRequest.Requestor, DueDate = DateTime.Now.AddDays(job.DueDays).ToString("dd/MM/yyyy"), EncodedJobID = HelpMyStreet.Utils.Utils.Base64Utils.Base64Encode(job.JobID.ToString()) }); }
public async Task WhenIPostRequest_WithMissingSuppressRecipientPersonalDetail_IGetRejected() { _validPostcode = true; _formVariantResponse = new GetRequestHelpFormVariantResponse() { AccessRestrictedByRole = false, RequestorDefinedByGroup = false, RequestHelpFormVariant = RequestHelpFormVariant.Default, TargetGroups = TargetGroups.GenericGroup, SuppressRecipientPersonalDetails = null }; 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 { HealthCritical = true, DueDays = 5, SupportActivity = SupportActivities.Shopping } } } }; var response = await _classUnderTest.Handle(request, new CancellationToken()); Assert.AreEqual(Fulfillable.Rejected_ConfigurationError, response.Fulfillable); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] [RequestBodyType(typeof(PostNewRequestForHelpRequest), "post new request for help request")] PostNewRequestForHelpRequest req, CancellationToken cancellationToken) { try { _logger.LogInformation("PostNewRequestForHelp started"); PostNewRequestForHelpResponse response = await _mediator.Send(req, cancellationToken); return(new OkObjectResult(ResponseWrapper <PostNewRequestForHelpResponse, RequestServiceErrorCode> .CreateSuccessfulResponse(response))); } catch (Exception exc) { _logger.LogErrorAndNotifyNewRelic("Exception occured in PostNewRequestForHelp", exc); return(new ObjectResult(ResponseWrapper <PostNewRequestForHelpResponse, RequestServiceErrorCode> .CreateUnsuccessfulResponse(RequestServiceErrorCode.InternalServerError, "Internal Error")) { StatusCode = StatusCodes.Status500InternalServerError }); } }
public async Task <LogRequestResponse> LogRequestAsync(RequestHelpRequestStageViewModel requestStage, RequestHelpDetailStageViewModel detailStage, int referringGroupID, string source, int userId, CancellationToken cancellationToken) { _logger.LogInformation($"Logging Request"); var selectedTask = requestStage.Tasks.Where(x => x.IsSelected).First(); var selectedTime = requestStage.Timeframes.Where(x => x.IsSelected).FirstOrDefault(); bool heathCritical = false; var healthCriticalQuestion = requestStage.Questions.Questions.Where(a => a.ID == (int)Questions.IsHealthCritical).FirstOrDefault(); if (healthCriticalQuestion != null && healthCriticalQuestion.Model == "true") { heathCritical = true; } RequestPersonalDetails recipient = null; RequestPersonalDetails requestor = null; IEnumerable <RequestHelpQuestion> questions = requestStage.Questions.Questions; if (detailStage != null) { recipient = _requestHelpBuilder.MapRecipient(detailStage); if (detailStage.ShowRequestorFields) { requestor = detailStage.Type == RequestorType.Myself ? recipient : _requestHelpBuilder.MapRequestor(detailStage); } questions = questions.Union(detailStage.Questions.Questions); } var request = new PostNewRequestForHelpRequest { HelpRequest = new HelpRequest { Guid = requestStage.RequestGuid, AcceptedTerms = requestStage.AgreeToPrivacyAndTerms, ConsentForContact = requestStage.AgreeToPrivacyAndTerms, OrganisationName = detailStage?.Organisation ?? "", RequestorType = detailStage?.Type ?? RequestorType.Organisation, ReadPrivacyNotice = requestStage.AgreeToPrivacyAndTerms, CreatedByUserId = userId, Recipient = recipient, Requestor = requestor, ReferringGroupId = referringGroupID, Source = source }, NewJobsRequest = new NewJobsRequest { Jobs = new List <Job> { new Job { DueDateType = selectedTime.DueDateType, DueDays = selectedTime.DueDateType == DueDateType.On ? Convert.ToInt32((selectedTime.Date.Date - DateTime.Now.Date).TotalDays) : selectedTime.Days, StartDate = selectedTime.DueDateType.HasStartTime() ? selectedTime.StartTime.ToUTCFromUKTime() : (DateTime?)null, EndDate = selectedTime.DueDateType.HasEndTime() ? selectedTime.EndTime.ToUTCFromUKTime() : (DateTime?)null, HealthCritical = heathCritical, SupportActivity = selectedTask.SupportActivity, Questions = questions.Where(x => x.InputType != QuestionType.LabelOnly).Select(x => new Question { Id = x.ID, Answer = GetAnswerToQuestion(x), Name = x.Label, Required = x.Required, AddtitonalData = x.AdditionalData, Type = x.InputType }).ToList() } } } }; var response = await _requestHelpRepository.PostNewRequestForHelpAsync(request); if (response != null && userId != 0) { TriggerCacheRefresh(userId, cancellationToken); } return(response); }
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); }
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); }
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); }