Пример #1
0
        public void SetUp()
        {
            _postcodeValidator = new Mock <IPostcodeValidator>();
            _postcodeValidator.Setup(x => x.IsPostcodeValidAsync(It.IsAny <string>())).ReturnsAsync(true);

            _response = new GetPostcodeCoordinatesResponse()
            {
                PostcodeCoordinates = new List <PostcodeCoordinate>()
                {
                    new PostcodeCoordinate()
                    {
                        Postcode  = "NG1 5FS",
                        Latitude  = 52.954885,
                        Longitude = -1.155263
                    }
                }
            };

            _mediator = new Mock <IMediator>();

            _mediator.Setup(x => x.Send(It.IsAny <GetPostcodeCoordinatesRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(_response);

            _loggerWrapper = new Mock <ILoggerWrapper <GetPostcodeCoordinates> >();
            _loggerWrapper.SetupAllProperties();
        }
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage reqAsHttpRequestMessage,
            CancellationToken cancellationToken)
        {
            try
            {
                NewRelic.Api.Agent.NewRelic.SetTransactionName("AddressService", "GetPostcodeCoordinates");
                _logger.LogInformation("C# HTTP trigger function processed a request.");

                // accept compressed requests (can't do this with middleware)
                GetPostcodeCoordinatesRequest req = await HttpRequestMessageCompressionUtils.DeserialiseAsync <GetPostcodeCoordinatesRequest>(reqAsHttpRequestMessage);

                if (req.IsValid(out var validationResults))
                {
                    GetPostcodeCoordinatesResponse response = await _mediator.Send(req, cancellationToken);

                    return(new OkObjectResult(ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> .CreateSuccessfulResponse(response)));
                }
                else
                {
                    return(new ObjectResult(ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> .CreateUnsuccessfulResponse(AddressServiceErrorCode.ValidationError, validationResults))
                    {
                        StatusCode = 422
                    });
                }
            }
            catch (Exception ex)
            {
                _logger.LogErrorAndNotifyNewRelic($"Unhandled error in GetPostcodeCoordinates", ex);
                return(new ObjectResult(ResponseWrapper <GetPostcodeCoordinatesResponse, AddressServiceErrorCode> .CreateUnsuccessfulResponse(AddressServiceErrorCode.UnhandledError, "Internal Error"))
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }
Пример #3
0
        public async Task Success()
        {
            GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest = new GetPostcodeCoordinatesRequest()
            {
                Postcodes = new List <string>()
                {
                    "NG1 1AA"
                },
            };

            Core.Services.AddressService addressService = new Core.Services.AddressService(_httpClientWrapper.Object);

            GetPostcodeCoordinatesResponse result = await addressService.GetPostcodeCoordinatesAsync(getPostcodeCoordinatesRequest, CancellationToken.None);

            Assert.IsTrue(result.PostcodeCoordinates.Any(x => x.Postcode == "NG1 1AA" && x.Latitude == 45 && x.Longitude == 50));

            _httpClientWrapper.Setup(x => x.PostAsync(It.Is <HttpClientConfigName>(y => y == HttpClientConfigName.AddressService), It.Is <string>(y => y == "api/GetPostcodeCoordinates"), It.IsAny <HttpContent>(), It.IsAny <CancellationToken>()));
        }
Пример #4
0
        public async Task GetPostcodeCoordinates()
        {
            GetPostcodeCoordinatesRequest getPostcodeCoordinatesRequest = new GetPostcodeCoordinatesRequest()
            {
                Postcodes = new List <string>()
                {
                    "NG1 5FS", "NG1 5BL"
                }
            };

            GetPostcodeCoordinatesHandler getPostcodeCoordinatesHandler = new GetPostcodeCoordinatesHandler(_postcodeCoordinatesGetter.Object);

            GetPostcodeCoordinatesResponse result = await getPostcodeCoordinatesHandler.Handle(getPostcodeCoordinatesRequest, CancellationToken.None);

            Assert.AreEqual(2, result.PostcodeCoordinates.Count());

            Assert.AreEqual(52.954885, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5FS").Latitude);
            Assert.AreEqual(-1.155263, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5FS").Longitude);

            Assert.AreEqual(52.955494, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5BL").Latitude);
            Assert.AreEqual(-1.154864, result.PostcodeCoordinates.FirstOrDefault(x => x.Postcode == "NG1 5BL").Longitude);
        }
Пример #5
0
        public void SetUp()
        {
            _httpClientWrapper = new Mock <IHttpClientWrapper>();
            _httpClientWrapper.SetupAllProperties();

            _getPostcodeCoordinatesResponse = new GetPostcodeCoordinatesResponse()
            {
                PostcodeCoordinates = new List <PostcodeCoordinate>()
                {
                    new PostcodeCoordinate()
                    {
                        Postcode  = "NG1 1AA",
                        Latitude  = 45,
                        Longitude = 50
                    }
                }
            };

            HttpResponseMessage httpResponseMessage = CreateSuccessfulResponseWrappersHttpResponseMessage(_getPostcodeCoordinatesResponse);

            _httpClientWrapper.Setup(x => x.PostAsync(It.IsAny <HttpClientConfigName>(), It.IsAny <string>(), It.IsAny <HttpContent>(), It.IsAny <CancellationToken>())).ReturnsAsync(httpResponseMessage);
        }
Пример #6
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);
        }
Пример #7
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);
        }