public void TestFilterGreaterOrEquals()
        {
            var filterOption = new ColumnFilterValue
            {
                ColumnName  = "Created",
                FilterType  = GridFilterType.GreaterThanOrEquals,
                FilterValue = "2002-05-01"
            };
            var filterOptions = new List <ColumnFilterValue>();

            filterOptions.Add(filterOption);
            var filter = new DefaultColumnFilter <TestModel, DateTime>(m => m.Created);

            var filtered = filter.ApplyFilter(_repo.GetAll().AsQueryable(), filterOptions);

            var original = _repo.GetAll().AsQueryable().Where(t => t.Created >= new DateTime(2002, 5, 1));

            for (int i = 0; i < filtered.Count(); i++)
            {
                if (filtered.ElementAt(i).Id != original.ElementAt(i).Id)
                {
                    Assert.Fail("Filtering not works");
                }
            }
        }
        public void TestGuidFilterStartsWith()
        {
            var filterOption = new ColumnFilterValue
            {
                ColumnName  = "GuidField",
                FilterType  = GridFilterType.StartsWith,
                FilterValue = "6e4fe7c4"
            };
            var filterOptions = new List <ColumnFilterValue>();

            filterOptions.Add(filterOption);
            var filter = new DefaultColumnFilter <TestModel, Guid>(m => m.GuidField);

            var filtered = filter.ApplyFilter(_repo.GetAll().AsQueryable(), filterOptions);

            var original = _repo.GetAll().AsQueryable().Where(t => t.GuidField.ToString().ToUpper().StartsWith("6e4fe7c4".ToUpper()));

            for (int i = 0; i < filtered.Count(); i++)
            {
                if (filtered.ElementAt(i).Id != original.ElementAt(i).Id)
                {
                    Assert.Fail("Filtering not works");
                }
            }
        }
        private bool ValidateFiltering(TestGrid grid, ColumnFilterValue value,
                                       Func <TestModel, bool> filterExpression)
        {
            var settingsMock     = new Mock <IGridSettingsProvider>();
            var filterSetting    = new Mock <IGridFilterSettings>();
            var filterCollection = new DefaultFilterColumnCollection {
                value
            };

            filterSetting.Setup(t => t.FilteredColumns).Returns(filterCollection);
            filterSetting.Setup(t => t.IsInitState(_grid.Columns.First())).Returns(false);

            settingsMock.Setup(s => s.FilterSettings).Returns(filterSetting.Object);
            settingsMock.Setup(s => s.SortSettings).Returns(new QueryStringSortSettings(_query));
            settingsMock.Setup(s => s.SearchSettings).Returns(new QueryStringSearchSettings(_query));
            grid.Settings = settingsMock.Object;

            IEnumerable <TestModel> resultCollection = _grid.GetItemsToDisplay();

            if (!resultCollection.Any())
            {
                Assert.Fail("No items to compare");
            }

            IEnumerable <TestModel> etalonCollection = _repo.GetAll().Where(filterExpression);

            if (!ValidateCollectionsTheSame(resultCollection, etalonCollection))
            {
                return(false);
            }
            return(true);
        }
        public void TestFilter()
        {
            var filterOption = new ColumnFilterValue
            {
                ColumnName  = "Created",
                FilterType  = GridFilterType.LessThan,
                FilterValue = "10.05.2005"
            };
            var filterOptions = new List <ColumnFilterValue>();

            filterOptions.Add(filterOption);
            var filter = new DefaultColumnFilter <TestModel, DateTime>(m => m.Created);

            var filtered = filter.ApplyFilter(_repo.GetAll().AsQueryable(), filterOptions);

            var original = _repo.GetAll().AsQueryable().Where(t => t.Created < new DateTime(2005, 5, 10));

            for (int i = 0; i < filtered.Count(); i++)
            {
                if (filtered.ElementAt(i).Id != original.ElementAt(i).Id)
                {
                    Assert.Fail("Filtering not works");
                }
            }

            //var processed processor.Process()
        }
        public void TestUInt64Filtering()
        {
            var filterOption = new ColumnFilterValue
            {
                ColumnName  = "UInt64Field",
                FilterType  = GridFilterType.Equals,
                FilterValue = "4294967888"
            };
            var filterOptions = new List <ColumnFilterValue>();

            filterOptions.Add(filterOption);
            var filter = new DefaultColumnFilter <TestModel, UInt64>(m => m.UInt64Field);

            var filtered = filter.ApplyFilter(_repo.GetAll().AsQueryable(), filterOptions);

            var original = _repo.GetAll().AsQueryable().Where(t => t.UInt64Field == 4294967888);

            for (int i = 0; i < filtered.Count(); i++)
            {
                if (filtered.ElementAt(i).Id != original.ElementAt(i).Id)
                {
                    Assert.Fail("Filtering not works");
                }
            }
        }
        public void TestGuidFilteringEquals()
        {
            var filterOption = new ColumnFilterValue
            {
                ColumnName  = "GuidField",
                FilterType  = GridFilterType.Equals,
                FilterValue = "6e4fe7c4-a5cb-4e29-8041-a80ce17ea727"
            };
            var filterOptions = new List <ColumnFilterValue>();

            filterOptions.Add(filterOption);
            var filter = new DefaultColumnFilter <TestModel, Guid>(m => m.GuidField);

            var filtered = filter.ApplyFilter(_repo.GetAll().AsQueryable(), filterOptions);

            var original = _repo.GetAll().AsQueryable().Where(t => t.GuidField == new Guid("6e4fe7c4-a5cb-4e29-8041-a80ce17ea727"));

            for (int i = 0; i < filtered.Count(); i++)
            {
                if (filtered.ElementAt(i).Id != original.ElementAt(i).Id)
                {
                    Assert.Fail("Filtering not works");
                }
            }
        }
        public void TestFilterContains()
        {
            var filterOption = new ColumnFilterValue
            {
                ColumnName  = "Title",
                FilterType  = GridFilterType.Contains,
                FilterValue = "test"
            };
            var filterOptions = new List <ColumnFilterValue>();

            filterOptions.Add(filterOption);
            var filter = new DefaultColumnFilter <TestModel, string>(m => m.Title);

            var filtered = filter.ApplyFilter(_repo.GetAll().AsQueryable(), filterOptions);

            var original = _repo.GetAll().AsQueryable().Where(t => t.Title.Contains("test"));

            for (int i = 0; i < filtered.Count(); i++)
            {
                if (filtered.ElementAt(i).Id != original.ElementAt(i).Id)
                {
                    Assert.Fail("Filtering not works");
                }
            }
        }
 private void TestFiltering <T>(ColumnFilterValue settings, Expression <Func <TestModel, T> > column,
                                Func <TestModel, bool> filterContraint)
 {
     _grid.Columns.Add(column, settings.ColumnName).Filterable(true);
     if (!ValidateFiltering(_grid, settings, filterContraint))
     {
         Assert.Fail("Filtering works incorrect");
     }
 }
