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); }
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); }
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); }
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); }
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)); }
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); }
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)); }
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); }
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)); }