Esempio n. 1
0
        public void UpdateShippingAddresses_WhenBillingAddressIsUsedAsShippingAddress_ShouldSetShippingAddressAsBillingAddress()
        {
            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK);

            cart.GetFirstForm().Shipments.Add(new FakeShipment());

            var viewModel = new CheckoutViewModel
            {
                Shipments = new List <ShipmentViewModel>
                {
                    new ShipmentViewModel {
                        Address = new AddressModel {
                            AddressId = "addressId1"
                        }
                    },
                    new ShipmentViewModel {
                        Address = new AddressModel {
                            AddressId = "addressId2"
                        }
                    }
                },
                UseBillingAddressForShipment = true,
                BillingAddress = new AddressModel
                {
                    AddressId = "addressId3"
                }
            };

            _subject.UpdateShippingAddresses(cart, viewModel);

            Assert.Equal("addressId3", cart.GetFirstShipment().ShippingAddress.Id);
        }
Esempio n. 2
0
        public void CreateAndAddSomePaymentToCart_CartShouldContainOnlyOnePayment()
        {
            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK);

            _orderGroupCalculatorMock.Setup(x => x.GetTotal(It.IsAny <IOrderGroup>())).Returns(() => new Money(1, Currency.USD));

            var paymentMethodMock = new Mock <FakePaymentMethod>("PaymentMethod");

            paymentMethodMock.Setup(x => x.CreatePayment(It.IsAny <decimal>(), It.IsAny <IOrderGroup>()))
            .Returns(() => new FakePayment {
                Amount = 2
            });

            var viewModel = new CheckoutViewModel
            {
                BillingAddress = new AddressModel {
                    AddressId = "billingAddress"
                },
                Payment = paymentMethodMock.Object
            };

            _subject.CreateAndAddPaymentToCart(cart, viewModel);
            _subject.CreateAndAddPaymentToCart(cart, viewModel);
            _subject.CreateAndAddPaymentToCart(cart, viewModel);
            _subject.CreateAndAddPaymentToCart(cart, viewModel);

            Assert.Equal(1, cart.GetFirstForm().Payments.Count);
        }
Esempio n. 3
0
        public void UpdateShippingAddresses_ShouldUpdateAllShippingAddresses()
        {
            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK);

            cart.GetFirstForm().Shipments.Add(new FakeShipment());

            var viewModel = new CheckoutViewModel
            {
                Shipments = new List <ShipmentViewModel>
                {
                    new ShipmentViewModel {
                        Address = new AddressModel {
                            AddressId = "addressId1"
                        }
                    },
                    new ShipmentViewModel {
                        Address = new AddressModel {
                            AddressId = "addressId2"
                        }
                    }
                }
            };

            _subject.UpdateShippingAddresses(cart, viewModel);

            Assert.Equal("addressId1", cart.GetFirstForm().Shipments.First().ShippingAddress.Id);
            Assert.Equal("addressId2", cart.GetFirstForm().Shipments.Last().ShippingAddress.Id);
        }
Esempio n. 4
0
        public void CreateAndAddPaymentToCart_ShouldUpdateCartPayment()
        {
            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK);

            _orderGroupCalculatorMock.Setup(x => x.GetTotal(It.IsAny <IOrderGroup>())).Returns(() => new Money(1, Currency.USD));

            var paymentMethodMock = new Mock <CashOnDeliveryPaymentMethod>(null, null);

            paymentMethodMock.Setup(x => x.CreatePayment(It.IsAny <decimal>(), It.IsAny <IOrderGroup>()))
            .Returns(() => new FakePayment {
                Amount = 2
            });

            var viewModel = new CheckoutViewModel
            {
                BillingAddress = new AddressModel {
                    AddressId = "billingAddress"
                },
                Payment = new PaymentMethodViewModel <PaymentMethodBase>
                {
                    PaymentMethod = paymentMethodMock.Object
                }
            };

            _subject.CreateAndAddPaymentToCart(cart, viewModel);

            Assert.Equal(1, cart.GetFirstForm().Payments.Count);
            Assert.Equal(2, cart.GetFirstForm().Payments.Single().Amount);
            Assert.Equal(viewModel.BillingAddress.AddressId, cart.GetFirstForm().Payments.Single().BillingAddress.Id);
        }
