public async Task GetAllProductsWithFiltersAndPaging() { var options = new DbContextOptionsBuilder <WHMSDbContext>().UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options; using var context = new WHMSDbContext(options); for (int i = 0; i < 100; i++) { var product = new Product { ProductName = "Test Product", ShortDescription = "Test Product", WebsitePrice = 23, BrandId = i % 2, }; context.Products.Add(product); } await context.SaveChangesAsync(); var mockInventoryService = new Mock <IInventoryService>(); var service = new ProductsService(context, mockInventoryService.Object); var filter = new ProductFilterInputModel { BrandId = 1 }; var products = service.GetAllProducts <ProductDetailsViewModel>(filter); Assert.Equal(GlobalConstants.PageSize, products.Count()); foreach (var item in products) { Assert.Equal(1, item.BrandId); } }
public IActionResult ManageProducts(ProductFilterInputModel input) { var model = new ManageProductsViewModel() { Page = input.Page, Products = this.productService.GetAllProducts <ProductsViewModel>(input), PagesCount = (int)Math.Ceiling(this.productService.GetAllProductsCount(input) / (double)GlobalConstants.PageSize), Filters = input, }; return(this.View(model)); }
public IEnumerable <T> GetAllProducts <T>(ProductFilterInputModel input) { var filteredList = this.FilterProducts(input); var products = filteredList .Skip((input.Page - 1) * GlobalConstants.PageSize) .Take(GlobalConstants.PageSize) .To <T>() .ToList(); return(products); }
private IQueryable <Product> FilterProducts(ProductFilterInputModel input) { var filteredList = this.context.Products.Where(x => x.IsDeleted == false); filteredList = input.Sorting switch { ProductsSorting.Id => filteredList.OrderBy(p => p.Id), ProductsSorting.IdDesc => filteredList.OrderByDescending(p => p.Id), ProductsSorting.Alphabetically => filteredList.OrderBy(p => p.SKU), ProductsSorting.AlphabeticallyDesc => filteredList.OrderByDescending(p => p.SKU), ProductsSorting.Price => filteredList.OrderBy(p => p.WebsitePrice), ProductsSorting.PriceDesc => filteredList.OrderByDescending(p => p.WebsitePrice), _ => filteredList, }; if (!string.IsNullOrEmpty(input.Keyword)) { filteredList = filteredList.Where(x => x.SKU.Contains(input.Keyword) || x.ProductName.Contains(input.Keyword)); } if (input.BrandId != null) { filteredList = filteredList.Where(x => x.BrandId == input.BrandId); } if (input.ManufacturerId != null) { filteredList = filteredList.Where(x => x.ManufacturerId == input.ManufacturerId); } if (input.ConditionId != null) { filteredList = filteredList.Where(x => x.ConditionId == input.ConditionId); } return(filteredList); }
public int GetAllProductsCount(ProductFilterInputModel input) { var filteredProducts = this.FilterProducts(input); return(filteredProducts.Count()); }