public void AddItemToCart_shoppingCartItemWIthSameIdInCartDifferentName_DoNotSaveReturnBadRequest()
        {
            const string productId = "item-1";
            const double price     = 1;

            var cart = new CartBuilder()
                       .WithItems(new List <Item>
            {
                CreateItem(productId, "product name", price, 1)
            })
                       .Build();

            var fakeShoppingCartRepository = _mocker.GetMock <IShoppingCartRepository>();

            fakeShoppingCartRepository.Setup(x => x.FindById("cart-1")).Returns(cart);

            var target = _mocker.CreateInstance <ShoppingCartController>();

            var result = target.AddItemToCart("cart-1",
                                              CreateItemDto(productId, "other name", price, 2));

            Assert.IsType <BadRequestResult>(result.Result);

            fakeShoppingCartRepository.Verify(x => x.Update("cart-1", It.IsAny <Cart>()), Times.Never());
        }
        public void AddItemToCart_shoppingCartItemWIthSameIdInCartSameDetails_IncreaseItemCount()
        {
            const string productId   = "item-1";
            const string productName = "name";
            const double price       = 1;

            var cart = new CartBuilder()
                       .WithItems(new List <Item>
            {
                CreateItem(productId, productName, price, 2)
            })
                       .Build();

            var fakeShoppingCartRepository = _mocker.GetMock <IShoppingCartRepository>();

            fakeShoppingCartRepository.Setup(x => x.FindById("cart-1")).Returns(cart);

            var target = _mocker.CreateInstance <ShoppingCartController>();

            var result = target.AddItemToCart("cart-1",
                                              CreateItemDto(productId, productName, price, 3));

            Assert.IsType <OkResult>(result.Result);

            fakeShoppingCartRepository.Verify(x =>
                                              x.Update("cart-1", It.Is <Cart>(c => c.Items.Single().Quantity == 5)));
        }
        public void CalculateTotals_MoreThanOneItem_TotalEqualsCostPlusShipping()
        {
            var originAddress = CreateAddress(city: "city 1");

            _mocker.Use <IShippingCalculator>(new ShippingCalculator(originAddress));

            var destinationAddress = CreateAddress(city: "city 2");

            var target = _mocker.CreateInstance <CheckOutEngine>();

            var cart = new CartBuilder()
                       .WithShippingAddress(destinationAddress)
                       .WithShippingMethod(ShippingMethod.Standard)
                       .WithItems(new List <Item>
            {
                CreateItem(price: 2, quantity: 3),
                CreateItem(price: 4, quantity: 5)
            })
                       .Build();


            var result = target.CalculateTotals(cart);

            Assert.Equal(2 * 3 + 4 * 5 + result.ShippingCost, result.Total);
        }
        public void CalculateTotals_InvalidCouponExceptionThrown_ReturnBadRequest()
        {
            var coupon = CreateCoupon("coupon-1", CouponType.Amount, 100);
            var fakeCouponRepository = _mocker.GetMock <ICouponRepository>();

            fakeCouponRepository.Setup(x => x.FindById("coupon-1")).Returns(coupon);

            var cart = new CartBuilder()
                       .WithId("cart-1")
                       .Build();

            var fakeShoppingCartRepository = _mocker.GetMock <IShoppingCartRepository>();

            fakeShoppingCartRepository.Setup(x => x.FindById("cart-1"))
            .Returns(cart);     // I do not care about this result

            var fakeCheckoutEngine = _mocker.GetMock <ICheckOutEngine>();

            fakeCheckoutEngine
            .Setup(x => x.CalculateTotals(It.IsAny <Cart>()))
            .Returns(CreateCheckOutDto(total: 0));

            _mocker.Use <IAddressValidator>(new AddressValidator());
            _mocker.Use <ICouponEngine>(new CouponEngine());                          // we need a REAL coupon engine
            _mocker.Use <ICheckOutEngine>(_mocker.CreateInstance <CheckOutEngine>()); // we need a REAL checkout engine
            _mocker.Use(_mocker.CreateInstance <ShoppingCartManager>());

            var target = _mocker.CreateInstance <ShoppingCartController>();

            var result =
                target.CalculateTotals("cart-1", "coupon-1"); // cart id not use as fake cart repository was faked

            Assert.IsType <BadRequestResult>(result.Result);
        }
        public void AddItemToCart_shoppingCartItemWithSameIdNotInCart_CreateNewItem()
        {
            var cart = new CartBuilder()
                       .WithId("cart-1")
                       .WithItems(new List <Item> {
                CreateItem("other")
            })
                       .Build();

            string[] actualItemIds = null;
            var      fakeShoppingCartRepository = _mocker.GetMock <IShoppingCartRepository>();

            fakeShoppingCartRepository.Setup(x => x.FindById("cart-1")).Returns(cart);
            fakeShoppingCartRepository.Setup(x => x.Update("cart-1", It.IsAny <Cart>()))
            .Callback((string _, Cart c) =>
            {
                actualItemIds = c.Items.Select(i => i.ProductId).ToArray();
            });     // this is a trick to extract complex objects and using assert instead of using verify (see below)

            var target = _mocker.CreateInstance <ShoppingCartController>();

            var result = target.AddItemToCart("cart-1", CreateItemDto("item-1"));

            Assert.IsType <OkResult>(result.Result);

            // This is a verify that only looks like an assertion
            Assert.Equal(new[] { "other", "item-1" }, actualItemIds);

            /* This is the alternative, the problem is that when this test fail it is hard to know why
             *
             * fakeShoppingCartRepository.Verify(x => x.Update("cart-1",
             *  It.Is((Cart c )=> c.Items.Select(i => i.ProductId).ToArray() == new[] { "other", "item-1" })));
             */
        }
