예제 #1
0
        public void UpdateProductValidCommand()
        {
            var command = new UpdateProductCommand(new Guid(), "Nome Produto 1", decimal.Parse("10,00"), "stringBase64");

            command.Validate();
            Assert.AreEqual(command.Valid, true);
        }
예제 #2
0
        public void UpdateProductInvalidCommand()
        {
            var command = new UpdateProductCommand(new Guid(), "", decimal.Parse("0"), null);

            command.Validate();
            Assert.AreEqual(command.Valid, false);
        }
        public IActionResult Update(UpdateProductCommand command)
        {
            var validation = command.Validate();

            if (validation.HasErrors)
            {
                return(BadRequest(validation.ConvertToJson()));
            }

            _commandHandler.Handle(command);
            return(Ok());
        }
        public async Task <ICommandResult> Handle(UpdateProductCommand request, CancellationToken cancellationToken)
        {
            request.Validate();

            if (!request.IsValid)
            {
                return(new CommandResult(false, "Problemas ao atualizar o produto..", request.Notifications));
            }

            var requestedProduct = await _productRepository.GetProductAsync(request.Id);

            if (requestedProduct is null)
            {
                return(new CommandResult(false, "O Produto não foi encontrado", null));
            }

            var productData = new ProductData(request.Name, request.Description);

            var productImage = _productFileService.ProcessProductImage(request.ImageBase64);

            productData.ChangeImage(productImage);

            var datetimeProduct    = new DateTimeProduct(request.PurchaseDate, requestedProduct.DateTimeProduct.ExpirationDate);
            var productInformation = new ProductInformation(request.Quantity, request.MeasurementUnit);

            requestedProduct.ChangeProductData(productData);
            requestedProduct.ChangeDateTimeProduct(datetimeProduct);
            requestedProduct.ChangeProductInformation(productInformation);
            requestedProduct.ChangeStatus(request.ProductStatus);
            requestedProduct.ChangeCategory(request.Category);

            var updatedProduct = await _productRepository.UpdateProductAsync(requestedProduct);

            if (updatedProduct is null)
            {
                return(new CommandResult(false, "Problemas ao atualizar o produto..", null));
            }

            if (!updatedProduct.VerifyQuantity())
            {
                var buyingProduct      = true;
                var productDomainEvent = new ProductOperationDomainEvent(EventAction.UPDATE, updatedProduct, buyingProduct);

                await _domainEntityEventHandler.Raise(productDomainEvent);
            }

            return(new CommandResult(true, "Produto atualizado com sucesso!", request));
        }
        public async Task <ICommandResult> HandleAsync(UpdateProductCommand command)
        {
            command.Validate();
            if (command.Invalid)
            {
                return(new GenericCommandResult <ProductEntity>(false, command.Notifications));
            }

            var product = await _repository.GetAsync(command.Id);

            product.SetName(command.Name);
            product.SetPrice(command.Price);

            await _repository.UpdateAsync(product);

            return(new GenericCommandResult <ProductEntity>(true, product));
        }
        public void update_product_command_id_is_required()
        {
            // Given
            _sut.Id = Guid.Empty;

            // When
            var validation = _sut.Validate();

            // Then
            validation.HasErrors.Should().BeTrue();
            validation.Errors.First().Should().Be(ExceptionCodes.ID_IS_REQUIRED);
        }
예제 #7
0
        public ICommandResult Handle(UpdateProductCommand command)
        {
            command.Validate();
            if (command.Invalid)
            {
                return(new GenericCommandResult(false, "Ocorreu um erro na atualização do produto, verifique os dados...", command.Notifications));
            }

            Product product = _repository.GetById(command.Id);

            product.Name  = command.Name;
            product.Value = command.Value;
            product.Image = command.Image;

            _repository.Update(product);

            return(new GenericCommandResult(true, "Produto atualizado com sucesso", product));
        }
예제 #8
0
        public void Update_Product_With_Valid_Id()
        {
            _commandWithValidId.Validate();

            Assert.AreEqual(_commandWithValidId.Valid, true);
        }
예제 #9
0
        public void Update_Product_With_Invalid_Id()
        {
            _commandWithInvalidId.Validate();

            Assert.AreEqual(_commandWithInvalidId.Valid, false);
        }