Esempio n. 5
0
        public void CreateOrderOnMultipleThreads_OnlyTwoShouldBeCreated()
        {
            var cart1 = new FakeCart(new Mock <IMarket>().Object, Currency.NOK);
            var cart2 = new FakeCart(new Mock <IMarket>().Object, Currency.NOK);

            var purchaseOrder1 = new FakePurchaseOrder(new Mock <IMarket>().Object, Currency.NOK);
            var purchaseOrder2 = new FakePurchaseOrder(new Mock <IMarket>().Object, Currency.NOK);

            var orderReference1 = new OrderReference(1, "", Guid.Empty, null);
            var orderReference2 = new OrderReference(2, "", Guid.Empty, null);

            _orderRepositoryMock.Setup(x => x.SaveAsPurchaseOrder(cart1))
            .Returns(() => orderReference1);

            _orderRepositoryMock.Setup(x => x.SaveAsPurchaseOrder(cart2))
            .Returns(() => orderReference2);

            _vippsServiceMock.SetupSequence(x => x.GetPurchaseOrderByOrderId("1"))
            .Returns(null)
            .Returns(purchaseOrder1)
            .Returns(purchaseOrder1)
            .Returns(purchaseOrder1)
            .Returns(purchaseOrder1)
            .Returns(purchaseOrder1)
            .Returns(purchaseOrder1);

            _vippsServiceMock.SetupSequence(x => x.GetPurchaseOrderByOrderId("2"))
            .Returns(null)
            .Returns(purchaseOrder2);

            var responseList = new List <LoadOrCreatePurchaseOrderResponse>();

            Parallel.Invoke(async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart1, "1")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart1, "1")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart1, "1")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart1, "1")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart2, "2")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart1, "1")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart2, "2")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart1, "1")),
                            async() => responseList.Add(await _subject.LoadOrCreatePurchaseOrder(cart1, "1"))
                            );

            var createdOrders = responseList.Where(x => x.PurchaseOrderCreated);

            Assert.Equal(2, createdOrders.Count());
        }
        public void PlaceOrder_WhenRequestInventoryHasAnIssue_ShouldReturnNull()
        {
            var cartTotal = new Money(1, Currency.USD);

            _orderGroupCalculatorMock.Setup(x => x.GetTotal(It.IsAny <IOrderGroup>())).Returns(() => cartTotal);

            _orderRepositoryMock.Setup(x => x.Load <IPurchaseOrder>(It.IsAny <int>())).Returns(new Mock <IPurchaseOrder>().Object);

            _orderRepositoryMock.Setup(x => x.SaveAsPurchaseOrder(It.IsAny <ICart>()))
            .Returns(() => new OrderReference(0, "", Guid.Empty, null));

            var returnObject = new Mock <Dictionary <ILineItem, IList <ValidationIssue> > >();

            returnObject.Object.Add(new Mock <ILineItem>().Object, new List <ValidationIssue>()
            {
                ValidationIssue.AdjustedQuantityByAvailableQuantity
            });

            _cartServiceMock
            .Setup(x => x.RequestInventory(It.IsAny <ICart>()))
            .Returns(returnObject.Object);

            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK)
            {
                OrderLink = new OrderReference(1, "", Guid.Empty, null)
            };

            cart.GetFirstForm().Payments.Add(new FakePayment {
                Status = PaymentStatus.Processed.ToString(), Amount = cartTotal.Amount
            });

            var modelState = new ModelStateDictionary();

            var viewModel = new CheckoutViewModel
            {
                BillingAddress = new AddressModel {
                    AddressId = "billingAddress"
                },
                Payment = new Mock <FakePaymentMethod>("PaymentMethod").Object
            };

            string redirectUrl;
            var    result = _subject.PlaceOrder(cart, modelState, out redirectUrl);

            Assert.Null(result);
            Assert.Equal(1, modelState.Count(x => x.Value.Errors.Count > 0));
        }
