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)); }