public void InvalidFilteringModel(bool descending, CategoriesSortingCriterion criterion) { var model = new CategoriesFilteringModel("", criterion, descending, 1, 1); var query = Context.Categories.AsQueryable(); Assert.Throws <ArgumentOutOfRangeException>(() => FilteringServices.Filter(query, model)); }
public IActionResult Filter([FromBody] CategoriesFilteringModel model) { var userId = _userManager.GetUserId(this.User); var isAdmin = this.User.IsInRole(_roleNamesOptions.AdminRoleName); var query = _filteringServices.Filter(_services.Get(userId, isAdmin), model); var list = query.ToList(); return(new JsonResult(list)); }
public void ReturnsProperlyFilteredCategories(string searchText, CategoriesSortingCriterion criterion, bool descending, int pageIndex, int pageSize) { var model = new CategoriesFilteringModel(searchText, criterion, descending, pageIndex, pageSize); var categories = AddCategories(30); var query = Context.Categories.AsQueryable(); var filteredCategories = FilteringServices.Filter(query, model).ToList(); var expected = categories.Where(c => c.Name.Contains(searchText)); var lambda = GetLambda(criterion); expected = descending ? expected.OrderByDescending(lambda) : expected.OrderBy(lambda); var expectedList = expected.Skip(model.PageIndex * model.PageSize).Take(model.PageSize).ToList(); Assert.Equal(expectedList.Count, filteredCategories.Count); for (var i = 0; i < expectedList.Count; i++) { Assert.True(expectedList[i].Id == (filteredCategories[i].Id)); } }
public IQueryable <CategoryDto> Filter(IQueryable <Category> query, CategoriesFilteringModel model) { query = query.Where(c => c.Name.Contains(model.SearchText)); if (model.Descending) { switch (model.SortingCriterion) { case CategoriesSortingCriterion.None: query = query.OrderByDescending(c => c.Id); break; case CategoriesSortingCriterion.Name: query = query.OrderByDescending(c => c.Name); break; default: throw new ArgumentOutOfRangeException(); } } else { switch (model.SortingCriterion) { case CategoriesSortingCriterion.None: query = query.OrderBy(c => c.Id); break; case CategoriesSortingCriterion.Name: query = query.OrderBy(c => c.Name); break; default: throw new ArgumentOutOfRangeException(); } } return(query.Skip(model.PageIndex * model.PageSize).Take(model.PageSize).Select(c => new CategoryDto(c))); }