public void GetOrderByLinksTest(string searchUrl, CourseSearchOrderBy courseSearchSortBy, OrderByLinks expectedOrderByLinks) { //Assign var courseSearchConverter = new CourseSearchViewModelService(); //Act var result = courseSearchConverter.GetOrderByLinks(searchUrl, courseSearchSortBy); //Assert result.Should().BeEquivalentTo(expectedOrderByLinks); }
public OrderByLinks GetOrderByLinks(string resultsPage, CourseSearchOrderBy orderBy) { var partialQueryString = context.GetQueryStringExcluding(new[] { $"{nameof(CourseSearchProperties.OrderedBy)}" }); return(new OrderByLinks { OrderBy = orderBy, OrderByRelevanceUrl = new Uri($"{resultsPage}?{partialQueryString.ToString()}&{nameof(CourseSearchProperties.OrderedBy)}={nameof(CourseSearchOrderBy.Relevance)}", UriKind.RelativeOrAbsolute), OrderByDistanceUrl = new Uri($"{resultsPage}?{partialQueryString.ToString()}&{nameof(CourseSearchProperties.OrderedBy)}={nameof(CourseSearchOrderBy.Distance)}", UriKind.RelativeOrAbsolute), OrderByStartDateUrl = new Uri($"{resultsPage}?{partialQueryString.ToString()}&{nameof(CourseSearchProperties.OrderedBy)}={nameof(CourseSearchOrderBy.StartDate)}", UriKind.RelativeOrAbsolute) }); }
public void GetOrderByLinksTest(string searchUrl, CourseSearchOrderBy courseSearchSortBy, OrderByLinks expectedOrderByLinks) { //Assign var fakeWebAppContext = A.Fake <IWebAppContext>(); var courseSearchConverter = new CourseSearchResultsViewModelBullder(fakeWebAppContext); A.CallTo(() => fakeWebAppContext.GetQueryStringExcluding(A <IEnumerable <string> > ._)).Returns("a=b"); //Act var result = courseSearchConverter.GetOrderByLinks(searchUrl, courseSearchSortBy); //Assert result.Should().BeEquivalentTo(expectedOrderByLinks); }
private static SortType GetSortType(CourseSearchOrderBy courseSearchSortBy) { switch (courseSearchSortBy) { case CourseSearchOrderBy.Distance: return(SortType.D); case CourseSearchOrderBy.StartDate: return(SortType.S); default: case CourseSearchOrderBy.Relevance: return(SortType.A); } }
public void Dfc7055OrderLinksViewTests(CourseSearchOrderBy courseSearchSortBy) { // Assign var searchResultsView = new _MVC_Views_CourseSearchResults_OrderByLinks_cshtml(); var viewModel = new OrderByLinks { OrderBy = courseSearchSortBy, StartDateOrderByText = nameof(OrderByLinks.StartDateOrderByText), DistanceOrderByText = nameof(OrderByLinks.DistanceOrderByText), RelevanceOrderByText = nameof(OrderByLinks.RelevanceOrderByText) }; // Act var htmlDom = searchResultsView.RenderAsHtml(viewModel); // Assert switch (courseSearchSortBy) { case CourseSearchOrderBy.Relevance: AssertTagInnerTextValue(htmlDom, viewModel.RelevanceOrderByText, "span"); break; case CourseSearchOrderBy.Distance: AssertTagInnerTextValue(htmlDom, viewModel.DistanceOrderByText, "span"); break; default: case CourseSearchOrderBy.StartDate: AssertTagInnerTextValue(htmlDom, viewModel.StartDateOrderByText, "span"); break; } var orderList = new List <string> { viewModel.RelevanceOrderByText, viewModel.StartDateOrderByText, viewModel.DistanceOrderByText }; AssertOrderOfTextDisplayed( htmlDom, orderList); }
internal static int MapToSortBy(this CourseSearchOrderBy orderBy) { var result = SortBy.Undefined; switch (orderBy) { case CourseSearchOrderBy.Relevance: result = SortBy.Relevance; break; case CourseSearchOrderBy.StartDate: result = SortBy.AscendingStartDate; break; case CourseSearchOrderBy.Distance: result = SortBy.Distance; break; default: break; } return((int)result); }
public async Task <CourseSearchResult> GetFilteredData(CourseSearchFilters filters, CourseSearchOrderBy orderBy, int pageSize) { var criteriaProperties = new CourseSearchProperties { Filters = filters, OrderedBy = orderBy, Page = pageSize, }; return(await repository.RetrieveData(criteriaProperties).ConfigureAwait(false)); }
public void IndexTests(CourseFiltersViewModel searchFilter, string resetFilterText, string pageTitle, string courseSearchResultsPage, string courseDetailsPage, CourseSearchOrderBy orderBy, CourseSearchResult courseSearchResponse) { courseSearchResponse = courseSearchResponse ?? new CourseSearchResult(); searchFilter = searchFilter ?? new CourseFiltersViewModel(); // setupFakes A.CallTo(() => fakeCourseSearchService.SearchCoursesAsync(A <CourseSearchProperties> ._)).Returns(courseSearchResponse); var searchProperties = new CourseSearchProperties { OrderedBy = orderBy }; // Assign var controller = new CourseSearchResultsController(fakeApplicationLogger, fakeCourseSearchService, asyncHelper, fakeCourseSearchViewModelService, fakeWebAppContext, mapperCfg) { ResetFilterText = resetFilterText, PageTitle = pageTitle, CourseSearchResultsPage = courseSearchResultsPage, CourseDetailsPage = courseDetailsPage, RecordsPerPage = 40, AdvancedLoanProviderLabel = nameof(CourseSearchResultsController.AdvancedLoanProviderLabel), LocationLabel = nameof(CourseSearchResultsController.LocationLabel), ProviderLabel = nameof(CourseSearchResultsController.ProviderLabel), StartDateLabel = nameof(CourseSearchResultsController.StartDateLabel), OrderByText = nameof(CourseSearchResultsController.OrderByText), StartDateOrderByText = nameof(CourseSearchResultsController.StartDateOrderByText), DistanceOrderByText = nameof(CourseSearchResultsController.DistanceOrderByText), RelevanceOrderByText = nameof(CourseSearchResultsController.RelevanceOrderByText), NoTrainingCoursesFoundText = nameof(CourseSearchResultsController.NoTrainingCoursesFoundText), ApplyFiltersText = nameof(CourseSearchResultsController.ApplyFiltersText), CourseTypeSectionText = nameof(CourseSearchResultsController.CourseTypeSectionText), CourseHoursSectionText = nameof(CourseSearchResultsController.CourseHoursSectionText), StartDateSectionText = nameof(CourseSearchResultsController.StartDateSectionText), SearchForCourseNameText = nameof(CourseSearchResultsController.SearchForCourseNameText), WithinText = nameof(CourseSearchResultsController.WithinText), Only1619CoursesText = nameof(CourseSearchResultsController.Only1619CoursesText), StartDateExampleText = nameof(CourseSearchResultsController.StartDateExampleText) }; // Act var controllerResult = controller.WithCallTo(contrl => contrl.Index( searchFilter, searchProperties)); // Assert controllerResult.ShouldRenderView("SearchResults").WithModel <CourseSearchResultsViewModel>( vm => { vm.PageTitle.Should().BeEquivalentTo(controller.PageTitle); vm.ResetFiltersText.Should().BeEquivalentTo(controller.ResetFilterText); vm.ResetFilterUrl.OriginalString.Should().NotBeEmpty(); }); if (!string.IsNullOrWhiteSpace(searchFilter.SearchTerm)) { A.CallTo(() => fakeCourseSearchService.SearchCoursesAsync(A <CourseSearchProperties> ._)).MustHaveHappened(); if (courseSearchResponse.Courses.Any()) { A.CallTo(() => fakeCourseSearchViewModelService.GetOrderByLinks(A <string> ._, A <CourseSearchOrderBy> ._)).MustHaveHappened(); A.CallTo(() => fakeCourseSearchViewModelService.SetupViewModelPaging(A <CourseSearchResultsViewModel> ._, A <CourseSearchResult> ._, A <string> ._, A <int> ._)).MustHaveHappened(); } } else { A.CallTo(() => fakeCourseSearchService.SearchCoursesAsync(A <CourseSearchProperties> ._)).MustNotHaveHappened(); A.CallTo(() => fakeCourseSearchViewModelService.GetOrderByLinks(A <string> ._, A <CourseSearchOrderBy> ._)).MustNotHaveHappened(); A.CallTo(() => fakeCourseSearchViewModelService.SetupViewModelPaging(A <CourseSearchResultsViewModel> ._, A <CourseSearchResult> ._, A <string> ._, A <int> ._)).MustNotHaveHappened(); } }
public ActionResult Index(CourseFiltersViewModel filtersInput, CourseSearchProperties inputSearchProperties) { var cleanedSearchTerm = filtersInput.SearchTerm.ReplaceSpecialCharacters(Constants.CourseSearchInvalidCharactersRegexPattern); var courseSearchResults = new CourseSearchResultsViewModel { CourseFiltersModel = filtersInput, ResetFilterUrl = new Uri($"{CourseSearchResultsPage}?{nameof(CourseSearchFilters.SearchTerm)}={filtersInput.SearchTerm}", UriKind.RelativeOrAbsolute), NoTrainingCoursesFoundText = NoTrainingCoursesFoundText.Replace(SearchTermTokenToReplace, $"'{HttpUtility.HtmlEncode(filtersInput.SearchTerm)}'"), }; CourseSearchOrderBy originalCourseSearchOrderBy = inputSearchProperties.OrderedBy; if (!filtersInput.IsDistanceLocation) { filtersInput.Town = filtersInput.Location; //Make CD API behave the same way as tribal if there is no postcode, the order by relevence if distance is selected. if (inputSearchProperties.OrderedBy == CourseSearchOrderBy.Distance) { inputSearchProperties.OrderedBy = CourseSearchOrderBy.Relevance; } } else { filtersInput.Postcode = filtersInput.Location; } if (!string.IsNullOrEmpty(cleanedSearchTerm)) { //create a new object if invoked from landing page var courseSearchProperties = inputSearchProperties ?? new CourseSearchProperties(); courseSearchProperties.Count = RecordsPerPage; courseSearchProperties.Filters = mapper.Map <CourseSearchFilters>(filtersInput); courseSearchProperties.Filters.DistanceSpecified = filtersInput.IsDistanceLocation && (filtersInput.Distance > 0); ReplaceSpecialCharactersOnFreeTextFields(courseSearchProperties.Filters); var combinedDate = $"{filtersInput.StartDateYear}/{filtersInput.StartDateMonth}/{filtersInput.StartDateDay}"; if (DateTime.TryParse(combinedDate, out DateTime result)) { courseSearchProperties.Filters.StartDateFrom = result; } var response = asyncHelper.Synchronise(() => courseSearchService.SearchCoursesAsync(courseSearchProperties)); if (response.Courses.Any()) { foreach (var course in response.Courses) { course.CourseLink = $"{CourseDetailsPage}?{nameof(CourseDetails.CourseId)}={course.CourseId}&r={course.RunId}&referralPath={context.GetUrlEncodedPathAndQuery()}"; courseSearchResults.Courses.Add(new CourseListingViewModel { Course = course, AdvancedLoanProviderLabel = AdvancedLoanProviderLabel, LocationLabel = LocationLabel, ProviderLabel = ProviderLabel, StartDateLabel = StartDateLabel }); } response.ResultProperties.OrderedBy = originalCourseSearchOrderBy; SetupResultsViewModel(courseSearchResults, response); } SetupStartDateDisplayData(courseSearchResults); } SetupWidgetLabelsAndTextDefaults(courseSearchResults); return(View("SearchResults", courseSearchResults)); }
//private void SetupFilterLists(string attendance, string studyMode, string qualificationLevel, string pattern, string distance, string dfe1619Funded, string location, string startDate, string providerKeyword, TrainingCourseResultsViewModel viewModel) //{ // viewModel.CourseFiltersModel.Location = location; // viewModel.CourseFiltersModel.ProviderKeyword = providerKeyword; // viewModel.CourseFiltersModel.AttendanceSelectedList = // courseSearchConverter.GetFilterSelectItems( // $"{nameof(CourseFiltersModel)}.{nameof(CourseFiltersModel.AttendanceMode)}", AttendanceModesSource.Split(','), attendance); // viewModel.CourseFiltersModel.PatternSelectedList = // courseSearchConverter.GetFilterSelectItems( // $"{nameof(CourseFiltersModel)}.{nameof(CourseFiltersModel.AttendancePattern)}", AttendancePatternModesSource.Split(','), pattern); // viewModel.CourseFiltersModel.QualificationSelectedList = // courseSearchConverter.GetFilterSelectItems( // $"{nameof(CourseFiltersModel)}.{nameof(CourseFiltersModel.QualificationLevel)}", QualificationLevelSource.Split(','), qualificationLevel); // viewModel.CourseFiltersModel.StudyModeSelectedList = // courseSearchConverter.GetFilterSelectItems( // $"{nameof(CourseFiltersModel)}.{nameof(CourseFiltersModel.StudyMode)}", StudyModesSource.Split(','), studyMode); // viewModel.CourseFiltersModel.DistanceSelectedList = // courseSearchConverter.GetFilterSelectItems( // $"{nameof(CourseFiltersModel)}.{nameof(CourseFiltersModel.Distance)}", DistanceSource.Split(','), distance); // viewModel.CourseFiltersModel.AgeSuitabilitySelectedList = // courseSearchConverter.GetFilterSelectItems( // $"{nameof(CourseFiltersModel)}.{nameof(CourseFiltersModel.AgeSuitability)}", AgeSuitabilitySource.Split(','), dfe1619Funded); // viewModel.CourseFiltersModel.StartDateSelectedList = // courseSearchConverter.GetFilterSelectItems( // $"{nameof(CourseFiltersModel)}.{nameof(CourseFiltersModel.StartDate)}", StartDateSource.Split(','), startDate); //} private void SetupSearchLinks(string searchTerm, CourseSearchResultsViewModel viewModel, string pathQuery, CourseSearchOrderBy sortBy) { viewModel.OrderByLinks = courseSearchViewModelService.GetOrderByLinks(pathQuery, sortBy); viewModel.ResetFilterUrl = new Uri($"{CourseSearchResultsPage}?searchterm={searchTerm}", UriKind.RelativeOrAbsolute); }