Exemple #1
0
        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);
        }
Exemple #2
0
        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"));
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        /// <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
            });
        }
Exemple #9
0
        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();
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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));
        }