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);
        }
Exemplo n.º 9
0
        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);
                });
            }
        }