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 }); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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; }