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); }
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); }
public Task <int> CountProductsBySpecification(ProductsQuerySpecification specification) { return(CreateGetProductsBySpecificationQuery(specification) .CountAsync()); }