Esempio n. 7
0
        public void UpdateShippingMethods_ShouldUpdateCartShippingMethods()
        {
            var cart      = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK);
            var viewModel = new List <ShipmentViewModel>
            {
                new ShipmentViewModel {
                    ShippingMethodId = Guid.NewGuid()
                }
            };

            _subject.UpdateShippingMethods(cart, viewModel);

            var allShippingMethodIdsInCart      = cart.GetFirstForm().Shipments.Select(x => x.ShippingMethodId);
            var allShippingMethodIdsInViewModel = viewModel.Select(x => x.ShippingMethodId);

            allShippingMethodIdsInCart.ShouldAllBeEquivalentTo(allShippingMethodIdsInViewModel);
        }
Esempio n. 8
0
        public void PlaceOrder_WhenPaymentProcessingFails_ShouldReturnNullAndAddModelError()
        {
            var cartTotal = new Money(1, Currency.USD);

            _orderGroupCalculatorMock.Setup(x => x.GetTotal(It.IsAny <IOrderGroup>())).Returns(() => cartTotal);

            _orderRepositoryMock.Setup(x => x.Load <IPurchaseOrder>(It.IsAny <int>())).Returns(new Mock <IPurchaseOrder>().Object);

            var orderReference = new OrderReference(0, "", Guid.Empty, null);

            _orderRepositoryMock.Setup(x => x.SaveAsPurchaseOrder(It.IsAny <ICart>())).Returns(() => orderReference);

            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK);

            cart.GetFirstForm().Payments.Add(new FakePayment {
                Status = PaymentStatus.Processed.ToString(), Amount = 1
            });

            var modelState = new ModelStateDictionary();

            var paymentMethodMock = new Mock <CashOnDeliveryPaymentMethod>(null, null);

            paymentMethodMock.Setup(x => x.PostProcess(It.IsAny <IPayment>())).Throws(new PaymentException("", "", ""));

            var viewModel = new CheckoutViewModel
            {
                BillingAddress = new AddressModel {
                    AddressId = "billingAddress"
                },
                Payment = new PaymentMethodViewModel <PaymentMethodBase>
                {
                    PaymentMethod = paymentMethodMock.Object
                }
            };

            var result = _subject.PlaceOrder(cart, modelState, viewModel);

            Assert.Null(result);
            Assert.Equal(1, modelState.Count(x => x.Value.Errors.Count > 0));
        }
        public void PlaceOrder_WhenProcessingPaymentNotSuccess_ShouldReturnNullAndAddModelError()
        {
            var cartTotal = new Money(1, Currency.USD);

            _orderGroupCalculatorMock.Setup(x => x.GetTotal(It.IsAny <IOrderGroup>())).Returns(() => cartTotal);

            _orderRepositoryMock.Setup(x => x.Load <IPurchaseOrder>(It.IsAny <int>())).Returns(new Mock <IPurchaseOrder>().Object);

            _orderRepositoryMock.Setup(x => x.SaveAsPurchaseOrder(It.IsAny <ICart>()))
            .Returns(() => new OrderReference(0, "", Guid.Empty, null));

            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK)
            {
                OrderLink = new OrderReference(1, "", Guid.Empty, null)
            };

            cart.GetFirstForm().Payments.Add(new FakePayment {
                Status = PaymentStatus.Processed.ToString(), Amount = cartTotal.Amount
            });

            var modelState = new ModelStateDictionary();

            var viewModel = new CheckoutViewModel
            {
                BillingAddress = new AddressModel {
                    AddressId = "billingAddress"
                },
                Payment = new Mock <FakePaymentMethod>("PaymentMethod").Object
            };

            _paymentProcessorMock.Setup(x => x.ProcessPayment(It.IsAny <IOrderGroup>(), It.IsAny <IPayment>(), It.IsAny <IShipment>()))
            .Returns((IOrderGroup orderGroup, IPayment payment, IShipment shipment) => PaymentProcessingResult.CreateUnsuccessfulResult("Payment was failed."));

            string redirectUrl;
            var    result = _subject.PlaceOrder(cart, modelState, out redirectUrl);

            Assert.Null(result);
            Assert.Equal(1, modelState.Count(x => x.Value.Errors.Count > 0));
        }
