private static void ReplaceSpecialCharactersOnFreeTextFields(CourseSearchFilters courseSearchFilters)
 {
     courseSearchFilters.SearchTerm = courseSearchFilters.SearchTerm.ReplaceSpecialCharacters(Constants.CourseSearchInvalidCharactersRegexPattern);
     courseSearchFilters.Location   = courseSearchFilters.Location.ReplaceSpecialCharacters(Constants.CourseSearchInvalidCharactersRegexPattern);
     courseSearchFilters.Town       = courseSearchFilters.Town.ReplaceSpecialCharacters(Constants.CourseSearchInvalidCharactersRegexPattern);
     courseSearchFilters.Provider   = courseSearchFilters.Provider.ReplaceSpecialCharacters(Constants.CourseSearchInvalidCharactersRegexPattern);
 }
        public ActionResult Index(CourseSearchFilters model)
        {
            if (model == null)
            {
                return(Redirect(CourseSearchResultsPage));
            }

            return(Redirect(queryStringBuilder.BuildPathAndQueryString(CourseSearchResultsPage, model)));
        }
예제 #3
0
        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 CheckIfFilteredDataReturnsData()
        {
            //Arrange
            var repository       = A.Fake <IFindACourseRepository>();
            var courseProperties = new CourseSearchProperties
            {
                Page = 1,
            };

            courseProperties.Filters.SearchTerm = "Maths";
            courseProperties.Filters.CourseType = new List <CourseType> {
                CourseType.All
            };
            courseProperties.Filters.CourseHours = new List <CourseHours> {
                CourseHours.All
            };

            var courseSearchFilters = new CourseSearchFilters
            {
                SearchTerm = "Maths",
                CourseType = new List <CourseType> {
                    CourseType.All
                },
                CourseHours = new List <CourseHours> {
                    CourseHours.All
                },
            };

            var returnedCourseData = new CourseSearchResult
            {
                Courses = new List <Course>
                {
                    new Course {
                        Title = "Maths", CourseId = "1", AttendancePattern = "Online",
                    },
                },
            };

            var findACourseService = new FindACourseService(repository);

            A.CallTo(() => repository.RetrieveData(A <CourseSearchProperties> .Ignored)).Returns(returnedCourseData);

            //Act
            var result = findACourseService.GetFilteredData(courseSearchFilters, CourseSearchOrderBy.Relevance, 1).Result;

            //Assert
            A.CallTo(() => repository.RetrieveData(A <CourseSearchProperties> .Ignored)).MustHaveHappenedOnceExactly();
            Assert.Equal(returnedCourseData, result);
        }
예제 #5
0
        public async Task <IActionResult> SearchCourse(string searchTerm)
        {
            logService.LogInformation($"{nameof(this.SearchCourse)} has been called");

            var model = new BodyViewModel();
            var courseSearchFilters = new CourseSearchFilters
            {
                CourseType = new List <CourseType> {
                    CourseType.All
                },
                CourseHours = new List <CourseHours> {
                    CourseHours.All
                },
                StartDate       = StartDate.Anytime,
                CourseStudyTime = new List <Fac.AttendancePattern> {
                    Fac.AttendancePattern.Undefined
                },
                SearchTerm = string.IsNullOrEmpty(searchTerm) ? string.Empty : searchTerm,
            };

            model.SideBar = GetSideBarViewModel();
            model.SideBar.OrderByOptions    = ListFilters.GetOrderByOptions();
            model.CurrentSearchTerm         = searchTerm;
            model.SideBar.CurrentSearchTerm = searchTerm;
            model.RequestPage = 1;

            try
            {
                model.Results = await findACourseService.GetFilteredData(courseSearchFilters, CourseSearchOrderBy.StartDate, 1).ConfigureAwait(true);
            }
            catch (Exception ex)
            {
                logService.LogError($"{nameof(this.SearchCourse)} threw an exception" + ex.Message);
            }

            logService.LogInformation($"{nameof(this.SearchCourse)} generated the model and ready to pass to the view");

            return(Results(model));
        }
