コード例 #1
0
        public void TestScenario_A()
        {
            //Arrange
            _SKUCart.AddProductToCart('A');
            _SKUCart.AddProductToCart('B');
            _SKUCart.AddProductToCart('C');

            //Act

            var result = _orderCalculator.Calculate(_SKUCart);

            //Assert

            Assert.AreEqual(100, result);
        }
コード例 #2
0
        public void CalculateDiscountTest()
        {
            // Arrange
            Customer customer = new Customer(1, "Sulecki");
            Order    order    = Order.Create(customer);

            order.OrderDate = DateTime.Parse("2018-09-14");

            Product product = new Product("Mouse", 100, "Red");
            Service service = new Service("Developing", 100);

            order.AddDetail(new OrderDetail(product, 10));
            order.AddDetail(new OrderDetail(service, 4));

            IOrderCalculator calculator = new OrderCalculator();

            // Acts
            decimal result = calculator.Calculate(order);

            // Asserts
            Assert.True(result > 0);
            Assert.Equal(1260, result);

            // Polecam: Install-Package FluentAssertions
        }
コード例 #3
0
ファイル: HotcakesApplication.cs プロジェクト: wncoder/core
        public bool CalculateOrderWithoutRepricing(Order o)
        {
            var calc = new OrderCalculator(this);

            calc.SkipRepricing = true;
            return(calc.Calculate(o));
        }
コード例 #4
0
        public void グレードがいいやつはボーナスがつく()
        {
            var order = new Order
                        (
                name: OrderName.Car,
                100,
                new[]
            {
                new OrderElement(Type.Wheel, 4),
                new OrderElement(Type.CarBody, 1),
            }
                        );
            var checker = new OrderCalculator(new[] { order });

            var parts = new[]
            {
                new Part(Type.Wheel, Quality.Normal, 0),
                new Part(Type.Wheel, Quality.High, 0),
                new Part(Type.Wheel, Quality.High, 0),
                new Part(Type.Wheel, Quality.Normal, 0),
                new Part(Type.CarBody, Quality.Normal, 0),
            };

            // Car指定
            var shipment1 = new ShippingParts(parts, OrderName.Car);
            var result    = checker.Calculate(shipment1);

            // 倍率で点数が上がるはず
            Assert.AreEqual((int)(100 * 1.2f * 1.2f), (int)result);
        }
コード例 #5
0
        public void OrderCalculatorTest()
        {
            // Arrange
            AddArticlesTest();

            Customer customer = new Customer();

            Article product1 = articlesService.Get(1);

            Order order = new Order("ZAM 1/2018", customer);

            order.OrderDate = DateTime.Parse("2018-04-13");
            order.AddArticle(product1, 2);

            IStrategy strategy = new HappyDayOfWeekStrategy(DayOfWeek.Friday, 0.3m);

            OrderCalculator calculator = new OrderCalculator(strategy);

            // Acts
            calculator.Calculate(order);

            // Assets
            Assert.AreEqual(6, order.DiscountAmount);
            Assert.IsTrue(order.HasDiscount);
        }
コード例 #6
0
        // Normally would split out into a separate project
        public void Returns_Correct_Value_Implementation()
        {
            var sut = new OrderCalculator();

            var result = sut.Calculate(new string[] { "Steak Sandwich" });

            Assert.Equal((decimal)5.4, result);
        }
コード例 #7
0
        public void OrderNameを指定してコンボボーナスが得られる()
        {
            var order = new Order
                        (
                name: OrderName.Car,
                100,
                new[]
            {
                new OrderElement(Type.Wheel, 4),
                new OrderElement(Type.CarBody, 1),
            }
                        );
            var checker = new OrderCalculator(new[] { order });

            var parts = new[]
            {
                new Part(Type.Wheel, Quality.Normal, 0),
                new Part(Type.Wheel, Quality.Normal, 0),
                new Part(Type.Wheel, Quality.Normal, 0),
                new Part(Type.Wheel, Quality.Normal, 0),
                new Part(Type.CarBody, Quality.Normal, 0),
            };

            // Car指定
            var shipment1 = new ShippingParts(parts, OrderName.Car);
            var result    = checker.Calculate(shipment1);

            // Car指定なのでCarのコンボボーナスが得られる
            Assert.AreEqual(100, result);

            // Car指定ではない
            var shipment2 = new ShippingParts(parts, OrderName.Doll);
            var result2   = checker.Calculate(shipment2);

            // Car指定ではないのコンボボーナスは得られない
            Assert.AreEqual(0, result2);
        }
コード例 #8
0
        public void Returns_Correct_Value()
        {
            Mock <IItemCalculator> netMoq = new Mock <IItemCalculator>();

            netMoq.Setup(m => m.Calculate(It.IsAny <string[]>())).Returns((decimal)123.45);

            Mock <ISurchargeCalculator> surchargeMoq = new Mock <ISurchargeCalculator>();

            surchargeMoq.Setup(m => m.Calculate(It.IsAny <decimal>(), It.IsAny <string[]>())).Returns((decimal)10);

            var sut = new OrderCalculator(netMoq.Object, surchargeMoq.Object);

            var result = sut.Calculate(new string[] { "Test", "Test" });

            Assert.Equal((decimal)133.45, result);
        }
コード例 #9
0
        public void CalculateOrderTest()
        {
            // Arrange
            var order = new Order
            {
                Price     = 40,
                Quantity  = 2,
                OrderDate = DateTime.Parse("2018-03-06")
            };

            // Act
            var orderCalculator = new OrderCalculator(new NoDiscountStrategy());

            var amount = orderCalculator.Calculate(order);

            // Assert
            Assert.AreEqual(80, amount);
        }
コード例 #10
0
    private decimal GetTotalWithoutRecurring(CheckoutDetails checkout)
    {
        OrderCalculator orderCalculator = new OrderCalculator();

        IList <CartItemGroup> cartItemGroups = StoreContext.ShoppingCart.SeparateCartItemGroups();

        decimal total = 0;

        foreach (CartItemGroup cartItemGroup in cartItemGroups)
        {
            if (!cartItemGroup.IsRecurring)
            {
                total += orderCalculator.Calculate(
                    checkout, cartItemGroup, StoreContext.Customer, 0)
                         .Add(CartItemPromotion.CalculatePromotionShippingAndTax(
                                  checkout,
                                  cartItemGroup,
                                  StoreContext.Customer)).Total;
            }
        }

        return(total);
    }
コード例 #11
0
        public void CalculateTest()
        {
            // Arrange
            var order = new Order
            {
                Price     = 100,
                Quantity  = 2,
                OrderDate = DateTime.Parse("2018-03-06 14:00")
            };



            // Act
            IDiscountValidator  validator  = new HappyHourDiscountValidator(TimeSpan.FromHours(13), TimeSpan.FromHours(16));
            IDiscountCalculator calculator = new FixedDiscountCalculator(20);

            var orderCalculator = new OrderCalculator(validator, calculator);

            var amount = orderCalculator.Calculate(order);

            // Assert
            Assert.AreEqual(180, amount);
        }
コード例 #12
0
 private void CalculateScore(ShippingParts shippingParts)
 {
     _totalScore.Value += _orderCalculator.Calculate(shippingParts);
 }
コード例 #13
0
ファイル: HotcakesApplication.cs プロジェクト: wncoder/core
        public bool CalculateOrder(Order o)
        {
            var calc = new OrderCalculator(this);

            return(calc.Calculate(o));
        }