コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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));
                }
            }
        }