예제 #6
0
        private static BodyViewModel GenerateModel(BodyViewModel model)
        {
            var courseTypeList         = new List <CourseType>();
            var courseHoursList        = new List <CourseHours>();
            var courseStudyTimeList    = new List <Fac.AttendancePattern>();
            var selectedStartDateValue = StartDate.Anytime;

            float selectedDistanceValue = 10;

            if (model.SelectedDistanceValue != null)
            {
                var resultString = Regex.Match(model.SelectedDistanceValue, @"\d+").Value;
                _ = float.TryParse(resultString, out selectedDistanceValue);
            }

            if (model.SideBar.CourseType != null && model.SideBar.CourseType.SelectedIds.Any())
            {
                courseTypeList = ConvertToEnumList <CourseType>(model.SideBar.CourseType.SelectedIds);
            }

            if (model.SideBar.CourseHours != null && model.SideBar.CourseHours.SelectedIds.Any())
            {
                courseHoursList = ConvertToEnumList <CourseHours>(model.SideBar.CourseHours.SelectedIds);
            }

            if (model.SideBar.CourseStudyTime != null && model.SideBar.CourseStudyTime.SelectedIds.Any())
            {
                courseStudyTimeList = ConvertToEnumList <Fac.AttendancePattern>(model.SideBar.CourseStudyTime.SelectedIds);
            }

            if (model.SideBar.SelectedOrderByValue != null)
            {
                _ = Enum.TryParse(model.SideBar.SelectedOrderByValue.Replace(" ", string.Empty), true, out CourseSearchOrderBy sortedByCriteria);
                model.CourseSearchOrderBy = sortedByCriteria;
            }
            else
            {
                var sortedByCriteria = CourseSearchOrderBy.Relevance;
                model.CourseSearchOrderBy = sortedByCriteria;
            }

            var courseSearchFilters = new CourseSearchFilters
            {
                SearchTerm      = model.CurrentSearchTerm,
                CourseType      = courseTypeList,
                CourseHours     = courseHoursList,
                StartDate       = selectedStartDateValue,
                CourseStudyTime = courseStudyTimeList,
                Distance        = selectedDistanceValue,
            };

            model.SideBar.FiltersApplied = model.FromPaging ? model.SideBar.FiltersApplied : true;

            switch (model.SideBar.StartDateValue)
            {
            case "Next 3 months":
                courseSearchFilters.StartDateTo   = DateTime.Today.AddMonths(3);
                courseSearchFilters.StartDateFrom = DateTime.Today;
                courseSearchFilters.StartDate     = StartDate.SelectDateFrom;
                break;

            case "In 3 to 6 months":
                courseSearchFilters.StartDateFrom = DateTime.Today.AddMonths(3);
                courseSearchFilters.StartDateTo   = DateTime.Today.AddMonths(6);
                courseSearchFilters.StartDate     = StartDate.SelectDateFrom;
                break;

            case "More than 6 months":
                courseSearchFilters.StartDateFrom = DateTime.Today.AddMonths(6);
                courseSearchFilters.StartDate     = StartDate.SelectDateFrom;
                break;

            default:
                courseSearchFilters.StartDate = StartDate.Anytime;
                break;
            }

            if (!string.IsNullOrEmpty(model.SideBar.TownOrPostcode))
            {
                if (model.SideBar.TownOrPostcode.IsPostcode())
                {
                    courseSearchFilters.PostCode          = NormalizePostcode(model.SideBar.TownOrPostcode);
                    courseSearchFilters.Distance          = selectedDistanceValue;
                    courseSearchFilters.DistanceSpecified = true;
                }
                else
                {
                    courseSearchFilters.Town = "\u0022" + model.SideBar.TownOrPostcode + "\u0022";
                }
            }

            // Enter filters criteria here
            model.RequestPage = (model.RequestPage > 1) ? model.RequestPage : 1;

            model.CourseSearchFilters = courseSearchFilters;

            return(model);
        }
        public string BuildRedirectPathAndQueryString(string courseSearchResultsPage, string searchTerm, CourseSearchFilters courseSearchFilters)
        {
            if (courseSearchFilters == null)
            {
                return(courseSearchResultsPage);
            }

            var parameters = new Dictionary <string, string>();

            if (!string.IsNullOrWhiteSpace(searchTerm) || !string.IsNullOrWhiteSpace(courseSearchFilters.Provider))
            {
                if (!string.IsNullOrWhiteSpace(searchTerm))
                {
                    parameters.Add(nameof(searchTerm), StringManipulationExtension.GetUrlEncodedString(searchTerm));
                }

                if (!string.IsNullOrWhiteSpace(courseSearchFilters.Provider))
                {
                    parameters.Add(nameof(courseSearchFilters.Provider), StringManipulationExtension.GetUrlEncodedString(courseSearchFilters.Provider));
                }

                if (courseSearchFilters.Attendance.Any())
                {
                    parameters.Add(nameof(courseSearchFilters.Attendance), string.Join(",", courseSearchFilters.Attendance));
                }

                if (courseSearchFilters.Only1619Courses)
                {
                    parameters.Add(nameof(courseSearchFilters.Only1619Courses), "true");
                }

                if (!string.IsNullOrWhiteSpace(courseSearchFilters.Location))
                {
                    parameters.Add(nameof(CourseSearchFilters.Location), StringManipulationExtension.GetUrlEncodedString(courseSearchFilters.Location));
                }

                if (courseSearchFilters.AttendancePattern.Any())
                {
                    parameters.Add(nameof(CourseSearchFilters.AttendancePattern), string.Join(",", courseSearchFilters.AttendancePattern));
                }

                //parameters.Add(nameof(CourseSearchFilters.StartDate), "anytime");
                if (courseSearchFilters.StudyMode.Any())
                {
                    parameters.Add(nameof(CourseSearchFilters.StudyMode), string.Join(",", courseSearchFilters.StudyMode));
                }
            }

            var queryParameters = string.Join("&", parameters.Select(kvp => $"{kvp.Key}={kvp.Value}"));

            return($"{courseSearchResultsPage}?{queryParameters}");
        }