public virtual void runShouldNotifyCustomer()
        {
            Membership membershipSilver = new Membership("membership-silver", null);
            Membership membershipGold   = new Membership("membership-gold", membershipSilver);

            LineItem[] lineItems = new LineItem[] { new LineItem(membershipGold.Sku, "gold", new ProductCategory[] { ProductCategory.Membership }) };
            //Customer customer = spy(typeof(Customer));
            var customer = new Mock <Customer>().Object;
            //when(customer.hasMembership(membershipSilver)).thenReturn(true);

            Order   order   = new Order(customer, lineItems, null);
            Payment payment = new Payment(order);

            MembershipRepository repo = new Mock <MembershipRepository>().Object;
            //when(repo.findBySku(membershipGold.Sku)).thenReturn(membershipGold);

            NotificationService notificationService = new Mock <NotificationService>().Object;

            PaymentHandler sut = new MembershipUpgradeHandler(repo, notificationService);

            sut.run(payment);

            notificationService.notify(customer, membershipGold);
            //verify(notificationService, times(1)).notify(customer, membershipGold);
        }
        public virtual void runShouldNotGenerateForShippingWhenNoValidItemsAvailable()
        {
            LineItem[] lineItems = new LineItem[]
            {
                new LineItem("item1", "item1", new ProductCategory[] { ProductCategory.Membership }),
                new LineItem("item2", "item2", new ProductCategory[] { ProductCategory.Virtual })
            };

            var customer = new Mock <Customer>().Object;
            //customer.Setup(x => x..hasMembership(Membership)).Returns(true);

            Order   order   = new Order(customer, lineItems, null);
            Payment payment = new Payment(order);

            PackingSlipService packingSlipService = new  Mock <PackingSlipService>().Object;
            ShippingService    shippingService    = new Mock <ShippingService>().Object;
            RoyaltyService     royaltyService     = new Mock <RoyaltyService>().Object;

            PaymentHandler sut = new PackingSlipHandler(shippingService, royaltyService, packingSlipService);

            sut.run(payment);

            var slip = shippingService.generatePackingSlip(order);

            Assert.AreEqual(slip, null);
        }
        public virtual void runShouldNotGenerateAgentCommissionIfItemsInvalid()
        {
            LineItem[] lineItems = new LineItem[] { new LineItem("item", "item", new ProductCategory[] { ProductCategory.Membership, ProductCategory.Virtual }) };
            var        customer  = new Mock <Customer>().Object;
            Agent      agent     = new Mock <Agent>().Object;
            Order      order     = new Order(customer, lineItems, agent);
            Payment    payment   = new Payment(order);

            PaymentHandler sut = new AgentCommissionHandler();

            sut.run(payment);

            agent.generateCommission(order);
        }
        public virtual void runShouldDoNothingIfNoMembershipsInOrder()
        {
            LineItem[] lineItems = new LineItem[] { new LineItem("item1", "item1", new ProductCategory[] { ProductCategory.Physical }) };
            var        customer  = new Mock <Customer>().Object;
            Order      order     = new Order(customer, lineItems, null);
            Payment    payment   = new Payment(order);

            MembershipRepository service             = new Mock <MembershipRepository>().Object;
            NotificationService  notificationService = new Mock <NotificationService>().Object;
            Membership           membership          = new Membership("item1", null);
            PaymentHandler       sut = new MembershipActivateHandler(service, notificationService);

            sut.run(payment);

            customer.addMembership(membership, notificationService);
        }
        public virtual void runShouldGenerateAgentCommissionIfPhysicalItemInOrder()
        {
            LineItem[] lineItems = new LineItem[]
            {
                new LineItem("item", "item", new ProductCategory[] { ProductCategory.Physical }),
                new LineItem("membership", "membership", new ProductCategory[] { ProductCategory.Membership })
            };
            var     customer = new Mock <Customer>().Object;
            Agent   agent    = new Mock <Agent>().Object;
            Order   order    = new Order(customer, lineItems, agent);
            Payment payment  = new Payment(order);

            PaymentHandler sut = new AgentCommissionHandler();

            sut.run(payment);

            //verify(agent, times(1)).generateCommission(any());
            agent.generateCommission(order);
        }
        public virtual void runShouldNotifyCustomer()
        {
            LineItem[] lineItems = new LineItem[] { new LineItem("item1", "item1", new ProductCategory[] { ProductCategory.Membership }) };
            var        customer  = new Mock <Customer>().Object;
            Order      order     = new Order(customer, lineItems, null);
            Payment    payment   = new Payment(order);

            MembershipRepository repo       = new Mock <MembershipRepository>().Object;
            Membership           membership = new Membership("item1", null);
            //when(repo.findBySku("item1")).thenReturn(membership);

            NotificationService notificationService = new Mock <NotificationService>().Object;

            PaymentHandler sut = new MembershipActivateHandler(repo, notificationService);

            sut.run(payment);

            notificationService.notify(customer, membership);
            //verify(notificationService, times(1)).notify(customer, membership);
        }
        public virtual void runShouldGeneratePackingSlip()
        {
            LineItem[] lineItems = new LineItem[] { new LineItem("item1", "item1", new ProductCategory[] { ProductCategory.Physical }) };
            var        customer  = new Mock <Customer>().Object;
            Order      order     = new Order(customer, lineItems, null);
            Payment    payment   = new Payment(order);

            PackingSlipService packingSlipService = new Mock <PackingSlipService>().Object;
            ShippingService    shippingService    = new Mock <ShippingService>().Object;
            RoyaltyService     royaltyService     = new Mock <RoyaltyService>().Object;

            PaymentHandler sut = new PackingSlipHandler(shippingService, royaltyService, packingSlipService);

            sut.run(payment);

            //verify(packingSlipService, times(1)).generate(order);
            var pack = packingSlipService.generate(order);

            Assert.AreEqual(pack, null);
        }
        public virtual void runShouldAddFirstAidGiftWhenRequested()
        {
            LineItem[] lineItems = new LineItem[] { new LineItem("learning-to-ski", "Learning to Ski", new ProductCategory[] { ProductCategory.Videos }) };
            var        customer  = new Mock <Customer>().Object;
            Order      order     = new Order(customer, lineItems, null);
            Payment    payment   = new Payment(order);

            PackingSlipService packingSlipService = new Mock <PackingSlipService>().Object;
            ShippingService    shippingService    = new Mock <ShippingService>().Object;
            RoyaltyService     royaltyService     = new Mock <RoyaltyService>().Object;

            PaymentHandler sut = new PackingSlipHandler(shippingService, royaltyService, packingSlipService);

            sut.run(payment);

            string[] gifts = order.GiftSkus;
            Assert.IsNotNull(gifts);
            Assert.IsTrue(gifts.Length == 1);
            //Assert.IsTrue(Arrays.binarySearch(gifts, "first-aid") == 0);
        }
        public virtual void runShouldGenerateAgentCommissionOnceIfMultipleBooksInOrder()
        {
            LineItem[] lineItems = new LineItem[]
            {
                new LineItem("book1", "book1", new ProductCategory[] { ProductCategory.Books }),
                new LineItem("book2", "book2", new ProductCategory[] { ProductCategory.Books }),
                new LineItem("book3", "book3", new ProductCategory[] { ProductCategory.Books })
            };
            var     customer = new Mock <Customer>().Object;
            Agent   agent    = new Mock <Agent>().Object;
            Order   order    = new Order(customer, lineItems, agent);
            Payment payment  = new Payment(order);

            PaymentHandler sut = new AgentCommissionHandler();

            sut.run(payment);

            //verify(agent, times(1)).generateCommission(any());
            agent.generateCommission(order);
        }
