public void ApplySortByDescendingTest(List <Product> products)
        {
            var productSortManager = new ProductSortManager();

            productSortManager.RegisterPlainSorter("descending", (x, y) => y.Name.CompareTo(x.Name));

            productSortManager.ApplySort(products, "Descending");
            Assert.Equal("Test Product F", products[0].Name);
            Assert.Equal("Test Product D", products[1].Name);
            Assert.Equal("Test Product C", products[2].Name);
            Assert.Equal("Test Product B", products[3].Name);
            Assert.Equal("Test Product A", products[4].Name);
        }
        public void ApplySortByHighTest(List <Product> products)
        {
            var productSortManager = new ProductSortManager();

            productSortManager.RegisterPlainSorter("high", (x, y) => y.Price.CompareTo(x.Price));

            productSortManager.ApplySort(products, "High");
            Assert.Equal(999999999999m, products[0].Price);
            Assert.Equal(101.99m, products[1].Price);
            Assert.Equal(99.99m, products[2].Price);
            Assert.Equal(10.99m, products[3].Price);
            Assert.Equal(5m, products[4].Price);
        }
        public void ApplySortByRecommendedTest(List <Product> products)
        {
            var cache = new ProductPopularityCache();

            cache.Refresh(new Dictionary <string, decimal>()
            {
                { "Test Product A", 1.0m },
                { "Test Product B", 2.0m },
                { "Test Product C", 3.0m },
                { "Test Product D", 4.0m },
                { "Test Product F", 5.0m },
            });
            var popularityService  = new ProductPopularityService(_configuration, cache);
            var productSortManager = new ProductSortManager();

            productSortManager.RegisterComplexSorter("recommended", new ProductRecommendedSort(popularityService));

            productSortManager.ApplySort(products, "Recommended");
            Assert.Equal("Test Product F", products[0].Name);
            Assert.Equal("Test Product D", products[1].Name);
            Assert.Equal("Test Product C", products[2].Name);
            Assert.Equal("Test Product B", products[3].Name);
            Assert.Equal("Test Product A", products[4].Name);
        }