Esempio n. 10
0
        public void PlaceOrder_WhenPaymentProcessingSucceeds_ShouldDeletedCart()
        {
            var cartTotal = new Money(1, Currency.USD);

            _orderGroupCalculatorMock.Setup(x => x.GetTotal(It.IsAny <IOrderGroup>())).Returns(() => cartTotal);

            _orderRepositoryMock.Setup(x => x.Load <IPurchaseOrder>(It.IsAny <int>())).Returns(new Mock <IPurchaseOrder>().Object);

            _orderRepositoryMock.Setup(x => x.SaveAsPurchaseOrder(It.IsAny <ICart>()))
            .Returns(() => new OrderReference(0, "", Guid.Empty, null));

            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK)
            {
                OrderLink = new OrderReference(1, "", Guid.Empty, null)
            };

            cart.GetFirstForm().Payments.Add(new FakePayment {
                Status = PaymentStatus.Processed.ToString(), Amount = cartTotal.Amount
            });

            var modelState = new ModelStateDictionary();

            var viewModel = new CheckoutViewModel
            {
                BillingAddress = new AddressModel {
                    AddressId = "billingAddress"
                },
                Payment = new PaymentMethodViewModel <PaymentMethodBase>
                {
                    PaymentMethod = new Mock <CashOnDeliveryPaymentMethod>(null, null).Object
                }
            };

            _subject.PlaceOrder(cart, modelState, viewModel);

            _orderRepositoryMock.Verify(x => x.Delete(cart.OrderLink), Times.Once);
        }
Esempio n. 11
0
        public void PlaceOrder_WhenPaymentProcessingSucceeds_ShouldCreatePurchaseOrder()
        {
            var cartTotal = new Money(1, Currency.USD);

            _orderGroupCalculatorMock.Setup(x => x.GetTotal(It.IsAny <IOrderGroup>())).Returns(() => cartTotal);

            var purchaseOrderMock = Mock.Of <IPurchaseOrder>(x => x.OrderNumber == "123");

            _orderRepositoryMock.Setup(x => x.Load <IPurchaseOrder>(It.IsAny <int>())).Returns(purchaseOrderMock);

            _orderRepositoryMock.Setup(x => x.SaveAsPurchaseOrder(It.IsAny <ICart>()))
            .Returns(() => new OrderReference(0, "", Guid.Empty, null));

            var cart = new FakeCart(new MarketImpl(MarketId.Empty), Currency.SEK);

            cart.GetFirstForm().Payments.Add(new FakePayment {
                Status = PaymentStatus.Processed.ToString(), Amount = cartTotal.Amount
            });

            var modelState = new ModelStateDictionary();

            var viewModel = new CheckoutViewModel
            {
                BillingAddress = new AddressModel {
                    AddressId = "billingAddress"
                },
                Payment = new PaymentMethodViewModel <PaymentMethodBase>
                {
                    PaymentMethod = new Mock <CashOnDeliveryPaymentMethod>(null, null).Object
                }
            };

            var result = _subject.PlaceOrder(cart, modelState, viewModel);

            Assert.Equal(purchaseOrderMock, result);
            Assert.Equal(0, modelState.Count(x => x.Value.Errors.Count > 0));
        }