コード例 #1
0
        public async Task When_Change_Quantity_Is_Made_With_Zero_Then_Item_Should_Be_Removed_From_The_Basket()
        {
            //-----------------------------------------------------------------------------------------------------------
            // Arrange
            //-----------------------------------------------------------------------------------------------------------
            Guid      basketId               = Faker.Random.Uuid();
            Guid      itemId                 = Faker.Random.Uuid();
            const int quantity               = 2;
            const int toQuantity             = 0;
            var       addItemToBasketCommand = new AddItemToBasketCommand(basketId, itemId, quantity);
            var       changeQuantityCommand  = new ChangeQuantityCommand(basketId, itemId, toQuantity);

            //-----------------------------------------------------------------------------------------------------------
            // Act
            //-----------------------------------------------------------------------------------------------------------
            await Sut.Send(addItemToBasketCommand);

            await Sut.Send(changeQuantityCommand);

            //-----------------------------------------------------------------------------------------------------------
            // Assert
            //-----------------------------------------------------------------------------------------------------------
            Basket basket = await Read(async context => { return(await context.Baskets.Include(x => x.Items).FirstOrDefaultAsync(x => x.Id == basketId)); });

            basket.Should().NotBeNull();
            basket.Items.Count.Should().Be(0);
            basket.Items.Should().NotContain(x => x.Id == itemId);
        }
コード例 #2
0
        public void it_adds_product_to_cart_and_prints_it_out_using_command_pattern()
        {
            // Arrange
            var shoppingCartRepository = new ShoppingCartRepository();
            var productsRepository     = new ProductsRepository();

            Product product = productsRepository.FindBy("SM7B");

            var addToCartCommand = new AddToCartCommand(shoppingCartRepository,
                                                        productsRepository,
                                                        product);

            var increaseQuantityCommand = new ChangeQuantityCommand(ChangeQuantityCommand.Operation.Increase,
                                                                    shoppingCartRepository,
                                                                    productsRepository,
                                                                    product);

            var manager = new CommandManager();

            manager.Invoke(addToCartCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);

            PrintCart(shoppingCartRepository);

            manager.Undo();

            PrintCart(shoppingCartRepository);
        }
コード例 #3
0
        private static void TestCommand()
        {
            var shoppingCartRepository = new ShoppingCartRepository();
            var productsRepository     = new ProductsRepository();

            var product = productsRepository.FindBy("SM7B");

            var addToCartCommand = new AddToCartCommand(shoppingCartRepository,
                                                        productsRepository,
                                                        product);

            var increaseQuantityCommand = new ChangeQuantityCommand(
                ChangeQuantityCommand.Operation.Increase,
                shoppingCartRepository,
                productsRepository,
                product);

            var manager = new CommandManager();

            manager.Invoke(addToCartCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);

            ShoppingCartRepository.PrintCart(shoppingCartRepository);

            manager.Undo();

            ShoppingCartRepository.PrintCart(shoppingCartRepository);
        }
