public void BuildPreSearchFilterOperationsTest(IEnumerable <KeyValuePair <string, int> > countOfFilters, IEnumerable <KeyValuePair <string, PreSearchFilterLogicalOperator> > filterFields, string expectedFilterBy) { var model = new PreSearchFiltersResultsModel { Sections = new List <FilterResultsSection>() }; if (countOfFilters == null) { throw new TestException("Count Of Filters passed is null"); } foreach (var item in countOfFilters) { var section = new FilterResultsSection { SectionDataType = item.Key, Name = item.Key, Options = GetTestFilterOptions(item).ToList(), SingleSelectOnly = item.Value == 1, SingleSelectedValue = item.Value == 1 ? $"{item.Key.ToLower()}{item.Value}" : null }; model.Sections.Add(section); } var testObject = new DfcBuildFilterService(); var result = testObject.BuildPreSearchFilters(model, filterFields.ToDictionary(k => k.Key, v => v.Value)); result.Should().Be(expectedFilterBy); }
public string BuildPreSearchFilters(PreSearchFiltersResultsModel preSearchFilterModel, IDictionary <string, PreSearchFilterLogicalOperator> indexFields) { var builder = new System.Text.StringBuilder(); if (indexFields != null) { foreach (var field in indexFields) { var validIndexField = typeof(JobProfileIndex).GetProperties() .Any(property => property.Name.Equals(field.Key)); if (validIndexField) { var fieldFilter = preSearchFilterModel?.Sections?.FirstOrDefault(section => section.SectionDataTypes.Equals(field.Key, StringComparison.InvariantCultureIgnoreCase)); if (fieldFilter != null) { var notApplicableSelected = fieldFilter.Options.Any(opt => opt.ClearOtherOptionsIfSelected); if (!notApplicableSelected) { var fieldValue = fieldFilter.SingleSelectOnly ? fieldFilter.SingleSelectedValue : string.Join(",", fieldFilter.Options.Where(opt => opt.IsSelected).Select(opt => opt.OptionKey)); if (!string.IsNullOrWhiteSpace(fieldValue)) { builder.Append($"{GetOperator(builder, field)} {field.Key}/{GetFilter(field, fieldValue)}"); } } } } } } return(builder.ToString().Trim()); }
public string BuildPreSearchFilters(PreSearchFiltersResultsModel preSearchFilterModel, IDictionary <string, PreSearchFilterLogicalOperator> indexFields) { var builder = new System.Text.StringBuilder(); if (indexFields != null) { foreach (var field in indexFields) { var validIndexField = typeof(JobProfileIndex).GetProperties() .Any(property => property.Name.Equals(field.Key, StringComparison.OrdinalIgnoreCase)); if (validIndexField) { var fieldFilter = preSearchFilterModel?.Sections?.FirstOrDefault(section => section.SectionDataTypes.Equals(field.Key, StringComparison.InvariantCultureIgnoreCase)); if (fieldFilter != null) { BuildPreSearchFiltersForField(builder, fieldFilter, field); } } } } return(builder.ToString().Trim()); }
public string GetSearchTerm(SearchProperties searchProperties, PreSearchFiltersResultsModel preSearchFiltersResultsModel, string[] searchFields) { var searchTerm = "*"; var builder = new System.Text.StringBuilder(); string usedSearchFields = string.Empty; if (searchFields == null) { return(searchTerm); } foreach (var searchField in searchFields) { var fieldFilter = preSearchFiltersResultsModel.Sections?.FirstOrDefault(section => section.SectionDataTypes.Equals(searchField, StringComparison.InvariantCultureIgnoreCase)); if (fieldFilter != null) { var notApplicableSelected = fieldFilter.Options.Any(opt => opt.ClearOtherOptionsIfSelected); if (!notApplicableSelected && !fieldFilter.SingleSelectOnly) { var fieldValue = string.Join(" + ", fieldFilter.Options.Where(opt => opt.IsSelected).Select(opt => opt.OptionKey)); if (!string.IsNullOrWhiteSpace(fieldValue)) { builder.Append($"{fieldValue} + "); usedSearchFields += $"{searchField},"; } } } } if (builder.Length > 0) { searchProperties.SearchFields = usedSearchFields.TrimEnd(',').Split(',').ToList(); searchTerm = builder.ToString(); //remove the last " + " searchTerm = searchTerm.TrimEnd(' ', '+'); } return(searchTerm); }
public void GetSearchTermTests(string inputSearchFieldsSingular, string inputSearchFieldsPlural, string expcetedSearchTerm) { var buildFilterService = new DfcBuildFilterService(); var searchProperties = new SearchProperties(); var preSearchFiltersResultsModel = new PreSearchFiltersResultsModel() { Sections = new List <FilterResultsSection>() }; var testField1 = new FilterResultsOption() { ClearOtherOptionsIfSelected = false, IsSelected = true, OptionKey = "Option1" }; var testField2 = new FilterResultsOption() { ClearOtherOptionsIfSelected = false, IsSelected = true, OptionKey = "Option2" }; foreach (string field in inputSearchFieldsSingular.Split(',')) { preSearchFiltersResultsModel.Sections.Add(new FilterResultsSection() { SectionDataType = field, SingleSelectOnly = false, Options = new List <FilterResultsOption>() { testField1, testField2 } }); } var searchTerm = buildFilterService.GetSearchTerm(searchProperties, preSearchFiltersResultsModel, inputSearchFieldsPlural.Split(',')); searchTerm.Should().BeEquivalentTo(expcetedSearchTerm); }
private void SetMatchingSkillsCount(JobProfileSearchResultViewModel resultViewModel, PreSearchFiltersResultsModel preSearchFiltersResultsModel, SearchResult <JobProfileIndex> searchResult) { var fieldFilter = preSearchFiltersResultsModel.Sections?.FirstOrDefault(section => section.SectionDataTypes.Equals("Skills", StringComparison.InvariantCultureIgnoreCase)); if (fieldFilter?.Options.Count > 0) { var selectedSkills = fieldFilter.Options.Where(opt => opt.IsSelected).Select(opt => opt.OptionKey); foreach (var viewItem in resultViewModel.SearchResults) { var resultItem = searchResult.Results.Where(r => r.ResultItem.UrlName == viewItem.ResultItemUrlName).FirstOrDefault().ResultItem; viewItem.MatchingSkillsCount = resultItem.Skills.Count(skill => selectedSkills.Contains(skill)); } } }