public async Task GetProductsPagedSuccessTest()
        {
            // Arrange
            var productList = new List <ProductDto> {
                new ProductDto(), new ProductDto(), new ProductDto(), new ProductDto(), new ProductDto(), new ProductDto()
            };
            var responseList = new GenericCollectionResponse <IList <ProductDto> >()
            {
                Result       = productList,
                TotalRecords = 6
            };

            _productServiceMock.Setup(x => x.GetPaged(It.IsAny <ProductPagedDto>())).Returns(async() => await Task.FromResult(responseList));

            var controller = new ProductController(_loggerMock.Object, _mapperMock.Object, _productServiceMock.Object);

            // Act
            var response = await controller.GetProductsPaged(new GetProductsPagedRequest());

            // Assert
            response.Result.Should().NotBeNull();
            response.GetType().Should().Be(typeof(ApiResponse));

            var result = response.Result as GenericCollectionResponse <IList <ProductDto> >;

            result.Result.Should().NotBeNull().And.HaveCount(6);
            result.TotalRecords.Should().Be(6);
        }
        public async Task <GenericCollectionResponse <IList <ProductDto> > > GetPaged(ProductPagedDto dto)
        {
            var response = new GenericCollectionResponse <IList <ProductDto> >();

            Func <IQueryable <Product>, IOrderedQueryable <Product> > order = product => product.OrderBy(x => x.Name);

            if (!string.IsNullOrEmpty(dto.SortParameter))
            {
                order = GetProductOrder(dto.SortParameter, dto.SortOrder);
            }

            var filter = GetProductFilter(dto);

            var totalRecords = await _unitOfWork.ProductRepository.GetCountAsync(filter);

            response.TotalRecords = totalRecords;

            var products = await _unitOfWork.ProductRepository.GetAsync(filter, order, "Categories,Size",
                                                                        dto.StartRowIndex, dto.MaximumRows);

            var result = _mapper.Map <IList <Product>, IList <ProductDto> >(products.ToList());

            response.Result = result;

            return(await Task.FromResult(response));
        }