コード例 #1
0
        public void WhenActiveCartWithOneItemAndRemoveItemExpectEmptyCart()
        {
            var activeCart = new CartStateActive(new[] { Product.ProductY });

            var newState = activeCart.Remove(Product.ProductY);

            var isEmptyState = newState.Func(cartStateEmpty => true, cartStateActive => false, cartStatePaid => false);
            Assert.IsTrue(isEmptyState);
        }
コード例 #2
0
        public void WhenActiveCartWithOneItemAndAddItemExpectActiveCartWithTwoItems()
        {
            var activeCart1 = new CartStateActive(new[] { Product.ProductY });

            var newState = activeCart1.Add(Product.ProductX);

            var isActiveState = newState.Func(cartStateEmpty => false, cartStateActive => true, cartStatePaid => false);
            Assert.IsTrue(isActiveState);

            var itemCount = newState.Func(cartStateEmpty => -1, cartStateActive => cartStateActive.Items.Count(), cartStatePaid => -1);
            Assert.That(itemCount, Is.EqualTo(2));
        }
コード例 #3
0
        public void WhenActiveCartWithOneItemAndAddItemExpectActiveCartWithTwoItems()
        {
            // arrange
            var activeCart1 = new CartStateActive(new[] { Product.ProductY });

            // act
            var newState = activeCart1.Add(Product.ProductX);

            // assert
            var activeState = newState as CartStateActive; //CAST!
            if (activeState != null)
            {
                var itemCount = activeState.Items.Count();
                Assert.That(itemCount, Is.EqualTo(2));
            }
            else
            {
                Assert.Fail("Expect CartStateActive");
            }
        }
コード例 #4
0
 public ICartState Add(Product item)
 {
     var newItems = new[] { item };
     var newState = new CartStateActive(newItems);
     return newState;
 }
コード例 #5
0
 public ICartState VisitActive(CartStateActive active)
 {
     active.PayForCart(amountToPay); return active;
 }
コード例 #6
0
 public ICartState VisitActive(CartStateActive active)
 {
     active.AddItem(productToAdd); return active;
 }
コード例 #7
0
        public void WhenActiveCartWithTwoItemsAndPayExpectPaidCart()
        {
            var activeCart = new CartStateActive(new[] { Product.ProductX, Product.ProductY });

            const decimal paidAmount = 12.34m;
            var newState = activeCart.Pay(paidAmount);

            var isPaidState = newState.Func(cartStateEmpty => false, cartStateActive => false, cartStatePaid => true);
            Assert.IsTrue(isPaidState);

            var itemCount = newState.Func(cartStateEmpty => -1, cartStateActive => -1, cartStatePaid => cartStatePaid.Items.Count());
            Assert.That(itemCount, Is.EqualTo(2));

            var actualPaidAmount = newState.Func(cartStateEmpty => -1, cartStateActive => -1, cartStatePaid => cartStatePaid.Amount);
            Assert.That(actualPaidAmount, Is.EqualTo(paidAmount));
        }
コード例 #8
0
        public void WhenActiveCartWithOneItemAndRemoveItemExpectEmptyCart()
        {
            // arrange
            var activeCart = new CartStateActive(new[] { Product.ProductY });

            // act
            var newState = activeCart.Remove(Product.ProductY);

            // assert
            var emptyState = newState as CartStateEmpty;    //CAST!
            if (emptyState == null)
            {
                Assert.Fail("Expect CartStateEmpty");
            }
        }
コード例 #9
0
        public void WhenActiveCartWithTwoItemsAndPayExpectPaidCart()
        {
            var activeCart = new CartStateActive(new[] { Product.ProductX, Product.ProductY });

            const decimal paidAmount = 12.34m;
            var newState = activeCart.Pay(paidAmount);

            // assert
            var paidState = newState as CartStatePaid; //CAST!
            if (paidState != null)
            {
                var itemCount = paidState.Items.Count();
                Assert.That(itemCount, Is.EqualTo(2));

                var actualPaidAmount = paidState.Amount;
                Assert.That(actualPaidAmount, Is.EqualTo(paidAmount));
            }
            else
            {
                Assert.Fail("Expect CartStateActive");
            }
        }