public async Task When_Move_Product_Other_Warehouse()
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();

            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            MoveProducts moveProducts = new MoveProducts
            {
                Quantity           = 3,
                ProductId          = Guid.Parse("B99BC862-C515-4D61-97D8-4D2B188A19F3"),
                CurrentWarehouseId = Guid.Parse("351BA5AA-C78D-4491-931A-76603D729392"),
                NewWarehouseId     = Guid.Parse("C347ED5D-1F33-49EE-A58D-B7F2310192A6")
            };

            //Act
            var result = await movementService.MoveProductOtherWarehouse(moveProducts);

            //Assert
            Assert.NotNull(result);
            Assert.True(result.ToList().Count > 0);
        }
        public async Task When_Remove_Products_Of_Warehouse_Is_Correct_Remove_Product_Warehouse()
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();
            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            RemoveProductWarehouse movement = new RemoveProductWarehouse
            {
                Quantity    = 2,
                ProductId   = Guid.Parse("B99BC862-C515-4D61-97D8-4D2B188A19F3"),
                WarehouseId = Guid.Parse("351BA5AA-C78D-4491-931A-76603D729392")
            };

            //Act
            var result = await movementService.RemoveProductsOfWarehouse(movement);

            //Assert
            Assert.True(result.Equals(true));
        }
        public async Task When_Error_Get_Total_Shopping_Of_Product(string id)
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();

            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            Exception exception = null;

            //Act
            try
            {
                await movementService.GetTotalShoppingProduct(Guid.Parse(id));
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            //Assert
            Assert.True("The product is out of stock and purchases" == exception.Message);
            Assert.True(typeof(BusinessException) == exception.GetType());
        }
        public async Task When_Error_Exceeds_Maximun_Limint_Products_In_Warehouse()
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();
            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            Movement movement = new Movement
            {
                Type        = true,
                Quantity    = 325,
                ProductId   = Guid.Parse("B99BC862-C515-4D61-97D8-4D2B188A19F3"),
                WarehouseId = Guid.Parse("C347ED5D-1F33-49EE-A58D-B7F2310192A6")
            };

            Exception exception = null;

            //Act
            try
            {
                await movementService.InsertProductWareahouse(movement);
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            //Assert
            Assert.True("Only 320 units of the selected product can be loaded." == exception.Message);
            Assert.True(typeof(BusinessException) == exception.GetType());
        }
        public async Task When_Error_Threshold_Products_In_Warehouse()
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();
            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            Movement movement = new Movement
            {
                Type        = true,
                Quantity    = 11000,
                ProductId   = Guid.Parse("B99BC862-C515-4D61-97D8-4D2B188A19F3"),
                WarehouseId = Guid.Parse("C347ED5D-1F33-49EE-A58D-B7F2310192A6")
            };

            Exception exception = null;

            //Act
            try
            {
                await movementService.InsertProductWareahouse(movement);
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            //Assert
            Assert.True("No more products can be loaded, as they exceed the established threshold. For logistical reasons there is no place to store them." == exception.Message);
            Assert.True(typeof(BusinessException) == exception.GetType());
        }
        public async Task When_Error_Move_Product_Other_Warehouse()
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();
            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            MoveProducts moveProducts = new MoveProducts
            {
                Quantity           = 23,
                ProductId          = Guid.Parse("A16C605C-0A1A-4E63-857F-68019CE2575C"),
                CurrentWarehouseId = Guid.Parse("351BA5AA-C78D-4491-931A-76603D729392"),
                NewWarehouseId     = Guid.Parse("C347ED5D-1F33-49EE-A58D-B7F2310192A6")
            };

            Exception exception = null;

            //Act
            try
            {
                await movementService.MoveProductOtherWarehouse(moveProducts);
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            //Assert
            Assert.True("product not found in the selected warehouse" == exception.Message);
            Assert.True(typeof(BusinessException) == exception.GetType());
        }
        public async Task When_Get_Total_Shopping_Of_Product(string id)
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();

            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            //Act
            var result = await movementService.GetTotalShoppingProduct(Guid.Parse(id));

            //Assert
            Assert.NotNull(result);
            Assert.True(result.ShoppingQuantity.Equals(27));
            Assert.True(result.TotalPriceShopping.Equals(7283.70M));
        }
        public async Task When_Remove_Products_Of_Warehouse_Is_No_Posible_Remove_Product_Warehouse()
        {
            //Arrange
            var loggerMock = new Mock <ILogger <MovementService> >();
            Mock <IGenericRepository <Movement> > repositoryMovementMock = new MockMovementRepository().Queryable();
            Mock <IGenericRepository <Product> >  repositoryProductMock  = new MockProductRepository()
                                                                           .GetProductByIdAsync()
                                                                           .UpdateProductAsync()
                                                                           .Queryable();
            var mockUnitOfWork = new MockUnitOfWork().MovementRepository(repositoryMovementMock)
                                 .ProductRepository(repositoryProductMock)
                                 .SaveChangesAsync();
            var movementService = new MovementService(mockUnitOfWork.Object, loggerMock.Object);

            RemoveProductWarehouse movement = new RemoveProductWarehouse
            {
                Quantity    = 35,
                ProductId   = Guid.Parse("B99BC862-C515-4D61-97D8-4D2B188A19F3"),
                WarehouseId = Guid.Parse("C347ED5D-1F33-49EE-A58D-B7F2310192A6")
            };
            Exception exception = null;

            //Act
            try
            {
                await movementService.RemoveProductsOfWarehouse(movement);
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            //Assert
            Assert.True("It is not possible to remove, the warehouse only contains 14 of this product" == exception.Message);
            Assert.True(typeof(BusinessException) == exception.GetType());
        }