public void ReturnsPopularProducts_Successfully() { // Arrange SetupShopperHistory(); // Act var result = _target.GetProductPopularityAsync().Result.ToList(); // Assert Assert.IsTrue(result.Single(s => s.ProductName == "testA").PopularityRank == 0); Assert.IsTrue(result.Single(s => s.ProductName == "testB").PopularityRank == 1); Assert.IsTrue(result.Single(s => s.ProductName == "testC").PopularityRank == 2); }
public async Task <IEnumerable <Product> > OrderProductsAsync(IEnumerable <Product> products, SortOption sortOption) { switch (sortOption) { case SortOption.Low: return(products.OrderBy(p => p.Price)); case SortOption.High: return(products.OrderByDescending(p => p.Price)); case SortOption.Ascending: return(products.OrderBy(p => p.Name)); case SortOption.Descending: return(products.OrderByDescending(p => p.Name)); case SortOption.Recommended: var productPopularity = await _popularProductService.GetProductPopularityAsync(); // Fair bit of complexity here // Order by the product's popularity rank // If no rank, use int.MaxValue, then by name (for consistency in results with no popularity) return(products.OrderBy(o => productPopularity.SingleOrDefault(p => p.ProductName == o.Name)?.PopularityRank ?? int.MaxValue).ThenBy(o => o.Name)); case SortOption.None: default: break; } return(products); }