public async Task WHEN_guest_cart_contains_no_lineitem_SHOULD_do_nothing() { //Arrange var guestCustomerId = Guid.NewGuid(); var loggedCustomerId = Guid.NewGuid(); var guestCart = new ProcessedCart { Shipments = new List <Shipment> { new Shipment { LineItems = new List <LineItem>() } } }; var loggedCart = new ProcessedCart { Shipments = new List <Shipment> { new Shipment { LineItems = new List <LineItem>() } } }; var cartRepositoryMock = new Mock <ICartRepository>(); cartRepositoryMock .Setup(c => c.GetCartAsync(It.Is <GetCartParam>(x => x.CustomerId == guestCustomerId))) .ReturnsAsync(guestCart); cartRepositoryMock .Setup(c => c.GetCartAsync(It.Is <GetCartParam>(x => x.CustomerId == loggedCustomerId))) .ReturnsAsync(loggedCart); _container.Use(cartRepositoryMock); var provider = _container.CreateInstance <OverwriteCartMergeProvider>(); //Act var param = new CartMergeParam { GuestCustomerId = guestCustomerId, LoggedCustomerId = loggedCustomerId, Scope = GetRandom.String(32) }; await provider.MergeCartAsync(param).ConfigureAwait(false); //Assert cartRepositoryMock.Verify(c => c.UpdateCartAsync(It.IsAny <UpdateCartParam>()), Times.Never); }
/// <summary> /// Overwrites the lineitems of a logger customer's cart with the lineitems of a guest customer's cart if it is not empty. /// </summary> /// <param name="param"></param> /// <returns></returns> public async Task MergeCartAsync(CartMergeParam param) { if (param == null) { throw new ArgumentNullException("param"); } if (param.GuestCustomerId == Guid.Empty) { throw new ArgumentException("param.GuestCustomerId"); } if (param.LoggedCustomerId == Guid.Empty) { throw new ArgumentException("param.LoggedCustomerId"); } if (string.IsNullOrEmpty(param.Scope)) { throw new ArgumentException("param.Scope"); } if (param.GuestCustomerId == param.LoggedCustomerId) { return; } var getLoggedCustomerTask = CartRepository.GetCartAsync(new GetCartParam { CustomerId = param.LoggedCustomerId, CartName = CartConfiguration.ShoppingCartName, Scope = param.Scope, CultureInfo = CultureInfo.InvariantCulture, }); var getGuestCustomerTask = CartRepository.GetCartAsync(new GetCartParam { CustomerId = param.GuestCustomerId, CartName = CartConfiguration.ShoppingCartName, Scope = param.Scope, CultureInfo = CultureInfo.InvariantCulture, }); var result = await Task.WhenAll(getLoggedCustomerTask, getGuestCustomerTask).ConfigureAwait(false); var loggedCustomerCart = result[0]; var guestCustomerCart = result[1]; var guestCustomerLineItems = guestCustomerCart.GetLineItems(); if (!guestCustomerLineItems.Any()) { return; } loggedCustomerCart.Shipments.First().LineItems = guestCustomerLineItems; loggedCustomerCart.Coupons = guestCustomerCart.Coupons; var cart = await CartRepository.UpdateCartAsync(UpdateCartParamFactory.Build(loggedCustomerCart)); await FixCartService.FixCartAsync(new FixCartParam { Cart = cart }); }
public async Task WHEN_Passing_Valid_Parameters_SHOULD_Succeed() { //Arrange var guestCustomerId = Guid.NewGuid(); var loggedCustomerId = Guid.NewGuid(); var guestCart = new ProcessedCart { Shipments = new List <Shipment> { new Shipment { LineItems = new List <LineItem> { new LineItem { ProductId = "P1", Quantity = 1 } } } } }; var loggedCart = new ProcessedCart { Shipments = new List <Shipment> { new Shipment { LineItems = new List <LineItem> { new LineItem { ProductId = "P2", Quantity = 1 }, } } } }; var cartRepositoryMock = new Mock <ICartRepository>(); cartRepositoryMock .Setup(c => c.GetCartAsync(It.Is <GetCartParam>(x => x.CustomerId == guestCustomerId))) .ReturnsAsync(guestCart); cartRepositoryMock .Setup(c => c.GetCartAsync(It.Is <GetCartParam>(x => x.CustomerId == loggedCustomerId))) .ReturnsAsync(loggedCart); _container.Use(cartRepositoryMock); var provider = _container.CreateInstance <OverwriteCartMergeProvider>(); //Act var param = new CartMergeParam { GuestCustomerId = guestCustomerId, LoggedCustomerId = loggedCustomerId, Scope = GetRandom.String(32) }; await provider.MergeCartAsync(param).ConfigureAwait(false); //Assert cartRepositoryMock.Verify(c => c.UpdateCartAsync(It.Is <UpdateCartParam>(p => VerifyMergedCart(p))), Times.Once); }
/// <summary> /// Logs in a customer. /// </summary> /// <param name="loginParam">Service call params <see cref="LoginParam"/></param> /// <returns> /// The logged in Customer and a status representing a possible cause of errors /// </returns> public virtual async Task <LoginViewModel> LoginAsync(LoginParam loginParam) { if (loginParam == null) { throw new ArgumentNullException("loginParam"); } if (loginParam.CultureInfo == null) { throw new ArgumentException("loginParam.CultureInfo"); } if (string.IsNullOrWhiteSpace(loginParam.Password)) { throw new ArgumentException("loginParam.Password"); } if (string.IsNullOrWhiteSpace(loginParam.Username)) { throw new ArgumentException("loginParam.Username"); } if (string.IsNullOrWhiteSpace(loginParam.Scope)) { throw new ArgumentException("loginParam.Scope"); } var response = new CustomerAndStatus { Status = MyAccountStatus.Failed }; var createAccountUrl = MyAccountUrlProvider.GetCreateAccountUrl(new BaseUrlParameter { CultureInfo = loginParam.CultureInfo, ReturnUrl = loginParam.ReturnUrl }); var forgotPasswordUrl = MyAccountUrlProvider.GetForgotPasswordUrl(new BaseUrlParameter { CultureInfo = loginParam.CultureInfo, ReturnUrl = loginParam.ReturnUrl }); var loginUrl = MyAccountUrlProvider.GetLoginUrl(new BaseUrlParameter { CultureInfo = loginParam.CultureInfo, ReturnUrl = loginParam.ReturnUrl }); var userName = GenerateUserName(loginParam.Username); var loginResponse = Membership.LoginUser(userName, loginParam.Password); if (loginResponse) { var user = Membership.GetUser(userName, true); if (user != null && user.ProviderUserKey is Guid && !Guid.Empty.Equals(user.ProviderUserKey) && !user.IsLockedOut) { var customer = await CustomerRepository.GetCustomerByIdAsync(new GetCustomerByIdParam { CultureInfo = loginParam.CultureInfo, Scope = loginParam.Scope, CustomerId = (Guid)user.ProviderUserKey }).ConfigureAwait(false); var cartMergeParam = new CartMergeParam { Scope = loginParam.Scope, GuestCustomerId = loginParam.GuestCustomerId, LoggedCustomerId = customer.Id }; await CartMergeProvider.MergeCartAsync(cartMergeParam).ConfigureAwait(false); response.Customer = customer; response.Status = MyAccountStatus.Success; if (response.Customer.AccountStatus == AccountStatus.RequiresApproval) { response.Status = MyAccountStatus.RequiresApproval; } } } return(GetLoginViewModel(new GetLoginViewModelParam { ReturnUrl = loginParam.ReturnUrl, Status = response.Status, Username = userName, CultureInfo = loginParam.CultureInfo, Customer = response.Customer, LoginUrl = loginUrl, CreateAccountUrl = createAccountUrl, ForgotPasswordUrl = forgotPasswordUrl })); }