예제 #1
0
        private Task <SearchApprenticeshipVacanciesResponse> InternalSearchApprenticeshipVacanciesAsync(
            VacancySearchParameters parameters)
        {
            _logger.Info($"Searching apprenticeships with following parameters: {parameters}");

            var searchClientParameters = GetSearchClientParameters(parameters);

            ApprenticeshipSearchResponse searchClientResponse;

            try
            {
                searchClientResponse = _apprenticeshipSearchClient.Search(searchClientParameters);
            }
            catch (Exception e)
            {
                throw new InfrastructureException(e);
            }

            var searchResponse = new SearchApprenticeshipVacanciesResponse()
            {
                TotalMatched            = searchClientResponse.Total,
                TotalReturned           = searchClientResponse.Results.Count(),
                TotalPages              = searchClientResponse.TotalPages,
                CurrentPage             = parameters.PageNumber,
                SortBy                  = parameters.SortBy,
                ApprenticeshipSummaries = searchClientResponse.Results.Select(GetApprenticeshipSummary)
            };

            return(Task.FromResult(searchResponse));
        }
예제 #2
0
        public async Task Setup()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var pageSize = fixture.Create <int>();

            _expectedTotal           = fixture.Create <int>();
            _expectedCurrentPage     = fixture.Create <int>();
            _expectedSortBy          = SortBy.Distance;
            _vacancySearchParameters = new VacancySearchParameters
            {
                PageSize        = pageSize,
                PageNumber      = _expectedCurrentPage,
                SortBy          = _expectedSortBy,
                Latitude        = 32,
                Longitude       = 2,
                DistanceInMiles = 342
            };
            _expectedTotalPages = Math.Ceiling((double)_expectedTotal / pageSize);

            _apprenticeshipResults = fixture.Create <List <ApprenticeshipSearchResult> >();

            _mockSearchClient = fixture.Freeze <Mock <IApprenticeshipSearchClient> >();

            _mockSearchClient.Setup(c => c.Search(It.IsAny <ApprenticeshipSearchRequestParameters>()))
            .Returns((ApprenticeshipSearchRequestParameters r) => new ApprenticeshipSearchResponse(
                         _expectedTotal,
                         _apprenticeshipResults,
                         Enumerable.Empty <AggregationResult>(),
                         r));

            _apprenticeshipSearchService = fixture.Create <ApprenticeshipSearchService>();

            _actualResponse = await _apprenticeshipSearchService.SearchApprenticeshipVacanciesAsync(_vacancySearchParameters);
        }
예제 #3
0
        public async Task Setup()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            _expectedResponse   = new SearchApprenticeshipVacanciesResponse();
            _validRequest       = new SearchApprenticeshipVacanciesRequest();
            _expectedParameters = new VacancySearchParameters();

            _validatorMock = fixture.Freeze <Mock <IValidator <SearchApprenticeshipVacanciesRequest> > >();
            _validatorMock
            .Setup(validator => validator.ValidateAsync(_validRequest, It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValidationResult());

            _mockMapper = fixture.Freeze <Mock <IVacancySearchParametersMapper> >();
            _mockMapper
            .Setup(mapper => mapper.Convert(It.IsAny <SearchApprenticeshipVacanciesRequest>()))
            .Returns(_expectedParameters);

            _mockSearchService = fixture.Freeze <Mock <IApprenticeshipSearchService> >();
            _mockSearchService
            .Setup(service => service.SearchApprenticeshipVacanciesAsync(It.IsAny <VacancySearchParameters>()))
            .ReturnsAsync(_expectedResponse);

            _handler = fixture.Create <SearchApprenticeshipVacanciesQueryHandler>();

            _response = await _handler.Handle(_validRequest);
        }
예제 #4
0
        public void AndALocationFieldIsNull_ThenReturnsFalse()
        {
            var parameters = new VacancySearchParameters
            {
                Longitude       = 23.423,
                DistanceInMiles = 43
            };

            parameters.HasGeoSearchFields.Should().BeFalse();
        }
예제 #5
0
        public Task <SearchApprenticeshipVacanciesResponse> SearchApprenticeshipVacanciesAsync(
            VacancySearchParameters parameters)
        {
            var retry = PollyRetryPolicies.GetFixedIntervalPolicy((exception, time, retryCount, context) =>
            {
                _logger.Warn($"Error searching for apprenticeships in search index: ({exception.Message}). Retrying... attempt {retryCount}");
            });

            return(retry.ExecuteAsync(() => InternalSearchApprenticeshipVacanciesAsync(parameters)));
        }