示例#6
0
        public static List <object[]> International()
        {
            Address     address     = Utility.AddressGenerate("Ukraine");
            CartBuilder cartFactory = new CartBuilder();

            return(cartFactory.GenerateInternational(address));
        }
示例#7
0
        public void Update_CartNotFound_DoNotFail()
        {
            var target = new FakeShoppingCartRepository(_databaseSettings);
            var cart1  = new CartBuilder().WithId(null).WithCustomerId("1").Build();

            target.Update(Invalid_ID, cart1);
        }
示例#8
0
        private ICartBuilder GetCartBuilder()
        {
            var catalogApi   = GetCatalogApiClient();
            var cartApi      = GetCartApiClient();
            var marketingApi = GetMarketingApiClient();
            var inventoryApi = GetInventoryApiClient();
            var pricingApi   = GetPricingApiClient();
            var searchApi    = GetSearchApiClient();
            var customerApi  = GetCustomerApiClient();
            var orderApi     = GetOrderApiClient();
            var quoteApi     = GetQuoteApiClient();
            var storeApi     = GetStoreApiClient();

            var cacheManager       = new Mock <ILocalCacheManager>().Object;
            var workContextFactory = new Func <WorkContext>(GetTestWorkContext);
            var promotionEvaluator = new PromotionEvaluator(marketingApi);

            var pricingService       = new PricingServiceImpl(pricingApi, null, promotionEvaluator);
            var customerService      = new CustomerServiceImpl(workContextFactory, customerApi, orderApi, quoteApi, storeApi, null, cacheManager);
            var catalogSearchService = new CatalogSearchServiceImpl(workContextFactory, catalogApi, inventoryApi, searchApi, pricingService, customerService, null);

            var retVal = new CartBuilder(workContextFactory, cartApi, catalogSearchService, cacheManager, promotionEvaluator, null, null);

            return(retVal);
        }
示例#9
0
        public static List <object[]> SameCountry()
        {
            Address     address     = Utility.AddressGenerate("USA", "New York");
            CartBuilder cartFactory = new CartBuilder();

            return(cartFactory.GenerateSameCountry(address));
        }
示例#10
0
        private ICartBuilder GetCartBuilder()
        {
            var catalogApi   = GetCatalogApiClient();
            var cartApi      = GetCartApiClient();
            var marketingApi = GetMarketingApiClient();
            var inventoryApi = GetInventoryApiClient();
            var pricingApi   = GetPricingApiClient();
            var customerApi  = GetCustomerApiClient();
            var orderApi     = GetOrderApiClient();
            var quoteApi     = GetQuoteApiClient();
            var storeApi     = GetStoreApiClient();

            var cacheManager       = new Mock <ILocalCacheManager>().Object;
            var workContextFactory = new Func <WorkContext>(GetTestWorkContext);
            var promotionEvaluator = new PromotionEvaluator(marketingApi);
            var inventoryService   = new Mock <IInventoryService>().Object;

            var pricingService       = new PricingServiceImpl(pricingApi, GetTaxEvaluator(), promotionEvaluator, inventoryService);
            var customerService      = new CustomerServiceImpl(workContextFactory, customerApi, orderApi, quoteApi, storeApi, GetSubscriptionModuleApiClient(), cacheManager);
            var catalogSearchService = new CatalogSearchServiceImpl(workContextFactory, catalogApi, inventoryApi, pricingService, customerService, GetSubscriptionModuleApiClient(), GetProductAvailabilityService(), inventoryService);

            var retVal = new CartBuilder(workContextFactory, cartApi, catalogSearchService, cacheManager, promotionEvaluator, GetTaxEvaluator(), GetSubscriptionModuleApiClient(), GetProductAvailabilityService());

            return(retVal);
        }
        public void AddToCartTest()
        {
            var product = new ProductBuilder().Constructer(ProductName, Desc, Quantity, Price);
            var cart    = new CartBuilder().Constructer(CartName);

            cart = cart.AddToCart(product.Id, 1);
            Assert.Single(cart.Build().CartItems);
            Assert.IsType <CartItem>(cart.Build().CartItems.FirstOrDefault());
        }
