private void ArrangeGetShippingInfo(bool isGetShippingMethodsFailed = false) { this.cartResult = this.fixture.Create <CartResult>(); this.cartResult.Success = true; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(this.cartResult); var shippingMethodsResult = this.fixture.Create <GetShippingMethodsResult>(); this.shippingManager.GetShippingMethods(Arg.Any <Cart>(), Arg.Any <ShippingOptionType>()) .Returns(shippingMethodsResult); var mappedShippingMethods = this.fixture.Create <List <ShippingMethod> >(); this.fixture.Customizations.Add( new TypeRelay( typeof(IReadOnlyCollection <Sitecore.Commerce.Entities.Shipping.ShippingMethod>), typeof(List <ShippingMethod>))); this.shippingMapper .Map <IReadOnlyCollection <Sitecore.Commerce.Entities.Shipping.ShippingMethod>, List <ShippingMethod> >( shippingMethodsResult.ShippingMethods) .Returns(mappedShippingMethods); if (isGetShippingMethodsFailed) { shippingMethodsResult.Success = false; shippingMethodsResult.SystemMessages.Add(new SystemMessage("Test message")); } }
public void GetBillingInfo_IfGetPaymentOptionsFailed_ShouldReturnsError( CartResult cartResult, GetPaymentOptionsResult optionsResult, SystemMessage systemMessage) { //arrange cartResult.Success = true; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(cartResult); optionsResult.Success = false; optionsResult.SystemMessages.Add(systemMessage); this.paymentManager.GetPaymentOptions(Arg.Any <string>(), Arg.Any <Cart>()).Returns(optionsResult); //act Result <BillingInfo> result; using (new SiteContextSwitcher(this.siteContext)) { result = this.billingService.GetBillingInfo(); } //assert Assert.False(result.Success); Assert.Equal(systemMessage.Message, result.Errors[0]); }
/// <summary> /// Initializes a new instance of the <see cref="SaveCartTest"/> class. /// </summary> public SaveCartTest() { this.cart = new Cart { Lines = new ReadOnlyCollection <CartLine>(new List <CartLine> { new CartLine { Product = new CartProduct { ProductId = "Audi S4" }, Quantity = 5 }, }) }; this.request = new SaveCartRequest(this.cart); this.result = new CartResult(); this.args = new ServicePipelineArgs(this.request, this.result); this.client = Substitute.For <ICartsServiceChannel>(); var clientFactory = Substitute.For <ServiceClientFactory>(); clientFactory.CreateClient <ICartsServiceChannel>(Arg.Any <string>(), Arg.Any <string>()).Returns(this.client); this.processor = new SaveCart { ClientFactory = clientFactory }; }
public ManagerResponse <CartResult, Cart> UpdateCart(string shopName, Cart currentCart, CartBase cartUpdate) { var request = new UpdateCartRequest(currentCart, cartUpdate); CartResult serviceProviderResult = this.cartServiceProvider.UpdateCart(request); return(new ManagerResponse <CartResult, Cart>(serviceProviderResult, serviceProviderResult.Cart)); }
public void SetPaymentInfo_IfAddPaymentInfoFailed_ShouldReturnsError( CartResult loadCartResult, CartResult updateCartResult, CartResult removeCartResult, AddPaymentInfoResult addCartResult, Address address, Party party, Models.Entities.Payment.FederatedPaymentInfo federatedPaymentInfo, SystemMessage systemMessage) { //arrange loadCartResult.Success = true; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(loadCartResult); updateCartResult.Success = true; this.cartManager.UpdateCart(Arg.Any <Cart>(), Arg.Any <CartBase>()).Returns(updateCartResult); removeCartResult.Success = true; this.cartManager.RemovePaymentInfo(Arg.Any <Cart>()).Returns(removeCartResult); addCartResult.Success = false; addCartResult.SystemMessages.Add(systemMessage); this.cartManager.AddPaymentInfo(Arg.Any <Cart>(), Arg.Any <Party>(), Arg.Any <FederatedPaymentInfo>()).Returns(addCartResult); this.paymentMapper.Map <Address, Party>(address).Returns(party); //act var result = this.billingService.SetPaymentInfo(address, federatedPaymentInfo); //assert Assert.False(result.Success); Assert.Equal(systemMessage.Message, result.Errors[0]); }
public ManagerResponse <CartResult, Cart> MergeCarts(string shopName, string customerId, string anonymousVisitorId, Cart anonymousVisitorCart) { Assert.ArgumentNotNullOrEmpty(anonymousVisitorId, "anonymousVisitorId"); var request = new LoadCartByNameRequest(shopName, Constants.DefaultCartName, customerId); var cartResult = this.cartServiceProvider.LoadCart(request); if (!cartResult.Success || cartResult.Cart == null) { Log.Warn("Cart Not Found Error", this.GetType()); return(new ManagerResponse <CartResult, Cart>(cartResult, cartResult.Cart)); } var commerceCart = (CommerceCart)cartResult.Cart; var newCartResult = new CartResult { Cart = commerceCart, Success = true }; if (customerId != anonymousVisitorId) { bool flag = anonymousVisitorCart is CommerceCart && ((CommerceCart)anonymousVisitorCart).OrderForms.Any((of => of.PromoCodes.Any())); if (anonymousVisitorCart != null && anonymousVisitorCart.Lines.Any() | flag && (commerceCart.ShopName == anonymousVisitorCart.ShopName || commerceCart.ExternalId != anonymousVisitorCart.ExternalId)) { newCartResult = this.cartServiceProvider.MergeCart(new MergeCartRequest(anonymousVisitorCart, commerceCart)); } } return(new ManagerResponse <CartResult, Cart>(newCartResult, newCartResult.Cart)); }
public CartServiceTests() { this.cartBuilder = Substitute.For <ICartBuilder <Connect.Cart> >(); this.cartManager = Substitute.For <ICartManager>(); this.inventoryManager = Substitute.For <IInventoryManager>(); var catalogContext = Substitute.For <ICatalogContext>(); this.catalogService = Substitute.For <ICatalogService>(); var storefrontContext = Substitute.For <IStorefrontContext>(); this.visitorContext = Substitute.For <IVisitorContext>(); this.cartService = new CartService( this.cartBuilder, this.cartManager, this.inventoryManager, catalogContext, catalogService, storefrontContext, this.visitorContext); this.fixture = new Fixture().Customize(new OmitOnRecursionCustomization()); this.cartResult = this.fixture.Create <CartResult>(); this.commerceCart = this.fixture.Create <CommerceCart>(); this.cartResult.Cart = this.commerceCart; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(this.cartResult); }
/// <summary> /// Initializes a new instance of the <see cref="RemoveLinesFromCartTest"/> class. /// </summary> public RemoveLinesFromCartTest() { this.visitorId = Guid.NewGuid(); this.cart = new Cart { ExternalId = this.visitorId.ToString(), Lines = new ReadOnlyCollectionAdapter <CartLine> { new CartLine() } }; this.lineToRemove = new CartLine { Product = new CartProduct { ProductId = "100500", Price = new Price { Amount = 100 } }, Quantity = 12 }; this.request = new RemoveCartLinesRequest(this.cart, new[] { this.lineToRemove }); this.result = new CartResult(); this.args = new ServicePipelineArgs(this.request, this.result); this.client = Substitute.For <ICartsServiceChannel>(); var clientFactory = Substitute.For <ServiceClientFactory>(); clientFactory.CreateClient <ICartsServiceChannel>(Arg.Any <string>(), Arg.Any <string>()).Returns(this.client); this.processor = new RemoveLinesFromCart { ClientFactory = clientFactory }; }
public void GetBillingInfo_IfGetPaymentMethodsFailed_ShouldReturnsError( CartResult cartResult, GetPaymentOptionsResult optionsResult, GetPaymentMethodsResult methodsResult, SystemMessage systemMessage, List <Models.Entities.Payment.PaymentOption> mappedPaymentOptions) { //arrange cartResult.Success = true; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(cartResult); optionsResult.Success = true; this.paymentManager.GetPaymentOptions(Arg.Any <string>(), Arg.Any <Cart>()).Returns(optionsResult); methodsResult.Success = false; methodsResult.SystemMessages.Add(systemMessage); this.paymentManager.GetPaymentMethods(Arg.Any <Cart>(), Arg.Any <PaymentOption>()).Returns(methodsResult); this.paymentMapper.Map <IReadOnlyCollection <PaymentOption>, List <Models.Entities.Payment.PaymentOption> >(optionsResult.PaymentOptions) .Returns(mappedPaymentOptions); //act Result <BillingInfo> result; using (new SiteContextSwitcher(this.siteContext)) { result = this.billingService.GetBillingInfo(); } //assert Assert.False(result.Success); Assert.Equal(systemMessage.Message, result.Errors[0]); }
// TODO separate getting product thumbnail, varation options from here public async Task <CartResult> GetActiveCartDetails(int customerId, int createdById) { var cart = await GetActiveCart(customerId, createdById).FirstOrDefaultAsync(); if (cart == null) { return(new CartResult()); } var cartVm = new CartResult() { Id = cart.Id, CouponCode = cart.CouponCode, ShippingAmount = cart.ShippingAmount, OrderNote = cart.OrderNote }; cartVm.Items = _cartItemRepository.Query() .Include(x => x.Product).ThenInclude(p => p.ThumbnailImage) .Include(x => x.Product).ThenInclude(p => p.OptionCombinations).ThenInclude(o => o.Option) .Where(x => x.CartId == cart.Id) .Select(x => new CartItemResult { Id = x.Id, ProductId = x.ProductId, ProductName = x.Product.Name, ProductPrice = x.Product.Price, IsChecked = x.IsChecked, Quantity = x.Quantity, ProductImage = x.Product.ThumbnailImage.Url, VariationOptions = x.Product.OptionCombinations.Select(c => new ProductVariationOption { OptionName = c.Option.Name, Value = c.Value }) }).ToList(); //if (!string.IsNullOrWhiteSpace(cartVm.CouponCode)) //{ // var cartInfoForCoupon = new CartInfoForCoupon // { // Items = cartVm.Items.Select(x => new CartItemForCoupon { ProductId = x.ProductId, Quantity = x.Quantity }).ToList() // }; // var couponValidationResult = await _couponService.Validate(customerId, cartVm.CouponCode, cartInfoForCoupon); // if (couponValidationResult.Succeeded) // { // cartVm.Discount = couponValidationResult.DiscountAmount; // } // else // { // cartVm.CouponValidationErrorMessage = couponValidationResult.ErrorMessage; // } //} return(cartVm); }
public async Task <Result> List() { var user = await _workContext.GetCurrentUserOrNullAsync(); var cart = new CartResult(); if (user != null) { cart = await _cartService.GetActiveCartDetails(user.Id); } return(Result.Ok(cart)); }
public IHttpActionResult GetCart() //Returns all images registered in the database as a json array object { var items = _cartService.GetCartItems(); var cartResult = new CartResult { Items = items, ItemsInCart = items.Count, TotalPrice = items.Sum(item => item.Price) }; return(Json(cartResult)); }
/// <summary> /// Merges the carts. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="anonymousVisitorId">The anonymous visitor identifier.</param> /// <param name="anonymousVisitorCart">The anonymous visitor cart.</param> /// <returns> /// The manager response where the merged cart is returned in the result. /// </returns> public virtual ManagerResponse <CartResult, CommerceCart> MergeCarts([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, string anonymousVisitorId, Cart anonymousVisitorCart) { Assert.ArgumentNotNull(storefront, "storefront"); Assert.ArgumentNotNull(visitorContext, "visitorContext"); Assert.ArgumentNotNullOrEmpty(anonymousVisitorId, "anonymousVisitorId"); var userId = visitorContext.UserId; var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, userId, true); if (!cartResult.Success || cartResult.Cart == null) { var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.CartNotFoundError); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart)); } CommerceCart currentCart = (CommerceCart)cartResult.Cart; var result = new CartResult { Cart = currentCart, Success = true }; if (userId != anonymousVisitorId) { var anonymousCartHasPromocodes = (anonymousVisitorCart is CommerceCart) && ((CommerceCart)anonymousVisitorCart).OrderForms.Any(of => of.PromoCodes.Any()); if (anonymousVisitorCart != null && (anonymousVisitorCart.Lines.Any() || anonymousCartHasPromocodes)) { if ((currentCart.ShopName == anonymousVisitorCart.ShopName) || (currentCart.ExternalId != anonymousVisitorCart.ExternalId)) { var mergeCartRequest = new MergeCartRequest(anonymousVisitorCart, currentCart); result = this.CartServiceProvider.MergeCart(mergeCartRequest); } } } if (result.Success && result.Cart != null) { var cartCache = CommerceTypeLoader.CreateInstance <CartCacheHelper>(); cartCache.InvalidateCartCache(anonymousVisitorId); cartCache.AddCartToCache(result.Cart as CommerceCart); } return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
/// <summary> /// Changes the line quantity. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="inputModel">The input model.</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse <CartResult, CommerceCart> ChangeLineQuantity([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] UpdateCartLineInputModel inputModel) { Assert.ArgumentNotNull(inputModel, "inputModel"); Assert.ArgumentNotNullOrEmpty(inputModel.ExternalCartLineId, "inputModel.ExternalCartLineId"); var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, visitorContext.UserId); if (!cartResult.Success || cartResult.Cart == null) { var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.CartNotFoundError); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart)); } var cartCache = CommerceTypeLoader.CreateInstance <CartCacheHelper>(); cartCache.InvalidateCartCache(visitorContext.GetCustomerId()); var cart = cartResult.Cart; var result = new CartResult { Cart = cart, Success = true }; var cartLineToChange = cart.Lines.SingleOrDefault(cl => cl.Product != null && cl.ExternalCartLineId == inputModel.ExternalCartLineId); if (inputModel.Quantity == 0 && cartLineToChange != null) { result = this.RemoveCartLines(cart, new[] { cartLineToChange }, true); } else if (cartLineToChange != null) { cartLineToChange.Quantity = inputModel.Quantity; var request = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); request.RefreshCart(true); result = this.CartServiceProvider.UpdateCartLines(request); } if (result.Success && result.Cart != null) { cartCache.AddCartToCache(result.Cart as CommerceCart); } this.AddBasketErrorsToResult(result.Cart as CommerceCart, result); return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
/// <summary> /// Initializes a new instance of the <see cref="LoadCartTest"/> class. /// </summary> public LoadCartTest() { this.visitorId = Guid.NewGuid(); this.request = new LoadCartRequest("NopShop", this.visitorId.ToString()); this.result = new CartResult(); this.args = new ServicePipelineArgs(this.request, this.result); this.client = Substitute.For <ICartsServiceChannel>(); var clientFactory = Substitute.For <ServiceClientFactory>(); clientFactory.CreateClient <ICartsServiceChannel>(Arg.Any <string>(), Arg.Any <string>()).Returns(this.client); this.processor = new LoadCart { ClientFactory = clientFactory }; }
public void GetBillingInfo_IfCartIsEmpty_ShouldReturnsEmptyBillingInfo(CartResult cartResult) { //arrange cartResult.Cart = new Cart(); this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(cartResult); //act Result <BillingInfo> result; using (new SiteContextSwitcher(this.siteContext)) { result = this.billingService.GetBillingInfo(); } //assert Assert.True(result.Success); }
/// <summary> /// Initializes a new instance of the <see cref="CartsServiceTest"/> class. /// </summary> public CartsServiceTest() { this.cart = new Cart(); this.cartFromAnonymous = new Cart(); this.result = new CartResult { Cart = this.cart }; this.resultFromAnonymous = new CartResult { Cart = this.cartFromAnonymous }; this.cartServiceProvider = Substitute.For <CartServiceProvider>(); this.cartServiceProvider.CreateOrResumeCart(Arg.Is <CreateOrResumeCartRequest>(r => r.UserId == "John Carter")).Returns(this.result); var pricesResult = new GetProductPricesResult(); pricesResult.Prices.Add("List", new Price(0, "USD")); this.pricingService = Substitute.For <PricingServiceProvider>(); this.pricingService.GetProductPrices(Arg.Any <GetProductPricesRequest>()).Returns(pricesResult); this.contactId = Guid.NewGuid(); this.cartServiceProvider.CreateOrResumeCart(Arg.Is <CreateOrResumeCartRequest>(r => r.UserId == ID.Parse(this.contactId).ToString())).Returns(this.resultFromAnonymous); this.cartServiceProvider.GetCarts(Arg.Any <GetCartsRequest>()).Returns(new GetCartsResult { Carts = Enumerable.Empty <CartBase>() }); this.contactFactory = Substitute.For <ContactFactory>(); this.contactFactory.GetContact().Returns("John Carter"); var inventoryResult = new GetStockInformationResult(); inventoryResult.StockInformation.ToList().Add(new StockInformation { Product = new InventoryProduct { ProductId = "1001" }, Status = StockStatus.InStock }); this._inventoryService = Substitute.For <InventoryServiceProvider>(); this._inventoryService.GetStockInformation(Arg.Any <GetStockInformationRequest>()).Returns(inventoryResult); this._customerService = Substitute.For <CustomerServiceProvider>(); this._wishListServiceProvider = Substitute.For <WishListServiceProvider>(); this.service = new CartService(this.cartServiceProvider, this._wishListServiceProvider, this.pricingService, "autohaus", this.contactFactory, this._inventoryService, this._customerService); }
protected override void DoTrack(IPageContext pageContext, IPageEventDefinition eventDefinition, CommerceEventInstance eventInstance) { var request = CreateCartLinesRequest(eventInstance); var result = new CartResult { Cart = request.Cart }; // Connect requires result cart to be filled. var args = new ServicePipelineArgs(request, result); // Trigger Commerce Connect Analytics processor var trigger = new TriggerCartLinesPageEvent() { Name = eventInstance.CommerceEventId, Text = eventInstance.CommerceEventId //Text equals id in practice, so for simplicity reuse it }; trigger.Process(args); }
public ManagerResponse <CartResult, CommerceCart> ChangeLineQuantity(string userId, UpdateCartLineInputModel inputModel) { Assert.ArgumentNotNull(inputModel, nameof(inputModel)); Assert.ArgumentNotNullOrEmpty(inputModel.ExternalCartLineId, nameof(inputModel.ExternalCartLineId)); var cartResult = LoadCartByName(CommerceConstants.CartSettings.DefaultCartName, userId); if (!cartResult.Success || cartResult.Cart == null) { var message = DictionaryPhraseRepository.Current.Get("/System Messages/Cart/Cart Not Found Error", "Could not retrieve the cart for the current user"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart)); } CartCacheHelper.InvalidateCartCache(userId); var cart = cartResult.Cart; var result = new CartResult { Cart = cart, Success = true }; var cartLineToChange = cart.Lines.SingleOrDefault(cl => cl.Product != null && cl.ExternalCartLineId == inputModel.ExternalCartLineId); if (inputModel.Quantity == 0 && cartLineToChange != null) { result = RemoveCartLines(cart, new[] { cartLineToChange }, true); } else if (cartLineToChange != null) { cartLineToChange.Quantity = inputModel.Quantity; var request = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); RefreshCart(request, true); result = CartServiceProvider.UpdateCartLines(request); } if (result.Success && result.Cart != null) { CartCacheHelper.AddCartToCache(result.Cart as CommerceCart); } AddBasketErrorsToResult(result.Cart as CommerceCart, result); return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
public void SetPaymentInfo__IfLoadCartFailed_ShouldReturnsError( CartResult cartResult, Address address, Models.Entities.Payment.FederatedPaymentInfo federatedPaymentInfo, SystemMessage systemMessage) { //arrange cartResult.Success = false; cartResult.SystemMessages.Add(systemMessage); this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(cartResult); //act var result = this.billingService.SetPaymentInfo(address, federatedPaymentInfo); //assert Assert.False(result.Success); Assert.Equal(systemMessage.Message, result.Errors[0]); }
public ManagerResponse <CartResult, CommerceCart> MergeCarts(string newUserId, string previousUserId, Cart anonymousVisitorCart) { Assert.ArgumentNotNullOrEmpty(previousUserId, nameof(previousUserId)); Assert.ArgumentNotNullOrEmpty(newUserId, nameof(newUserId)); var cartResult = LoadCartByName(CommerceConstants.CartSettings.DefaultCartName, newUserId, true); if (!cartResult.Success || cartResult.Cart == null) { cartResult.SystemMessages.Add(new SystemMessage { Message = DictionaryPhraseRepository.Current.Get("/System Messages/Cart/Cart Not Found Error", "Could not retrieve the cart for the current user") }); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart)); } var currentCart = (CommerceCart)cartResult.Cart; var result = new CartResult { Cart = currentCart, Success = true }; if (newUserId != previousUserId) { var anonymousCartHasPromocodes = anonymousVisitorCart is CommerceCart && ((CommerceCart)anonymousVisitorCart).OrderForms.Any(of => of.PromoCodes.Any()); if (anonymousVisitorCart != null && (anonymousVisitorCart.Lines.Any() || anonymousCartHasPromocodes)) { if (currentCart.ShopName == anonymousVisitorCart.ShopName || currentCart.ExternalId != anonymousVisitorCart.ExternalId) { var mergeCartRequest = new MergeCartRequest(anonymousVisitorCart, currentCart); result = CartServiceProvider.MergeCart(mergeCartRequest); } } } if (result.Success && result.Cart != null) { CartCacheHelper.InvalidateCartCache(previousUserId); CartCacheHelper.AddCartToCache(result.Cart as CommerceCart); } return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
public ActionResult Index() { var user = User.Identity.Name; Customer customer = db.Customers.Where(x => x.Username == user).First(); Shopping cart = db.Shoppings.Where(x => x.CustomerID == customer.CustomerID).First(); List <CartResult> results = new List <CartResult>(); using (SqlConnection connection = new SqlConnection("data source=cs.cofo.edu;initial catalog=gvaught;persist security info=True;user id=gvaught;password=beargav;MultipleActiveResultSets=True;App=EntityFramework")) { SqlCommand cmd = new SqlCommand("usp_GetCart", connection); cmd.CommandType = CommandType.StoredProcedure; SqlParameter p1 = new SqlParameter("@cartID", SqlDbType.Int); SqlParameter p2 = new SqlParameter("@custID", SqlDbType.Int); p1.Value = cart.CartID; p2.Value = customer.CustomerID; cmd.Parameters.Add(p1); cmd.Parameters.Add(p2); connection.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { CartResult book = new CartResult(); book.BookID = (int)dr["BookID"]; book.Title = (string)dr["Title"]; book.ISBN = (string)dr["ISBN"]; book.PublisherID = (int)dr["PublisherID"]; book.PublishYear = (int)dr["PublishYear"]; book.PageNum = (int)dr["PageNum"]; book.Language = (string)dr["Language"]; book.Edition = (int)dr["Edition"]; book.CoverType = (string)dr["CoverType"]; book.Amount = (int)dr["Amount"]; book.Price = (decimal)dr["Price"]; book.TotalPrice = (decimal)dr["TotalPrice"]; book.CustomerID = (int)dr["CustomerID"]; results.Add(book); } connection.Close(); } //var shoppings = db.Shoppings.Include(s => s.Customer); return(View(results)); }
public CartServiceTests() { var storefrontContext = Substitute.For <IStorefrontContext>(); var catalogContext = Substitute.For <ICatalogContext>(); this.cartManager = Substitute.For <ICartManager>(); this.cartBuilder = Substitute.For <ICartBuilder <Connect.Cart> >(); this.fixture = this.CreateOmitOnRecursionFixture(); this.visitorContext = Substitute.For <IVisitorContext>(); this.cartService = new CartService( this.cartManager, storefrontContext, catalogContext, this.visitorContext, this.cartBuilder); this.cartResult = this.fixture.Create <CartResult>(); this.commerceCart = this.fixture.Create <CommerceCart>(); this.cartResult.Cart = this.commerceCart; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(this.cartResult); }
/// <summary> /// Returns the current user cart. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="customerId">The customer identifier.</param> /// <param name="refresh">if set to <c>true</c> [refresh].</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse <CartResult, CommerceCart> GetCurrentCart([NotNull] CommerceStorefront storefront, [NotNull] string customerId, bool refresh = false) { var cartCache = CommerceTypeLoader.CreateInstance <CartCacheHelper>(); if (refresh) { cartCache.InvalidateCartCache(customerId); } var cart = cartCache.GetCart(customerId); if (cart != null) { var result = new CartResult { Cart = cart }; this.AddBasketErrorsToResult(result.Cart as CommerceCart, result); return(new ManagerResponse <CartResult, CommerceCart>(result, cart)); } CartResult cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, customerId, refresh); if (cartResult.Success && cartResult.Cart != null) { cart = cartResult.Cart as CommerceCart; cartResult.Cart = cart; cartCache.AddCartToCache(cart); } else { var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.CartNotFoundError); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); } this.AddBasketErrorsToResult(cartResult.Cart as CommerceCart, cartResult); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cart)); }
public ManagerResponse <CartResult, CommerceCart> GetCart(string userId, bool refresh = false) { if (refresh) { CartCacheHelper.InvalidateCartCache(userId); } var cart = CartCacheHelper.GetCart(userId); if (cart != null) { var result = new CartResult { Cart = cart }; AddBasketErrorsToResult(result.Cart as CommerceCart, result); return(new ManagerResponse <CartResult, CommerceCart>(result, cart)); } //var cartResult = LoadCartByName(CommerceConstants.CartSettings.DefaultCartName, userId, refresh); var cartResult = LoadCartByName(userId, userId, refresh); if (cartResult.Success && cartResult.Cart != null) { cart = cartResult.Cart as CommerceCart; cartResult.Cart = cart; CartCacheHelper.AddCartToCache(cart); } else { var message = DictionaryPhraseRepository.Current.Get("/System Messages/Cart/Cart Not Found Error", "Could not retrieve the cart for the current user"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); } AddBasketErrorsToResult(cartResult.Cart as CommerceCart, cartResult); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cart)); }
protected virtual Result <CartModel> GetCart(CartResult serviceProviderResult, Cart cart) { var result = new Result <CartModel>(); try { var model = this.CartModelBuilder.Initialize(cart); result.SetResult(model); // ToDo: investigate the sometimes issue where Success=false but no any errors and the action is success if (serviceProviderResult.SystemMessages.Any() || (cart == null)) { result.SetErrors(serviceProviderResult); } } catch (Exception ex) { result.SetErrors(nameof(this.GetCart), ex); } return(result); }
private void ArrangeSetShippingOptions() { this.cartResult = this.fixture.Create <CartResult>(); this.cartResult.Success = true; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(this.cartResult); var commerceParties = this.fixture.Create <List <CommerceParty> >(); var shippingOptionType = this.fixture.Create <ShippingOptionType>(); this.shippingMapper.Map <List <Address>, List <CommerceParty> >(Arg.Any <List <Address> >()) .Returns(commerceParties); this.shippingMapper.Map <string, ShippingOptionType>(Arg.Any <string>()).Returns(shippingOptionType); this.fixture.Customizations.Add( new TypeRelay(typeof(IReadOnlyCollection <ShippingInfo>), typeof(List <ShippingInfo>))); var addShippingInfoResult = this.fixture.Create <AddShippingInfoResult>(); this.cartManager.AddShippingInfo( Arg.Any <Cart>(), Arg.Any <ShippingOptionType>(), Arg.Any <List <ShippingInfo> >()) .Returns(addShippingInfoResult); }
private void ArrageGetDeliveryInfo( bool isGetShippingOptionsFailed = false, bool isGetCustomerPartiesFailed = false) { this.cartResult = this.fixture.Create <CartResult>(); this.cartResult.Success = true; this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(this.cartResult); var shippingOptionsResult = this.fixture.Create <GetShippingOptionsResult>(); this.shippingManager.GetShippingOptions(Arg.Any <Cart>()).Returns(shippingOptionsResult); var mappedShippingOptions = this.fixture.Create <List <Models.Entities.Shipping.ShippingOption> >(); this.shippingMapper .Map <IReadOnlyCollection <ShippingOption>, List <Models.Entities.Shipping.ShippingOption> >( shippingOptionsResult.ShippingOptions) .Returns(mappedShippingOptions); this.fixture.Customizations.Add(new TypeRelay(typeof(IReadOnlyCollection <Party>), typeof(List <Party>))); var partiesResult = this.fixture.Create <GetPartiesResult>(); this.accountManager.GetCustomerParties(Arg.Any <string>()).Returns(partiesResult); if (isGetShippingOptionsFailed) { shippingOptionsResult.Success = false; shippingOptionsResult.SystemMessages.Add(new SystemMessage("Test message")); } if (isGetCustomerPartiesFailed) { partiesResult.Success = false; partiesResult.SystemMessages.Add(new SystemMessage("Test message")); } }
/// <summary> /// Returns the current user cart. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="refresh">if set to <c>true</c> [refresh].</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse<CartResult, CommerceCart> GetCurrentCart([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, bool refresh = false) { var cartCache = CommerceTypeLoader.CreateInstance<CartCacheHelper>(); string customerId = visitorContext.GetCustomerId(); if (refresh) { cartCache.InvalidateCartCache(customerId); } var cart = cartCache.GetCart(customerId); if (cart != null) { var result = new CartResult { Cart = cart }; this.AddBasketErrorsToResult(result.Cart as CommerceCart, result); return new ManagerResponse<CartResult, CommerceCart>(result, cart); } CartResult cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, visitorContext.UserId, refresh); if (cartResult.Success && cartResult.Cart != null) { cart = cartResult.Cart as CommerceCart; cartResult.Cart = cart; cartCache.AddCartToCache(cart); } else { var message = StorefrontManager.GetSystemMessage("CartNotFoundError"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); } this.AddBasketErrorsToResult(cartResult.Cart as CommerceCart, cartResult); return new ManagerResponse<CartResult, CommerceCart>(cartResult, cart); }
/// <summary> /// Merges the carts. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="anonymousVisitorId">The anonymous visitor identifier.</param> /// <param name="anonymousVisitorCart">The anonymous visitor cart.</param> /// <returns> /// The manager response where the merged cart is returned in the result. /// </returns> public virtual ManagerResponse<CartResult, CommerceCart> MergeCarts([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, string anonymousVisitorId, Cart anonymousVisitorCart) { Assert.ArgumentNotNull(storefront, "storefront"); Assert.ArgumentNotNull(visitorContext, "visitorContext"); Assert.ArgumentNotNullOrEmpty(anonymousVisitorId, "anonymousVisitorId"); var userId = visitorContext.UserId; var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, userId, true); if (!cartResult.Success || cartResult.Cart == null) { var message = StorefrontManager.GetSystemMessage("CartNotFoundError"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return new ManagerResponse<CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart); } CommerceCart currentCart = (CommerceCart)cartResult.Cart; var result = new CartResult { Cart = currentCart, Success = true }; if (userId != anonymousVisitorId) { if (anonymousVisitorCart != null && anonymousVisitorCart.Lines.Any()) { if ((currentCart.ShopName == anonymousVisitorCart.ShopName) || (currentCart.ExternalId != anonymousVisitorCart.ExternalId)) { var mergeCartRequest = new MergeCartRequest(anonymousVisitorCart, currentCart); result = this.CartServiceProvider.MergeCart(mergeCartRequest); if (result.Success) { var updateCartRequest = new UpdateCartLinesRequest(result.Cart, anonymousVisitorCart.Lines); updateCartRequest.RefreshCart(true); result = this.CartServiceProvider.UpdateCartLines(updateCartRequest); if (result.Success) { this.CartServiceProvider.DeleteCart(new DeleteCartRequest(anonymousVisitorCart)); } } } } } if (result.Success && result.Cart != null) { var cartCache = CommerceTypeLoader.CreateInstance<CartCacheHelper>(); cartCache.InvalidateCartCache(anonymousVisitorId); cartCache.AddCartToCache(result.Cart as CommerceCart); } return new ManagerResponse<CartResult, CommerceCart>(result, result.Cart as CommerceCart); }
/// <summary> /// Returns the current user cart. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="refresh">if set to <c>true</c> [refresh].</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse<CartResult, CommerceCart> GetCurrentCart([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, bool refresh = false) { var cartCache = CommerceTypeLoader.CreateInstance<CartCacheHelper>(); string customerId = visitorContext.GetCustomerId(); if (refresh) { cartCache.InvalidateCartCache(customerId); } var cart = cartCache.GetCart(customerId); if (cart != null) { var result = new CartResult { Cart = cart }; this.AddBasketErrorsToResult(result.Cart as CommerceCart, result); return new ManagerResponse<CartResult, CommerceCart>(result, cart); } // With cart caching enabled (via Shared Sessions) it is now ok to refresh the cart (i.e. run the CS pipelines) without causing // any performance problems. This is required to ensure we get the cart images after cart is invalidated by the update line item. CartResult cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, visitorContext.UserId, true); if (cartResult.Success && cartResult.Cart != null) { cart = cartResult.Cart as CommerceCart; cartResult.Cart = cart; cartCache.AddCartToCache(cart); } else { var message = StorefrontManager.GetSystemMessage("CartNotFoundError"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); } this.AddBasketErrorsToResult(cartResult.Cart as CommerceCart, cartResult); return new ManagerResponse<CartResult, CommerceCart>(cartResult, cart); }
/// <summary> /// Changes the line quantity. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="inputModel">The input model.</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse<CartResult, CommerceCart> ChangeLineQuantity([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] UpdateCartLineInputModel inputModel) { Assert.ArgumentNotNull(inputModel, "inputModel"); Assert.ArgumentNotNullOrEmpty(inputModel.ExternalCartLineId, "inputModel.ExternalCartLineId"); var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, visitorContext.UserId); if (!cartResult.Success || cartResult.Cart == null) { var message = StorefrontManager.GetSystemMessage("CartNotFoundError"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return new ManagerResponse<CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart); } var cartCache = CommerceTypeLoader.CreateInstance<CartCacheHelper>(); cartCache.InvalidateCartCache(visitorContext.GetCustomerId()); // We remove the curly brackets from the JSON for the lineitem id. We need to add them back. inputModel.ExternalCartLineId = Guid.Parse(inputModel.ExternalCartLineId).ToString("B"); var cart = cartResult.Cart; var result = new CartResult { Cart = cart, Success = true }; var cartLineToChange = cart.Lines.SingleOrDefault(cl => cl.Product != null && cl.ExternalCartLineId == inputModel.ExternalCartLineId); if (inputModel.Quantity == 0 && cartLineToChange != null) { result = this.RemoveCartLines(cart, new[] { cartLineToChange }, true); } else if (cartLineToChange != null) { cartLineToChange.Quantity = inputModel.Quantity; var request = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); request.RefreshCart(true); result = this.CartServiceProvider.UpdateCartLines(request); } if (result.Success && result.Cart != null) { cartCache.AddCartToCache(result.Cart as CommerceCart); } this.AddBasketErrorsToResult(result.Cart as CommerceCart, result); return new ManagerResponse<CartResult, CommerceCart>(result, result.Cart as CommerceCart); }
private Result <Cart> BuildResult(CartResult cartResult) { var cart = this.cartBuilder.Build(cartResult?.Cart); return(new Result <Cart>(cart, cartResult?.SystemMessages.Select(_ => _.Message).ToList())); }