Example #1
0
        public void ReturnsProducts_OrderedByRecommended_WithDefinedPopularity()
        {
            // Arrange
            var productPopularityA = new ProductPopularity()
            {
                ProductName = productAName, PopularityRank = 2
            };
            var productPopularityB = new ProductPopularity()
            {
                ProductName = productBName, PopularityRank = 0
            };
            var productPopularityC = new ProductPopularity()
            {
                ProductName = productCName, PopularityRank = 1
            };

            _mockedProductPopularityService.Setup(s => s.GetProductPopularityAsync())
            .ReturnsAsync(new List <ProductPopularity>()
            {
                productPopularityA, productPopularityB, productPopularityC
            });

            // Act
            var result = _target.OrderProductsAsync(_products, Domain.Enums.SortOption.Recommended).Result.ToList();

            // Assert
            Assert.IsTrue(result.First().Name == productBName);
            Assert.IsTrue(result.Last().Name == productAName);
        }
        public List <ProductPopularity> GetProductPopularity()
        {
            slytherBangConnection.Open();
            try
            {
                var getProductsCommand = slytherBangConnection.CreateCommand();
                getProductsCommand.CommandText =
                    @"SELECT distinct Top 10
                  ProductName,
                  COUNT(distinct CartDetailId) as Orders,
                  COUNT(distinct CustomerId) as Customers,
                  CONVERT(decimal(10,2), SUM(Qty * ProductPrice)) as Revenue
                FROM SlytherBang.dbo.Cart c
                JOIN SlytherBang.dbo.CartDetail cc
                  ON c.CartId = cc.CartId
                JOIN SlytherBang.dbo.Product p
                  ON cc.ProductId = p.ProductId
                GROUP BY ProductName
                ORDER BY COUNT(distinct CartDetailId) desc; ";

                var listedPopularity = new List <ProductPopularity>();
                var reader           = getProductsCommand.ExecuteReader();
                while (reader.Read())
                {
                    var product = new ProductPopularity
                    {
                        ProductName = reader.GetString(0),
                        Orders      = reader.GetInt32(1),
                        Customers   = reader.GetInt32(2),
                        Revenue     = reader.GetDecimal(3)
                    };
                    listedPopularity.Add(product);
                }
                return(listedPopularity);
            }
            catch (SqlException ex)
            {
                Debug.WriteLine(ex.Message);
                Debug.WriteLine(ex.StackTrace);
            }
            finally
            {
                slytherBangConnection.Close();
            }
            return(new List <ProductPopularity>());
        }