示例#12
0
        public CartBuilderTests()
        {
            this.fixture = this.CreateOmitOnRecursionFixture();

            this.catalogService = Substitute.For <ICatalogService>();
            this.cartMapper     = Substitute.For <ICartMapper>();

            this.cartBuilder = new CartBuilder(this.catalogService, this.cartMapper);
        }
        public CartBuilderTests()
        {
            this.fixture = new Fixture().Customize(new OmitOnRecursionCustomization());

            this.catalogService = Substitute.For <ICatalogService>();
            this.cartMapper     = Substitute.For <ICartMapper>();

            this.cartBuilder = new CartBuilder(this.catalogService, this.cartMapper);
        }
        public void FindCartItemFalseTest()
        {
            var product = new ProductBuilder().Constructer(ProductName, Desc, Quantity, Price);
            var cart    = new CartBuilder().Constructer(CartName);

            cart = cart.AddToCart(product.Id, 1);

            Assert.False(cart.FindCartItem(new Guid()));
        }
        public void RaiseCartCreatedEvent()
        {
            var item = new CartBuilder().Constructer(CartName);

            item.Build().CreatedEvent();

            Assert.Single(item.Build().Events);
            Assert.IsType <CartCreated>(item.Build().Events.First());
        }
        public void CalculateTotals_NoShippingAddress_ThrowException()
        {
            _mocker.Use <IShippingCalculator>(new ShippingCalculator());
            var target = _mocker.CreateInstance <CheckOutEngine>();
            var cart   = new CartBuilder()
                         .WithShippingAddress(null)
                         .Build();

            Assert.Throws <MissingDataException>(() => target.CalculateTotals(cart));
        }
        public GetCartImplTests()
        {
            var currentUser = new User();

            Session.Transact(session => session.Save(currentUser));
            CurrentRequestData.CurrentUser = currentUser;
            _getUserGuid = A.Fake <IGetUserGuid>();
            _cartBuilder = new CartBuilder(A.Fake <IAssignBasicCartInfo>(), A.Fake <IAssignShippingInfo>(),
                                           A.Fake <IAssignCartDiscountInfo>(), A.Fake <IAssignGiftCardInfo>(),
                                           A.Fake <IAssignRewardPointInfo>(), A.Fake <IAssignPaymentInfo>(), _getUserGuid);
        }
        public void AddCartAndSetId()
        {
            var repository = GetRepository();
            var item       = new CartBuilder().Constructer(CartName).Build();

            repository.Add(item);

            var newItem = repository.List <Cart>().FirstOrDefault();

            Assert.Equal(item, newItem);
            Assert.True(newItem?.Id != null);
        }
        public void CalculateShippingCost_NoItems_Return0(Address source, Address destination)
        {
            var target = new ShippingCalculator(source);

            var cart = new CartBuilder()
                       .WithShippingAddress(destination)
                       .Build();

            var result = target.CalculateShippingCost(cart);

            Assert.Equal(0, result);
        }
        public void Finds_A_New_Cart()
        {
            var cartBuilder            = new CartBuilder();
            var address                = Builders.Utility.AddressGenerate();
            var shoppingCartRepository = new ShoppingCartRepository(_shoppingCartDatabaseSettings);
            var cart       = cartBuilder.GenerateCart(address, CustomerType.Premium, ShippingMethod.Expedited);
            var storedCart = shoppingCartRepository.Create(cart);

            var result = shoppingCartRepository.FindById(storedCart.Id);

            result.Should().BeEquivalentTo(cart);
        }
        public void RemoveCartItemFalseTest()
        {
            var product = new ProductBuilder().Constructer(ProductName, Desc, Quantity, Price);
            var cart    = new CartBuilder().Constructer(CartName);

            cart = cart.AddToCart(product.Id, 1);
            CartItem item = cart.Build().CartItems.FirstOrDefault();

            Assert.Single(cart.Build().CartItems);
            Assert.True(cart.RemoveCartItem(new Guid()));
            Assert.Single(cart.Build().CartItems);
        }