예제 #9
0
        public IGridColumn <T> SetInitialFilter(GridFilterType type, string value)
        {
            var filter = new ColumnFilterValue
            {
                FilterType  = type,
                FilterValue = value,
                ColumnName  = Name
            };

            InitialFilterSettings = filter;
            return(this);
        }
예제 #10
0
        private void TestFiltering <T>(ColumnFilterValue settings, Expression <Func <TestModel, T> > column,
                                       Func <TestModel, bool> filterContraint)
        {
            Action <IGridColumnCollection <TestModel> > columns = c =>
            {
                c.Add(column, settings.ColumnName).Filterable(true);
            };
            var grid = new TestGrid((q) => _repo.GetAllService(columns, q, false, true), true, columns, Thread.CurrentThread.CurrentCulture);

            if (!ValidateFiltering(grid, grid.Columns.GetByName(settings.ColumnName), settings, filterContraint))
            {
                Assert.Fail("Filtering works incorrect");
            }
        }
예제 #11
0
        private bool ValidateFiltering(TestGrid grid, IGridColumn column, ColumnFilterValue value,
                                       Func <TestModel, bool> filterExpression)
        {
            grid.AddFilterParameter(column, new FilterCollection(value.FilterType.ToString("d"), value.FilterValue));
            grid.UpdateGrid().Wait();

            IEnumerable <TestModel> resultCollection = grid.GetItemsToDisplay();

            if (!resultCollection.Any())
            {
                Assert.Fail("No items to compare");
            }

            IEnumerable <TestModel> etalonCollection = _repo.GetAll().Where(filterExpression);

            if (!ValidateCollectionsTheSame(resultCollection, etalonCollection))
            {
                return(false);
            }
            return(true);
        }
