public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
            GetAllJobsByFilterRequest req,
            CancellationToken cancellationToken)
        {
            try
            {
                _logger.LogInformation("GetAllJobsByFilter started");
                GetAllJobsByFilterResponse response = await _mediator.Send(req, cancellationToken);

                return(new OkObjectResult(ResponseWrapper <GetAllJobsByFilterResponse, RequestServiceErrorCode> .CreateSuccessfulResponse(response)));
            }
            catch (PostCodeException exc)
            {
                _logger.LogErrorAndNotifyNewRelic($"{req.Postcode} is an invalid postcode", exc);
                return(new ObjectResult(ResponseWrapper <GetAllJobsByFilterResponse, RequestServiceErrorCode> .CreateUnsuccessfulResponse(RequestServiceErrorCode.ValidationError, "Invalid Postcode"))
                {
                    StatusCode = StatusCodes.Status400BadRequest
                });
            }
            catch (InvalidFilterException exc)
            {
                _logger.LogErrorAndNotifyNewRelic($"invalid filter", exc);
                return(new ObjectResult(ResponseWrapper <GetAllJobsByFilterResponse, RequestServiceErrorCode> .CreateUnsuccessfulResponse(RequestServiceErrorCode.ValidationError, "Invalid filter combination"))
                {
                    StatusCode = StatusCodes.Status400BadRequest
                });
            }
            catch (Exception exc)
            {
                _logger.LogErrorAndNotifyNewRelic("Exception occured in GetAllJobsByFilter", exc);
                return(new ObjectResult(ResponseWrapper <GetAllJobsByFilterResponse, RequestServiceErrorCode> .CreateUnsuccessfulResponse(RequestServiceErrorCode.InternalServerError, "Internal Error"))
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }
Example #2
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);
        }
Example #3
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);
        }
Example #4
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);
        }
Example #5
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);
        }