Exemplo n.º 1
0
        public static IEnumerable <ValidationResult> Validate(this UpdateProductOptionDto updateProductOptionDto)
        {
            if (string.IsNullOrWhiteSpace(updateProductOptionDto.Name) && string.IsNullOrWhiteSpace(updateProductOptionDto.Description))
            {
                yield return(new ValidationResult(nameof(updateProductOptionDto), "Product option should at least have one field to update", Constants.Constants.ModelInvalidError));
            }

            if (updateProductOptionDto.Name.StartsWith("-") ||
                updateProductOptionDto.Name.EndsWith("-"))
            {
                yield return(new ValidationResult(nameof(updateProductOptionDto.Name), "Invalid product option name", Constants.Constants.ModelInvalidError));
            }
        }
        public async Task <IActionResult> UpdateOption(Guid productId, Guid id, UpdateProductOptionDto updateProductOptionDto)
        {
            var productOption = await _productOptionService.GetProductOptionByIdAsync(productId, id);

            if (productOption == null)
            {
                return(NotFound(Constants.ProductOptionNotFound));
            }

            var updatedProductOption = await _productOptionService.UpdateProductOptionAsync(productOption, updateProductOptionDto);

            var productOptionDto = _mapper.Map <ProductOption, ProductOptionDto>(updatedProductOption);

            return(Ok(productOptionDto));
        }
        public async Task UpdateProductOption_ReturnsBadRequest_IfNoValueInUpdateProductOptionDto()
        {
            //Arrange
            var productId             = Guid.NewGuid();
            var optionId              = Guid.NewGuid();
            var existingProductOption = _fixture.Create <ProductOption>();
            var updateOptionDto       = new UpdateProductOptionDto();
            var validationResults     = _fixture.CreateMany <ValidationResult>(2);

            _productOptionsService.Setup(x => x.GetProductOptionByIdAsync(productId, optionId))
            .ReturnsAsync(existingProductOption);
            _productOptionsService.Setup(x => x.UpdateProductOptionAsync(existingProductOption, updateOptionDto))
            .ThrowsAsync(new ValidationException(validationResults));

            //Act
            Func <Task> act = async() => await _productOptionsController.UpdateOption(productId, optionId, updateOptionDto);

            //Assert
            await act.Should().ThrowAsync <ValidationException>();
        }
        public async Task <ProductOption> UpdateProductOptionAsync(ProductOption existingProductOption, UpdateProductOptionDto productOption)
        {
            var validationResults = productOption.Validate();
            var validations       = validationResults.ToList();

            if (validations.Any())
            {
                throw new ValidationException(validations);
            }

            if (!string.IsNullOrWhiteSpace(productOption.Name))
            {
                existingProductOption.Name = productOption.Name;
            }

            if (!string.IsNullOrWhiteSpace(productOption.Description))
            {
                existingProductOption.Description = productOption.Description;
            }

            return(await _repository.UpdateAsync(existingProductOption));
        }