示例#22
0
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            CategoryBuilder.BuildCategory(modelBuilder);
            OrderBuilder.BuildOrder(modelBuilder);
            OrderLineBuilder.BuildOrderLine(modelBuilder);
            CartBuilder.BuildCart(modelBuilder);
            ProductBuilder.BuildProduct(modelBuilder);
            UserProfileBuilder.BuildUserProfile(modelBuilder);
            CartLineBuilder.BuildCartLine(modelBuilder);

            base.OnModelCreating(modelBuilder);
        }
        public void CalculateShippingCost_NoItems_Return0(Address source, Address destination)
        {
            // We could have used auto mocking container here as well, however at the moment this initialization is simple as it is
            var target = new ShippingCalculator(source);

            var cart = new CartBuilder()
                       .WithShippingAddress(destination)
                       .Build();

            var result = target.CalculateShippingCost(cart);

            Assert.Equal(0, result);
        }
示例#24
0
        public void RemoveById_CartFound_RemoveFromDb()
        {
            var target = new FakeShoppingCartRepository(_databaseSettings);
            var cart1  = new CartBuilder().WithId(null).WithCustomerId("1").Build();

            target.Create(cart1);

            target.Remove(cart1.Id);

            var result = target.FindById(cart1.Id);

            Assert.Null(result);
        }
        public void RemoveItemFromCart_ItemWithProductIdNotFoundNotFound_ReturnNotFound()
        {
            var cart = new CartBuilder().Build();
            var fakeShoppingCartRepository = _mocker.GetMock <IShoppingCartRepository>();

            fakeShoppingCartRepository.Setup(x => x.FindById("cart-1")).Returns(cart);

            var target = _mocker.CreateInstance <ShoppingCartController>();

            var result = target.RemoveItemFromCart("cart-1", "item-1");

            Assert.IsType <NotFoundResult>(result);
        }
        public void AccumulateCartItemQuantityTest()
        {
            var product = new ProductBuilder().Constructer(ProductName, Desc, Quantity, Price);
            var cart    = new CartBuilder().Constructer(CartName);

            cart = cart.AddToCart(product.Id, 1);
            CartItem item = cart.Build().CartItems.FirstOrDefault();

            cart = cart.AccumulateCartItemQuantity(item.Id, 2);

            Assert.Single(cart.Build().CartItems);
            Assert.Equal(3, cart.Build().CartItems.FirstOrDefault().Quantity);
        }
示例#27
0
        public void Inicialize()
        {
            driver = new ChromeDriver();

            this.bestSellersBuilder = new BestSellersBuilder(driver);
            this.addToCartBuilder   = new AddToCartBuilder(driver);
            this.cartBuilder        = new CartBuilder(driver);
            this.enumHelper         = new EnumHelper();
            this.wait = new WebDriverWait(driver, System.TimeSpan.FromSeconds(30));

            driver.Navigate().GoToUrl("http://automationpractice.com");

            driver.Manage().Window.Maximize();
        }
示例#28
0
        public void Update_CartFound_UpdateValue()
        {
            var target = new FakeShoppingCartRepository(_databaseSettings);
            var cart1  = new CartBuilder().WithId(null).WithCustomerId("1").Build();

            target.Create(cart1);
            cart1.CustomerId = "other";

            target.Update(cart1.Id, cart1);

            var result = target.FindById(cart1.Id);

            Assert.Equal("other", cart1.CustomerId);
        }
示例#29
0
        public void CalculateTotals_DiscountBasedOnCustomerType(CustomerType customerType, double expectedDiscount)
        {
            var address = CreateAddress();

            var target = new CheckOutEngine(new ShippingCalculator(address), _mapper, new CouponEngine());

            var cart = new CartBuilder()
                       .WithCustomerType(customerType)
                       .WithShippingAddress(address)
                       .Build();

            var result = target.CalculateTotals(cart);

            Assert.Equal(expectedDiscount, result.CustomerDiscount);
        }
        public void Creates_A_Cart()
        {
            var cartBuilder            = new CartBuilder();
            var address                = Builders.Utility.AddressGenerate();
            var shoppingCartRepository = new ShoppingCartRepository(_shoppingCartDatabaseSettings);
            var cartOne                = cartBuilder.GenerateCart(address, CustomerType.Premium, ShippingMethod.Expedited);
            var cartTwo                = cartBuilder.GenerateCart(address, CustomerType.Premium, ShippingMethod.Express);
            var cartThree              = cartBuilder.GenerateCart(address, CustomerType.Premium, ShippingMethod.Priority);

            shoppingCartRepository.Create(cartOne);
            shoppingCartRepository.Create(cartTwo);
            shoppingCartRepository.Create(cartThree);

            var result = shoppingCartRepository.FindAll();

            result.Should().HaveCount(3);
        }