예제 #6
0
        public void AndAllLocationFieldsNotNull_ThenReturnsTrue()
        {
            var parameters = new VacancySearchParameters
            {
                Latitude        = -34,
                Longitude       = 23.423,
                DistanceInMiles = 43
            };

            parameters.HasGeoSearchFields.Should().BeTrue();
        }
예제 #7
0
        public void AndProviderUkprnIsNotNull_ThenProviderUkprnWritten()
        {
            var ukprn      = 88888888;
            var parameters = new VacancySearchParameters {
                Ukprn = ukprn
            };

            var formattedParams = parameters.ToString();

            formattedParams.Should().Contain($"{nameof(parameters.Ukprn)}: {ukprn}{Environment.NewLine}");
        }
예제 #8
0
        public void AndDistanceInMilesIsNotNull_ThenDistanceInMilesWritten()
        {
            var distanceInMiles = 234;
            var parameters      = new VacancySearchParameters {
                DistanceInMiles = distanceInMiles
            };

            var formattedParams = parameters.ToString();

            formattedParams.Should().Contain($"{nameof(parameters.DistanceInMiles)}: {distanceInMiles}{Environment.NewLine}");
        }
예제 #9
0
        public void AndDistanceInMilesIsNull_ThenDistanceInMilesNotWritten()
        {
            var distanceInMiles = (int?)null;
            var parameters      = new VacancySearchParameters {
                DistanceInMiles = distanceInMiles
            };

            var formattedParams = parameters.ToString();

            formattedParams.Should().NotContain($"{nameof(parameters.DistanceInMiles)}: {distanceInMiles}");
        }
예제 #10
0
        public void AndLongitudeIsNotNull_ThenLongitudeWritten()
        {
            var longitude  = 23.234;
            var parameters = new VacancySearchParameters {
                Longitude = longitude
            };

            var formattedParams = parameters.ToString();

            formattedParams.Should().Contain($"{nameof(parameters.Longitude)}: {longitude}{Environment.NewLine}");
        }
예제 #11
0
        public void AndLongitudeIsNull_ThenLongitudeNotWritten()
        {
            var longitude  = (double?)null;
            var parameters = new VacancySearchParameters {
                Longitude = longitude
            };

            var formattedParams = parameters.ToString();

            formattedParams.Should().NotContain($"{nameof(parameters.Longitude)}: {longitude}");
        }
예제 #12
0
        private ApprenticeshipSearchRequestParameters GetSearchClientParameters(VacancySearchParameters parameters)
        {
            var searchClientParameters = new ApprenticeshipSearchRequestParameters
            {
                FrameworkLarsCodes  = parameters.FrameworkLarsCodes,
                StandardLarsCodes   = parameters.StandardLarsCodes,
                PageSize            = parameters.PageSize,
                PageNumber          = parameters.PageNumber,
                FromDate            = parameters.FromDate,
                VacancyLocationType = string.IsNullOrEmpty(parameters.LocationType) ? VacancyLocationType.Unknown : (VacancyLocationType)Enum.Parse(typeof(VacancyLocationType), parameters.LocationType),
                Longitude           = parameters.Longitude,
                Latitude            = parameters.Latitude,
                SearchRadius        = parameters.DistanceInMiles,
                CalculateSubCategoryAggregations = false,
                Ukprn = parameters.Ukprn
            };

            switch (parameters.SortBy)
            {
            case SortBy.Age:
                searchClientParameters.SortType = VacancySearchSortType.RecentlyAdded;
                break;

            case SortBy.ExpectedStartDate:
                searchClientParameters.SortType = VacancySearchSortType.ExpectedStartDate;
                break;

            case SortBy.Distance:
                searchClientParameters.SortType = VacancySearchSortType.Distance;
                break;

            default:
                searchClientParameters.SortType = VacancySearchSortType.Relevancy;
                break;
            }

            return(searchClientParameters);
        }
예제 #13
0
        public IHttpActionResult Get([FromBody] VacancySearchParameters vacancyParams)
        {
            if (ModelState.IsValid)
            {
                var tupleResult = service.Get(
                    vacancyParams.UserId,
                    vacancyParams.IndustryId,
                    vacancyParams.Title,
                    vacancyParams.VacancyState,
                    vacancyParams.TypeOfEmployment,
                    vacancyParams.LevelIds,
                    vacancyParams.CityIds,
                    vacancyParams.Current,
                    vacancyParams.Size
                    );

                var vacanciesViewModel = tupleResult.Item1;
                var total = tupleResult.Item2;

                var ret = new { Vacancies = vacanciesViewModel, Current = vacancyParams.Current, Size = vacancyParams.Size, Total = total };
                return(Json(ret, BOT_SERIALIZER_SETTINGS));
            }
            return(BadRequest(ModelState));
        }