Ejemplo n.º 10
0
        public virtual void run(Payment payment)
        {
            Order order = payment.Order;

            LineItem[] lineItems = order.LineItems;
            Customer   customer  = order.Customer;

            foreach (LineItem lineItem in lineItems)
            {
                if (!lineItem.hasCategory(ProductCategory.Membership))
                {
                    continue;
                }

                Membership membership = _service.findBySku(lineItem.Sku);
                if (membership != null)
                {
                    customer.addMembership(membership, _notificationService);
                }
            }
        }
        public virtual void run(Payment payment)
        {
            Order    order    = payment.Order;
            Customer customer = order.Customer;

            LineItem[] lineItems = order.LineItems;
            foreach (LineItem lineItem in lineItems)
            {
                if (!lineItem.hasCategory(ProductCategory.Membership))
                {
                    continue;
                }

                Membership membership    = _repo.findBySku(lineItem.Sku);
                Membership previousLevel = membership.PreviousLevel;
                if (customer.hasMembership(previousLevel))
                {
                    customer.addMembership(membership, _notificationService);
                }
            }
        }
        public virtual void run(Payment payment)
        {
            Order order = payment.Order;

            LineItem[] lineItems = order.LineItems;

            bool?addCommission = false;

            foreach (LineItem lineItem in lineItems)
            {
                if (lineItem.hasCategory(ProductCategory.Books) || lineItem.hasCategory(ProductCategory.Physical))
                {
                    addCommission = true;
                    break;
                }
            }

            if (addCommission.Value)
            {
                Agent agent = order.Agent;
                agent.generateCommission(order);
            }
        }
        public virtual void run(Payment payment)
        {
            Order order = payment.Order;

            LineItem[] lineItems = order.LineItems;

            bool?generateForShipping = false;
            bool?generateForRoyalty  = false;

            foreach (LineItem lineItem in lineItems)
            {
                if (lineItem.hasCategory(ProductCategory.Physical))
                {
                    generateForShipping = true;
                }
                if (lineItem.hasCategory(ProductCategory.Books))
                {
                    generateForRoyalty = true;
                }

                if (lineItem.Sku == "learning-to-ski")
                {
                    order.addGiftBySku("first-aid");
                }
            }

            _packingSlipService.generate(order);

            if (generateForShipping.Value)
            {
                _shippingService.generatePackingSlip(order);
            }
            if (generateForRoyalty.Value)
            {
                _royaltyService.generatePackingSlip(order);
            }
        }
        public virtual void runShouldGenerateForRoyaltyWhenBooksAvailable()
        {
            LineItem[] lineItems = new LineItem[]
            {
                new LineItem("item1", "item1", new ProductCategory[] { ProductCategory.Books }),
                new LineItem("item2", "item2", new ProductCategory[] { ProductCategory.Membership })
            };
            var     customer = new Mock <Customer>().Object;
            Order   order    = new Order(customer, lineItems, null);
            Payment payment  = new Payment(order);

            PackingSlipService packingSlipService = new Mock <PackingSlipService>().Object;
            ShippingService    shippingService    = new Mock <ShippingService>().Object;
            RoyaltyService     royaltyService     = new Mock <RoyaltyService>().Object;

            PaymentHandler sut = new PackingSlipHandler(shippingService, royaltyService, packingSlipService);

            sut.run(payment);

            //verify(royaltyService, times(1)).generatePackingSlip(order);
            var slip = shippingService.generatePackingSlip(order);

            Assert.AreEqual(slip, null);
        }