public void IntentarSustraerStockCuandoProductoTieneStock()
        {
            var context = ApplicationDbContextInMemory.Get();

            var productoId = 1;
            var stock      = 1;

            context.Stocks.Add(new ProductoEnStock
            {
                ProductoEnStockId = 1,
                ProductoId        = productoId,
                Stock             = stock
            });

            context.SaveChanges();

            var handler = new ProductoEnStockActualizarEventHandler(context, GetLogger);

            handler.Handle(new ProductoEnStockActualizarComnando {
                Items = new List <ProductoEnStockActualizarItem>()
                {
                    new ProductoEnStockActualizarItem {
                        ProductoId = productoId,
                        Stock      = stock,
                        Accion     = ProductoEnStockAccion.Substract
                    }
                }
            }, new CancellationToken()).Wait();
        }
        public void IntentarAgregarStockCuandoProductoExiste()
        {
            var context = ApplicationDbContextInMemory.Get();

            var productoId = 5;

            context.Stocks.Add(new ProductoEnStock
            {
                ProductoEnStockId = 5,
                ProductoId        = productoId,
                Stock             = 3
            });

            context.SaveChanges();

            var handler = new ProductoEnStockActualizarEventHandler(context, GetLogger);

            handler.Handle(new ProductoEnStockActualizarComnando
            {
                Items = new List <ProductoEnStockActualizarItem>()
                {
                    new ProductoEnStockActualizarItem {
                        ProductoId = productoId,
                        Stock      = 3,
                        Accion     = ProductoEnStockAccion.Add
                    }
                }
            }, new CancellationToken()).Wait();

            var stockIdDb = context.Stocks.Single(x => x.ProductoId == productoId).Stock;

            Assert.AreEqual(stockIdDb, 6);
        }
        public void IntentarSustraerStockCuandoProductoNoTieneStock()
        {
            var context = ApplicationDbContextInMemory.Get();

            var productoId = 2;
            var stock      = 1;

            context.Stocks.Add(new ProductoEnStock
            {
                ProductoEnStockId = 2,
                ProductoId        = productoId,
                Stock             = stock
            });

            context.SaveChanges();

            var handler = new ProductoEnStockActualizarEventHandler(context, GetLogger);

            try
            {
                handler.Handle(new ProductoEnStockActualizarComnando
                {
                    Items = new List <ProductoEnStockActualizarItem>()
                    {
                        new ProductoEnStockActualizarItem
                        {
                            ProductoId = productoId,
                            Stock      = 2,
                            Accion     = ProductoEnStockAccion.Substract
                        }
                    }
                }, new CancellationToken()).Wait();
            }
            catch (AggregateException ae)
            {
                var excepcion = ae.GetBaseException();

                if (excepcion is ProductoEnStockActualizarComnandoExcepcion)
                {
                    throw new ProductoEnStockActualizarComnandoExcepcion(excepcion?.InnerException?.Message);
                }
            }
        }