public async Task GetByEnumListTest() { var filterDto = new CharacterFilterListDto { Types = new List <CharacterType> { CharacterType.Warrior, CharacterType.Archer } }; var pagedRequest = new PagedFilterRequest <CharacterFilterListDto> { FilterDto = filterDto, PageSize = 1, PageNumber = 1 }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var hasLegolasAragorn = items.Any(x => x.Name == "Legolas" || x.Name == "Aragorn"); Assert.IsTrue(hasLegolasAragorn); }
public async Task GetByNullableBoolTest() { var filterDto = new CharacterFilterDto { IsDeleted = true }; var pagedRequest = new PagedFilterRequest <CharacterFilterDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); Assert.IsNotNull(items.FirstOrDefault(x => x.Name == "I am deleted")); }
public async Task FilterContainsTest() { var filterDto = new CharacterFilterDto { Name = "alex" }; var pagedRequest = new PagedFilterRequest <CharacterFilterDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var hasAlex = items.Any(x => x.Name == "Alex"); Assert.IsTrue(hasAlex); }
public async Task GetByForeignKey() { var filterDto = new CharacterFilterDto { UniverseId = 1 }; var pagedRequest = new PagedFilterRequest <CharacterFilterDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var hasMiddleEarthCharacters = items.Count == 2; Assert.IsTrue(hasMiddleEarthCharacters); }
public async Task GetByEnumTest() { var filterDto = new CharacterFilterDto { Type = CharacterType.Mage }; var pagedRequest = new PagedFilterRequest <CharacterFilterDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var gendalf = items.FirstOrDefault(x => x.Name == "Gendalf"); Assert.IsNotNull(gendalf); }
public async Task FilterDatetimeTest() { var filterDto = new CharacterFilterDto { CreateDate = new DateTime(2010, 10, 5) }; var pagedRequest = new PagedFilterRequest <CharacterFilterDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var alex = items.FirstOrDefault(x => x.Name == "Alex"); Assert.IsNotNull(alex); }
public async Task FilterDateTimeIntervalTest() { var filterDto = new CharacterFilterDto { CreateDateFrom = new DateTime(2008, 10, 15), CreateDateTo = DateTime.Now.AddYears(-2) }; var pagedRequest = new PagedFilterRequest <CharacterFilterDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var hasDianaAlex = items.Any(x => x.Name == "Alex" || x.Name == "Diana"); Assert.IsTrue(hasDianaAlex); }
/// <summary> /// Returns list of existing characters /// </summary> public async Task <CharacterFilterResultDto> FilterAsync(PagedFilterRequest <CharacterFilterDto> filterRequest) { var filteredQuery = _context.Characters.Filter(filterRequest); var totalCount = await filteredQuery.CountAsync(); var items = await filteredQuery .Skip((filterRequest.PageNumber - 1) *filterRequest.PageSize) .Take(filterRequest.PageSize) .ToListAsync(); var totalPages = Math.Ceiling((decimal)totalCount / filterRequest.PageSize); return(new CharacterFilterResultDto { TotalCount = totalCount, TotalPages = totalPages, HasPreviousPage = filterRequest.PageNumber > 1, HasNextPage = filterRequest.PageNumber < totalPages, Items = items }); }
public async Task SortTest() { var filterDto = new CharacterFilterDto { }; var pagedRequest = new PagedFilterRequest <CharacterFilterDto> { FilterDto = filterDto, Sortings = new Sorting[] { new Sorting { Name = "Name", Direction = Filtr.Enums.SortingDirection.Desc, } } }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); }
public async Task FilterContainsListTest() { var filterDto = new CharacterFilterListDto { Names = new List <string> { "diana", "joHn" } }; var pagedRequest = new PagedFilterRequest <CharacterFilterListDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var hasDianaJohn = items.Any(x => x.Name == "Diana" || x.Name == "John"); Assert.IsTrue(hasDianaJohn); }
public async Task FilterIdListTest() { var filterDto = new CharacterFilterListDto { Ids = new List <long?> { 2, 3 } }; var pagedRequest = new PagedFilterRequest <CharacterFilterListDto> { FilterDto = filterDto }; var result = _context.Characters.Filter(pagedRequest); var items = await result.ToListAsync(); var hasDianaJohn = items.Any(x => x.Name == "Diana" || x.Name == "John"); Assert.IsTrue(hasDianaJohn); }
public async Task <IActionResult> FilterCharacters([FromBody] PagedFilterRequest <CharacterFilterDto> filterRequest) { var result = await _characterService.FilterAsync(filterRequest); return(Ok(result)); }
/// <summary> /// Apples filters to the query based on requested data /// </summary> /// <typeparam name="T">Type of filtred objects</typeparam> /// <typeparam name="TFilterDto">Type of dto get data from</typeparam> /// <param name="query">Query to apply filters to</param> /// <param name="filterRequest">Filter request containing data about filtering</param> /// <returns></returns> public static IQueryable <T> Filter <T, TFilterDto>(this IQueryable <T> query, PagedFilterRequest <TFilterDto> filterRequest) where TFilterDto : class { if (filterRequest == null || filterRequest.FilterDto == null) { throw new FilterRequestException("Data for filtering is invalid"); } // prepare data for filtering var filterData = new FilterData { Filters = GetFiltersFromDto(filterRequest.FilterDto), Sortings = GetSortingsFromRequest <TFilterDto>(filterRequest.Sortings) }; return(Filtrator.Filter <T>(query, filterData)); }