private void SetupWidgetLabelsAndTextDefaults(CourseSearchResultsViewModel viewModel) { viewModel.PageTitle = PageTitle; viewModel.OrderByLinks.OrderByText = OrderByText; viewModel.OrderByLinks.DistanceOrderByText = DistanceOrderByText; viewModel.OrderByLinks.StartDateOrderByText = StartDateOrderByText; viewModel.OrderByLinks.RelevanceOrderByText = RelevanceOrderByText; viewModel.CourseFiltersModel.WithinText = WithinText; viewModel.CourseFiltersModel.Only1619CoursesText = Only1619CoursesText; viewModel.CourseFiltersModel.StartDateExampleText = StartDateExampleText; viewModel.CourseFiltersModel.StartDateSectionText = StartDateSectionText; viewModel.CourseFiltersModel.CourseHoursSectionText = CourseHoursSectionText; viewModel.CourseFiltersModel.CourseTypeSectionText = CourseTypeSectionText; viewModel.CourseFiltersModel.ApplyFiltersText = ApplyFiltersText; viewModel.SearchForCourseNameText = SearchForCourseNameText; viewModel.ResetFiltersText = ResetFilterText; viewModel.CourseFiltersModel.ActiveFiltersCoursesText = ActiveFiltersCoursesText; viewModel.CourseFiltersModel.ActiveFiltersMilesText = ActiveFiltersMilesText; viewModel.CourseFiltersModel.ActiveFiltersOfText = ActiveFiltersOfText; viewModel.CourseFiltersModel.ActiveFiltersOnly1619CoursesText = ActiveFiltersOnly1619CoursesText; viewModel.CourseFiltersModel.ActiveFiltersShowingText = ActiveFiltersShowingText; viewModel.CourseFiltersModel.ActiveFiltersWithinText = ActiveFiltersWithinText; viewModel.CourseFiltersModel.ActiveFiltersProvidedByText = ActiveFiltersProvidedByText; viewModel.CourseFiltersModel.ActiveFiltersStartingFromText = ActiveFiltersStartingFromText; viewModel.CourseFiltersModel.ActiveFiltersSuitableForText = ActiveFiltersSuitableForText; viewModel.CourseFiltersModel.FilterLocationLabel = FilterLocationLabel; viewModel.CourseFiltersModel.FilterProviderLabel = FilterProviderLabel; viewModel.CourseFiltersModel.Only1619CoursesSectionText = Only1619CoursesSectionText; }
public void Dfc7055SearchResultsViewTests(int coursesCount, string pageTitle, string noCoursesFoundText) { // Assign var searchResultsView = new _MVC_Views_CourseSearchResults_SearchResults_cshtml(); var viewModel = new CourseSearchResultsViewModel { PageTitle = pageTitle, Courses = GetCourseListings(coursesCount, true).ToList(), NoTrainingCoursesFoundText = noCoursesFoundText, SearchForCourseNameText = nameof(CourseSearchResultsViewModel.SearchForCourseNameText) }; // Act var htmlDom = searchResultsView.RenderAsHtml(viewModel); // Assert AssertTagInnerTextValue(htmlDom, pageTitle, "h1"); if (coursesCount > 0) { AssertTagInnerTextValueDoesNotExist(htmlDom, noCoursesFoundText, "h3"); AssertExistsElementIdWithInnerHtml(htmlDom, "results-summary"); } else { AssertTagInnerTextValue(htmlDom, noCoursesFoundText, "h3"); AssertElementDoesNotExistsById(htmlDom, "results-summary"); } }
private void SetupWidgetDefaults(CourseSearchResultsViewModel viewModel) { viewModel.PageTitle = PageTitle; viewModel.FilterCourseByText = FilterCourseByText; viewModel.OrderByLinks.OrderByText = OrderByText; viewModel.OrderByLinks.DistanceOrderByText = DistanceOrderByText; viewModel.OrderByLinks.StartDateOrderByText = StartDateOrderByText; viewModel.OrderByLinks.RelevanceOrderByText = RelevanceOrderByText; }
private void SetupResultsViewModel(CourseSearchResultsViewModel viewModel, CourseSearchResult response) { courseSearchResultsViewModelBuilder.SetupViewModelPaging( viewModel, response, CourseSearchResultsPage, RecordsPerPage); viewModel.OrderByLinks = courseSearchResultsViewModelBuilder.GetOrderByLinks(CourseSearchResultsPage, response.ResultProperties.OrderedBy); }
public ActionResult Index(CourseSearchResultsViewModel viewModel) { if (viewModel != null && !string.IsNullOrWhiteSpace(viewModel.SearchTerm)) { return(Redirect(buildQueryStringService.BuildRedirectPathAndQueryString(CourseSearchResultsPage, viewModel.SearchTerm, viewModel.CourseFiltersModel))); } SetupWidgetDefaults(viewModel); return(View("SearchResults", viewModel)); }
public void SetupPagingTest(CourseSearchResultsViewModel viewModel, CourseSearchResult response, string pathQuery, int recordsPerPage, string courseSearchResultsPage, CourseSearchResultsViewModel expectedViewModel) { //Assign var courseSearchConverter = new CourseSearchViewModelService(); //Act courseSearchConverter.SetupPaging(viewModel, response, pathQuery, recordsPerPage, courseSearchResultsPage); //Assert viewModel.PaginationViewModel.NextPageUrl.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.NextPageUrl); viewModel.PaginationViewModel.NextPageText.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.NextPageText); viewModel.PaginationViewModel.PreviousPageUrl.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.PreviousPageUrl); viewModel.PaginationViewModel.PreviousPageText.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.PreviousPageText); viewModel.PaginationViewModel.HasPreviousPage.Should().Be(expectedViewModel.PaginationViewModel.HasPreviousPage); viewModel.PaginationViewModel.HasNextPage.Should().Be(expectedViewModel.PaginationViewModel.HasNextPage); }
private static void SetupStartDateDisplayData(CourseSearchResultsViewModel viewModel) { var combinedDate = $"{viewModel.CourseFiltersModel.StartDateYear}/{viewModel.CourseFiltersModel.StartDateMonth}/{viewModel.CourseFiltersModel.StartDateDay}"; if (DateTime.TryParse(combinedDate, out DateTime result)) { viewModel.CourseFiltersModel.StartDateFrom = result; viewModel.CourseFiltersModel.StartDateDay = result.Day.ToString(); viewModel.CourseFiltersModel.StartDateMonth = result.Month.ToString(); viewModel.CourseFiltersModel.StartDateYear = result.Year.ToString(); } else { viewModel.CourseFiltersModel.StartDateDay = DateTime.Now.Day.ToString(); viewModel.CourseFiltersModel.StartDateMonth = DateTime.Now.Month.ToString(); viewModel.CourseFiltersModel.StartDateYear = DateTime.Now.Year.ToString(); } }
public void SetupPagingTest(CourseSearchResultsViewModel viewModel, CourseSearchResult response, string pathQuery, int recordsPerPage, CourseSearchResultsViewModel expectedViewModel) { viewModel = viewModel ?? new CourseSearchResultsViewModel(); expectedViewModel = expectedViewModel ?? new CourseSearchResultsViewModel(); //Assign var fakeWebAppContext = A.Fake <IWebAppContext>(); var courseSearchConverter = new CourseSearchResultsViewModelBullder(fakeWebAppContext); A.CallTo(() => fakeWebAppContext.GetQueryStringExcluding(A <IEnumerable <string> > ._)).Returns("a=b"); //Act courseSearchConverter.SetupViewModelPaging(viewModel, response, pathQuery, recordsPerPage); //Assert viewModel.PaginationViewModel.NextPageUrl.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.NextPageUrl); viewModel.PaginationViewModel.NextPageText.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.NextPageText); viewModel.PaginationViewModel.PreviousPageUrl.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.PreviousPageUrl); viewModel.PaginationViewModel.PreviousPageText.Should().BeEquivalentTo(expectedViewModel.PaginationViewModel.PreviousPageText); viewModel.PaginationViewModel.HasPreviousPage.Should().Be(expectedViewModel.PaginationViewModel.HasPreviousPage); viewModel.PaginationViewModel.HasNextPage.Should().Be(expectedViewModel.PaginationViewModel.HasNextPage); }
public void BuildRedirectPathAndQueryStringTest(string courseSearchResultsPage, CourseSearchResultsViewModel trainingCourseResultsViewModel, string expectedPathAndQuery) { //Assign var buildQueryStringService = new BuildQueryStringService(); //Act var result = buildQueryStringService.BuildRedirectPathAndQueryString(courseSearchResultsPage, trainingCourseResultsViewModel.SearchTerm, trainingCourseResultsViewModel.CourseFiltersModel); //Assert result.Should().BeEquivalentTo(expectedPathAndQuery); }
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); }
public ActionResult Index(string searchTerm, string attendance, string studyMode, string attendancePattern, string location, string sortBy, string startDate, string provider, bool only1619Courses = false, int page = 1) { var viewModel = new CourseSearchResultsViewModel { SearchTerm = searchTerm }; var cleanCourseName = StringManipulationExtension.ReplaceSpecialCharacters(searchTerm, InvalidCharactersRegexPattern); if (!string.IsNullOrEmpty(cleanCourseName)) { var courseSearchProperties = new CourseSearchProperties { Page = page, Count = RecordsPerPage, OrderedBy = GetSortBy(sortBy), Filters = new CourseSearchFilters { Attendance = attendance?.Split(','), StudyMode = studyMode?.Split(','), Only1619Courses = only1619Courses, AttendancePattern = attendancePattern?.Split(','), Location = StringManipulationExtension.ReplaceSpecialCharacters(location, InvalidCharactersRegexPattern), Provider = StringManipulationExtension.ReplaceSpecialCharacters(provider, InvalidCharactersRegexPattern), StartDate = startDate } }; var response = asyncHelper.Synchronise(() => courseSearchService.SearchCoursesAsync(cleanCourseName, courseSearchProperties)); if (response.Courses.Any()) { foreach (var course in response.Courses) { course.CourseUrl = $"{CourseDetailsPage}?courseid={course.CourseId}"; viewModel.Courses.Add(new CourseListingViewModel { Course = course, AdvancedLoanProviderLabel = AdvancedLoanProviderLabel, LocationLabel = LocationLabel, ProviderLabel = ProviderLabel, StartDateLabel = StartDateLabel }); } var pathQuery = Request?.Url?.PathAndQuery; if (!string.IsNullOrWhiteSpace(pathQuery) && pathQuery.IndexOf("&page=", StringComparison.InvariantCultureIgnoreCase) > 0) { pathQuery = pathQuery.Substring(0, pathQuery.IndexOf("&page=", StringComparison.InvariantCultureIgnoreCase)); } courseSearchViewModelService.SetupPaging(viewModel, response, pathQuery, RecordsPerPage, CourseSearchResultsPage); SetupSearchLinks(searchTerm, viewModel, pathQuery, response.ResultProperties.OrderedBy); } // SetupFilterDisplayData(attendance, studymode, qualificationLevel, distance, dfe1619Funded, pattern, location, startDate, provider, viewModel); } viewModel.NoTrainingCoursesFoundText = string.IsNullOrWhiteSpace(searchTerm) ? string.Empty : NoTrainingCoursesFoundText; SetupWidgetDefaults(viewModel); return(View("SearchResults", viewModel)); }
public void IndexPostTests(string filterCourseByText, string pageTitle, string courseSearchResultsPage, string courseDetailsPage, CourseSearchResultsViewModel viewModel) { // Assign var controller = new CourseSearchResultsController(fakeApplicationLogger, fakeCourseSearchService, asyncHelper, fakeCourseSearchViewModelService, fakeBuildQueryStringService) { FilterCourseByText = filterCourseByText, PageTitle = pageTitle, CourseSearchResultsPage = courseSearchResultsPage, CourseDetailsPage = courseDetailsPage }; // Act var controllerResult = controller.WithCallTo(contrl => contrl.Index(viewModel)); // Assert if (!string.IsNullOrWhiteSpace(viewModel.SearchTerm)) { controllerResult.ShouldRedirectTo( fakeBuildQueryStringService.BuildRedirectPathAndQueryString(controller.CourseSearchResultsPage, viewModel.SearchTerm, viewModel.CourseFiltersModel)); } else { controllerResult.ShouldRenderView("SearchResults").WithModel <CourseSearchResultsViewModel>( vm => { vm.PageTitle.Should().BeEquivalentTo(controller.PageTitle); vm.FilterCourseByText.Should().BeEquivalentTo(controller.FilterCourseByText); }); } }