コード例 #4
0
        public async Task Quantity_Should_Be_Changed_When_New_Quantity_Provided_For_Same_Item()
        {
            //-----------------------------------------------------------------------------------------------------------
            // Arrange
            //-----------------------------------------------------------------------------------------------------------
            Guid      basketId               = Faker.Random.Uuid();
            Guid      itemId                 = Faker.Random.Uuid();
            const int quantity               = 2;
            const int toQuantity             = 4;
            var       addItemToBasketCommand = new AddItemToBasketCommand(basketId, itemId, quantity);
            var       changeQuantityCommand  = new ChangeQuantityCommand(basketId, itemId, toQuantity);

            //-----------------------------------------------------------------------------------------------------------
            // Act
            //-----------------------------------------------------------------------------------------------------------
            await Sut.Send(addItemToBasketCommand);

            await Sut.Send(changeQuantityCommand);

            //-----------------------------------------------------------------------------------------------------------
            // Assert
            //-----------------------------------------------------------------------------------------------------------
            Basket basket = await Read(async context => { return(await context.Baskets.Include(x => x.Items).FirstOrDefaultAsync(x => x.Id == basketId)); });

            basket.Should().NotBeNull();
            basket.Items.Count.Should().Be(1);
            basket.Items.Should().Contain(x => x.Id == itemId);
            basket.Items.First(x => x.Id == itemId).Quantity.Should().Be(toQuantity);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: paulaonea/shopping-cart
        public static void Main(string[] args)
        {
            var shoppingCartRepository = new ShoppingCartRepository();
            var productRepository      = new ProductRepository();

            var product = productRepository.FindBy("SM7B");

            var addToCartCommand        = new AddToCartCommand(shoppingCartRepository, productRepository, product);
            var increaseQuantityCommand = new ChangeQuantityCommand(ChangeQuantityCommand.Operation.Increase,
                                                                    productRepository,
                                                                    shoppingCartRepository,
                                                                    product);
            var manager = new CommandManager();

            manager.Invoke(addToCartCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);

            PrintCart(shoppingCartRepository);

            manager.Undo();
            PrintCart(shoppingCartRepository);
        }
コード例 #6
0
        public ProductViewModel(ShoppingCartViewModel shoppingCartViewModel,
                                IShoppingCartRepository shoppingCartRepository,
                                IProductRepository productRepository,
                                Product product,
                                int quantity = 0)
        {
            Product  = product;
            Quantity = quantity;

            var addToCartCommand =
                new AddToCartCommand(shoppingCartRepository, productRepository, product);

            var increaseQuantityCommand =
                new ChangeQuantityCommand(ChangeQuantityCommand.Operation.Increase,
                                          shoppingCartRepository,
                                          productRepository,
                                          product);

            var decreaseQuantityCommand =
                new ChangeQuantityCommand(ChangeQuantityCommand.Operation.Decrease,
                                          shoppingCartRepository,
                                          productRepository,
                                          product);

            var removeFromCartCommand =
                new RemoveFromCartCommand(shoppingCartRepository,
                                          productRepository,
                                          product);

            AddToCartCommand = new RelayCommand(
                execute: () => {
                addToCartCommand.Execute();
                shoppingCartViewModel.Refresh();
            },
                canExecute: () => addToCartCommand.CanExecute());

            IncreaseQuantityCommand = new RelayCommand(
                execute: () => {
                increaseQuantityCommand.Execute();
                shoppingCartViewModel.Refresh();
            },
                canExecute: () => increaseQuantityCommand.CanExecute());

            DecreaseQuantityCommand = new RelayCommand(
                execute: () => {
                decreaseQuantityCommand.Execute();
                shoppingCartViewModel.Refresh();
            },
                canExecute: () => decreaseQuantityCommand.CanExecute());

            RemoveFromCartCommand = new RelayCommand(
                execute: () => {
                removeFromCartCommand.Execute();
                shoppingCartViewModel.Refresh();
            },
                canExecute: () => removeFromCartCommand.CanExecute());
        }
コード例 #7
0
        public void it_()
        {
            // Arrange
            var shoppingCartRepository = new ShoppingCartRepository();
            var productsRepository     = new ProductsRepository();

            Product product = productsRepository.FindBy("SM7B");

            var addToCartCommand = new AddToCartCommand(shoppingCartRepository,
                                                        productsRepository,
                                                        product);

            var increaseQuantityCommand = new ChangeQuantityCommand(ChangeQuantityCommand.Operation.Increase,
                                                                    shoppingCartRepository,
                                                                    productsRepository,
                                                                    product);

            var removeAllFromCart = new RemoveAllFromCart(shoppingCartRepository,
                                                          productsRepository,
                                                          product);

            var manager = new CommandManager();

            manager.Invoke(addToCartCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);

            PrintCart(shoppingCartRepository);

            manager.Undo();

            PrintCart(shoppingCartRepository);

            manager.Invoke(addToCartCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);
            manager.Invoke(increaseQuantityCommand);

            PrintCart(shoppingCartRepository);

            manager.Invoke(removeAllFromCart);

            PrintCart(shoppingCartRepository);
        }
コード例 #8
0
        private static void Main(string[] args)
        {
            var shoppingCartRepository = new ShoppingCartRepository();
            var productsRepository     = new ProductsRepository();

            var product1 = productsRepository.FindBy("SM7B");
            var product2 = productsRepository.FindBy("EOSR1");

            var addProduct1ToCartCommand = new AddToCartCommand(
                shoppingCartRepository,
                productsRepository,
                product1);

            var addProduct2ToCartCommand = new AddToCartCommand(
                shoppingCartRepository,
                productsRepository,
                product2);

            var increaseProduct1QuantityCommand = new ChangeQuantityCommand(
                ChangeQuantityCommand.Operation.Increase,
                shoppingCartRepository,
                productsRepository,
                product1);

            var manager = new CommandManager();

            manager.Invoke(addProduct1ToCartCommand);
            manager.Invoke(addProduct2ToCartCommand);
            manager.Invoke(increaseProduct1QuantityCommand);
            manager.Invoke(increaseProduct1QuantityCommand);
            manager.Invoke(increaseProduct1QuantityCommand);

            shoppingCartRepository.PrintCart();

            manager.Undo();

            Console.WriteLine("--After Undoing--");
            shoppingCartRepository.PrintCart();

            // shoppingCartRepository.Add(product);
            // shoppingCartRepository.IncreaseQuantity(product.ArticleId);
            // shoppingCartRepository.IncreaseQuantity(product.ArticleId);
            // shoppingCartRepository.IncreaseQuantity(product.ArticleId);
            // shoppingCartRepository.IncreaseQuantity(product.ArticleId);
        }
コード例 #9
0
        public void Change_Quantiy_Should_Throw_AggregateNotFoundException_When_Basket_Does_Not_Exist()
        {
            //-----------------------------------------------------------------------------------------------------------
            // Arrange
            //-----------------------------------------------------------------------------------------------------------
            Guid      basketId   = Faker.Random.Uuid();
            Guid      itemId     = Faker.Random.Uuid();
            const int toQuantity = 4;

            var changeQuantityCommand = new ChangeQuantityCommand(basketId, itemId, toQuantity);

            //-----------------------------------------------------------------------------------------------------------
            // Act
            //-----------------------------------------------------------------------------------------------------------
            Func <Task> act = () => Sut.Send(changeQuantityCommand);

            //-----------------------------------------------------------------------------------------------------------
            // Assert
            //-----------------------------------------------------------------------------------------------------------
            act.Should().Throw <Exceptions.AggregateNotFoundException>().WithMessage(string.Format(Messages.AggregateNotFoundExceptionMessage, basketId));
        }
コード例 #10
0
 public async Task Handle(ChangeQuantityCommand request, CancellationToken cancellationToken) =>
 await When(request, async (command, context, cToken) =>