public void BuyEmptyCartTest()
        {
            userBuyerMocker.Setup(x => x.CheckoutAll()).Returns(new OrderItem[] {});
            orderDbMocker.Setup(x => x.RandomOrderID()).Returns(100010);
            slave = new PurchaseEverythingSlave(userBuyerMocker.Object, storeSyncherMock.Object, orderDbMocker.Object, publisherMock.Object, policyMock.Object);
            Order order = slave.BuyEverythingFromCart(null, "Big Smoke", "Grove Street", "12345678");

            Assert.IsNull(order);
            Assert.AreEqual((int)SupplyStatus.InvalidOrder, slave.Answer.Status);
        }
        public void BuySeveralItemTest()
        {
            userBuyerMocker.Setup(x => x.CheckoutAll()).Returns(new [] { item1, item2 });
            orderDbMocker.Setup(x => x.RandomOrderID()).Returns(100010);
            slave = new PurchaseEverythingSlave(userBuyerMocker.Object, storeSyncherMock.Object, orderDbMocker.Object, publisherMock.Object, policyMock.Object);
            Order order = slave.BuyEverythingFromCart(null, "Big Smoke", "Grove Street", "12345678");

            Assert.IsNotNull(order);
            Assert.AreEqual(2, order.GetItems().Count);
            Assert.IsNotNull(order.GetOrderItem("#9 Large", "Cluckin Bell"));
            Assert.IsNotNull(order.GetOrderItem("#9", "Cluckin Bell"));
            Assert.AreEqual(17.00, order.GetPrice());
        }
        public void BuyFailedDiscountTest()
        {
            userBuyerMocker.Setup(x => x.CheckoutAll()).Returns(new OrderItem[] { item1 });
            storeSyncherMock.Setup(x => x.GetPriceFromCoupon
                                       (It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <string>()))
            .Throws(new OrderException(OrderStatus.InvalidCoupon, "some message"));
            orderDbMocker.Setup(x => x.RandomOrderID()).Returns(100010);
            slave = new PurchaseEverythingSlave(userBuyerMocker.Object, storeSyncherMock.Object, orderDbMocker.Object, publisherMock.Object, policyMock.Object);
            Order order = slave.BuyEverythingFromCart(new string[] { "D1" }, "Big Smoke", "Grove Street", "12345678");

            Assert.IsNull(order);
            Assert.AreEqual((int)OrderStatus.InvalidCoupon, slave.Answer.Status);
        }
        public void BuyAllDiscountTest()
        {
            userBuyerMocker.Setup(x => x.CheckoutAll()).Returns(new OrderItem[] { item1, item2 });
            storeSyncherMock.Setup(x => x.GetPriceFromCoupon
                                       (It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <string>())).Returns(3.0);
            orderDbMocker.Setup(x => x.RandomOrderID()).Returns(100010);
            slave = new PurchaseEverythingSlave(userBuyerMocker.Object, storeSyncherMock.Object, orderDbMocker.Object, publisherMock.Object, policyMock.Object);
            Order order = slave.BuyEverythingFromCart(new string[] { "D1", "D2" }, "Big Smoke", "Grove Street", "12345678");

            Assert.IsNotNull(order);
            Assert.AreEqual(2, order.GetItems().Count);
            Assert.IsNotNull(order.GetOrderItem("#9 Large", "Cluckin Bell"));
            Assert.IsNotNull(order.GetOrderItem("#9", "Cluckin Bell"));
            Assert.AreEqual(9.00, order.GetPrice());
        }
        public void BuyOneItemTest()
        {
            userBuyerMocker.Setup(x => x.CheckoutAll()).Returns(new[] { item2 });
            orderDbMocker.Setup(x => x.RandomOrderID()).Returns(100010);
            slave = new PurchaseEverythingSlave(userBuyerMocker.Object, storeSyncherMock.Object, orderDbMocker.Object, publisherMock.Object, policyMock.Object);
            Order order = slave.BuyEverythingFromCart(null, "Big Smoke", "Grove Street", "12345678");

            Assert.IsNotNull(order);
            Assert.AreEqual(1, order.GetItems().Count);
            Assert.IsNotNull(order.GetOrderItem("#9 Large", "Cluckin Bell"));
            OrderItem actual = order.GetOrderItem("#9 Large", "Cluckin Bell");

            Assert.AreEqual(item2.Name, actual.Name);
            Assert.AreEqual(item2.Price, actual.Price);
            Assert.AreEqual(item2.Quantity, actual.Quantity);
            Assert.AreEqual(item2.Store, actual.Store);
        }