コード例 #1
0
        public Task <List <ProductEntity> > GetProductsBySpecification(ProductsQuerySpecification specification)
        {
            var query = CreateGetProductsBySpecificationQuery(specification);

            if (specification.PageIndexQueried && specification.PageSizeQueried)
            {
                query = AddPaginationFilter(specification.PageIndex, specification.PageSize, query);
            }

            return(query.ToListAsync());
        }
        public async Task WhenOrderByWasNotQueriedThenMapToDefaultSortOptionInSpecification()
        {
            var inputQuery = new GetProductsBySpecificationQuery();
            ProductsQuerySpecification specificationOnRepositoryInput = null;

            _productRepository.Setup(r => r.GetProductsBySpecification(It.IsAny <ProductsQuerySpecification>()))
            .ReturnsAsync(CreateProductList())
            .Callback <ProductsQuerySpecification>(s => specificationOnRepositoryInput = s);

            await _getProductsBySpecificationQueryHandler
            .Handle(inputQuery, default);

            specificationOnRepositoryInput.SortOption.Should().Be(SortOption.Default);
        }
コード例 #3
0
        private IQueryable <ProductEntity> CreateGetProductsBySpecificationQuery(ProductsQuerySpecification specification)
        {
            var query = GetBaseOfGetProductsBySpecificationQuery();

            if (specification.CategoryNameQueried)
            {
                query = AddCategoryNameFilter(specification.CategoryName, query);
            }
            if (specification.SearchPhraseQueried)
            {
                query = AddSearchPhraseFilter(specification.SearchPhrase, query);
            }

            return(AddOrderByFilter(specification.SortOption, query));
        }
        public async Task WhenOrderByWasQueriedThenMapToAccordingSortOptionInSpecification()
        {
            var inputQuery = CreateQueryWithOrderByQueried("exampleAsc");
            ProductsQuerySpecification specificationOnRepositoryInput = null;

            _productRepository.Setup(r => r.GetProductsBySpecification(It.IsAny <ProductsQuerySpecification>()))
            .ReturnsAsync(CreateProductList())
            .Callback <ProductsQuerySpecification>(s => specificationOnRepositoryInput = s);
            _sortOptionNameParser.Setup(p => p.GetSortOptionFor("exampleAsc"))
            .Returns(SortOption.NameAsc);

            await _getProductsBySpecificationQueryHandler
            .Handle(inputQuery, default);

            specificationOnRepositoryInput.SortOption.Should().Be(SortOption.NameAsc);
        }
        public async Task WhenPaginationWasNotQueriedThenQueryProductsWithMaxPageSize()
        {
            var inputQuery = new GetProductsBySpecificationQuery();
            ProductsQuerySpecification specificationOnRepositoryInput = null;

            _productRepository.Setup(r => r.GetProductsBySpecification(It.IsAny <ProductsQuerySpecification>()))
            .Callback <ProductsQuerySpecification>(s => specificationOnRepositoryInput = s)
            .ReturnsAsync(CreateProductList());
            _productRepository.Setup(r => r.CountProductsBySpecification(It.IsAny <ProductsQuerySpecification>()))
            .ReturnsAsync(_maxPageSize);

            var result = await _getProductsBySpecificationQueryHandler
                         .Handle(inputQuery, default);

            specificationOnRepositoryInput.PageIndexQueried.Should().BeTrue();
            specificationOnRepositoryInput.PageIndex.Should().Be(0);
            specificationOnRepositoryInput.PageSize.Should().Be(_maxPageSize);
        }
        public async Task WhenPaginationWasQueriedThenReturnResultWithPaginatedProducts()
        {
            var inputQuery             = CreateQueryWithPaginationQueried(0, 10);
            var returnedFromRepository = CreateProductList();
            ProductsQuerySpecification specificationOnRepositoryInput = null;

            _productRepository.Setup(r => r.GetProductsBySpecification(It.IsAny <ProductsQuerySpecification>()))
            .Callback <ProductsQuerySpecification>(s => specificationOnRepositoryInput = s)
            .ReturnsAsync(returnedFromRepository);
            _productRepository.Setup(r => r.CountProductsBySpecification(It.IsAny <ProductsQuerySpecification>()))
            .ReturnsAsync(20);

            var result = await _getProductsBySpecificationQueryHandler
                         .Handle(inputQuery, default);

            specificationOnRepositoryInput.PageIndexQueried.Should().BeTrue();
            specificationOnRepositoryInput.PageIndex.Should().Be(0);
            specificationOnRepositoryInput.PageSize.Should().Be(10);
            result.TotalCount.Should().Be(20);
            result.PageIndex.Should().Be(0);
            result.PageSize.Should().Be(10);
            result.Items.Should().BeEquivalentTo(returnedFromRepository);
        }
コード例 #7
0
 public Task <int> CountProductsBySpecification(ProductsQuerySpecification specification)
 {
     return(CreateGetProductsBySpecificationQuery(specification)
            .CountAsync());
 }