예제 #12
0
        public QueryStringFilterSettings(IQueryDictionary <StringValues> query)
        {
            if (query == null)
            {
                throw new ArgumentException("No http context here!");
            }
            Query = query;

            string[] filters = Query.Count > 0 ? Query.Get(DefaultTypeQueryParameter).ToArray() : null;
            if (filters != null)
            {
                foreach (string filter in filters)
                {
                    ColumnFilterValue column = CreateColumnData(filter);
                    if (column != ColumnFilterValue.Null)
                    {
                        _filterValues.Add(column);
                    }
                }
            }
        }
예제 #13
0
        public void TestInt16Filtering()
        {
            var filterOptions = new ColumnFilterValue
            {
                ColumnName  = "Int16Field",
                FilterType  = GridFilterType.Equals,
                FilterValue = "16"
            };
            var filter = new DefaultColumnFilter <TestModel, Int16>(m => m.Int16Field);

            var filtered = filter.ApplyFilter(_repo.GetAll().AsQueryable(), filterOptions);

            var original = _repo.GetAll().AsQueryable().Where(t => t.Int16Field == 16);

            for (int i = 0; i < filtered.Count(); i++)
            {
                if (filtered.ElementAt(i).Id != original.ElementAt(i).Id)
                {
                    Assert.Fail("Filtering not works");
                }
            }
        }
예제 #14
0
        public string Process()
        {
            var filters = new List <string>();

            foreach (IGridColumn column in _grid.Columns)
            {
                var gridColumn = column as IGridColumn <T>;
                if (gridColumn == null)
                {
                    continue;
                }
                if (gridColumn.Filter == null)
                {
                    continue;
                }

                IEnumerable <ColumnFilterValue> options = _settings.IsInitState(column)
                                                             ? new List <ColumnFilterValue>
                {
                    column.InitialFilterSettings
                }
                                                             : _settings.FilteredColumns.GetByColumn(column);

                var filter = gridColumn.Filter.GetFilter(options);
                if (!string.IsNullOrWhiteSpace(filter))
                {
                    filters.Add(filter);
                }
            }

            // workaround for lack of $search OData support
            var search = new List <string>();

            if (_grid.SearchingEnabled && !string.IsNullOrWhiteSpace(_searchSettings.SearchValue))
            {
                foreach (IGridColumn column in _grid.Columns)
                {
                    var gridColumn = column as IGridColumn <T>;
                    if (gridColumn == null)
                    {
                        continue;
                    }
                    if (!_grid.SearchingHiddenColumns && gridColumn.Hidden)
                    {
                        continue;
                    }
                    if (gridColumn.Filter == null)
                    {
                        continue;
                    }
                    if (!gridColumn.Filter.IsTextColumn())
                    {
                        continue;
                    }

                    List <ColumnFilterValue> options = new List <ColumnFilterValue>();
                    var columnFilterValue            = new ColumnFilterValue(column.Name, GridFilterType.Contains, _searchSettings.SearchValue);
                    options.Add(columnFilterValue);

                    var filter = gridColumn.Filter.GetFilter(options);
                    if (!string.IsNullOrWhiteSpace(filter))
                    {
                        search.Add(filter);
                    }
                }
            }
            string searchResult = "";

            for (int i = 0; i < search.Count; i++)
            {
                searchResult += "(" + search[i] + ")";
                if (i != search.Count - 1)
                {
                    searchResult += " or ";
                }
            }

            string filterResult = "";

            for (int i = 0; i < filters.Count; i++)
            {
                filterResult += "(" + filters[i] + ")";
                if (i != filters.Count - 1)
                {
                    filterResult += " and ";
                }
            }

            if (string.IsNullOrWhiteSpace(searchResult))
            {
                if (string.IsNullOrWhiteSpace(filterResult))
                {
                    return("");
                }
                else
                {
                    return("$filter=" + WebUtility.UrlEncode(filterResult));
                }
            }
            else
            {
                if (string.IsNullOrWhiteSpace(filterResult))
                {
                    return("$filter=" + WebUtility.UrlEncode(searchResult));
                }
                else
                {
                    return("$filter=(" + WebUtility.UrlEncode(searchResult) + ") and (" + WebUtility.UrlEncode(filterResult) + ")");
                }
            }
        }