예제 #1
0
        public async Task <IActionResult> UpdateOptionAsync(Guid id, Guid optionId, UpdateProductOption productOption)
        {
            Guard.Against.NullGuid(id, nameof(id));
            Guard.Against.NullGuid(optionId, nameof(optionId));

            if (!ModelState.IsValid)
            {
                string messages = string.Join("; ", ModelState.Values
                                              .SelectMany(x => x.Errors)
                                              .Select(x => x.ErrorMessage));
                return(BadRequest(ModelState));
            }

            // Can use AutoMapper normally but ignoring for this
            var productOptionModel = new ProductOption
            {
                Id          = optionId,
                ProductId   = id,
                Name        = productOption.Name,
                Description = productOption.Description,
            };
            await _productOptionsRepository.UpdateAsync(productOptionModel);

            return(Ok());
        }
예제 #2
0
        public async Task DeleteProductOptionAsync_IsSuccessful_ReturnsTrue()
        {
            // Arrange
            var productId = Guid.NewGuid();
            var optionId  = Guid.NewGuid();
            var dto       = new UpdateProductOption()
            {
                Name        = "Product Option Name 2",
                Description = "Product Option Description 2",
            };
            var option = new ProductOption
            {
                Name        = "Product Option Name 1",
                Description = "Product Option Description 1"
            };

            _mockProductRepository
            .Setup(m => m.GetProductOptionAsync(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .ReturnsAsync(option);

            _mockProductRepository
            .Setup(m => m.DeleteProductOptionAsync(It.IsAny <Guid>()))
            .ReturnsAsync(true);

            // Act
            var result = await _sut.DeleteProductOptionAsync(productId, optionId);

            // Assert
            Assert.That(result, Is.True);
        }
예제 #3
0
        public async Task <IActionResult> UpdateOption(Guid id, Guid optionId, UpdateProductOption request)
        {
            _logger.LogInformation($"[PUT] /products/{id}/options/{optionId}");

            var result = await _productService.UpdateProductOptionAsync(id, optionId, request);

            return(Ok(result));
        }
예제 #4
0
        public void UpdateProductOptionAsync_OptionNotFound_ThrowsProductOptionNotFoundException()
        {
            // Arrange
            var productId = Guid.NewGuid();
            var optionId  = Guid.NewGuid();
            var dto       = new UpdateProductOption()
            {
                Name        = "Product Option Name 2",
                Description = "Product Option Description 2",
            };

            _mockProductRepository
            .Setup(m => m.GetProductOptionAsync(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .ReturnsAsync(null as ProductOption);

            // Assert
            Assert.That(() => _sut.UpdateProductOptionAsync(productId, optionId, dto), Throws.Exception.TypeOf <ProductOptionNotFoundException>());
        }
예제 #5
0
        public async Task UpdateProductOptionAsync_IsSuccessful_ReturnsTrue()
        {
            // Arrange
            var productId = Guid.NewGuid();
            var optionId  = Guid.NewGuid();
            var dto       = new UpdateProductOption()
            {
                Name        = "Product Option Name 2",
                Description = "Product Option Description 2",
            };
            var option = new ProductOption
            {
                Name        = "Product Option Name 1",
                Description = "Product Option Description 1"
            };
            var updatedOption = new ProductOption
            {
                Name        = "Product Option Name 2",
                Description = "Product Option Description 2"
            };

            _mockProductRepository
            .Setup(m => m.GetProductOptionAsync(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .ReturnsAsync(option);

            _mockProductRepository
            .Setup(m => m.UpdateProductOptionAsync(It.IsAny <ProductOption>()))
            .ReturnsAsync(updatedOption);

            // Act
            var result = await _sut.UpdateProductOptionAsync(productId, optionId, dto);

            // Assert
            Assert.AreEqual(updatedOption.Name, result.Name);
            Assert.AreEqual(updatedOption.Description, result.Description);
        }
예제 #6
0
        public async Task <ProductOption> UpdateProductOptionAsync(Guid productId, Guid optionId, UpdateProductOption dto)
        {
            _logger.LogInformation($"Updating product option for product with id `{productId}` and option id `{optionId}`");

            var option = await _productRepository.GetProductOptionAsync(productId, optionId);

            if (option == null)
            {
                throw new ProductOptionNotFoundException($"Could not find option with id `{optionId}` on product with id `{productId}`.");
            }

            return(await _productRepository.UpdateProductOptionAsync(dto.ToProductOption(productId, optionId)));
        }
예제 #7
0
        public async Task <ActionResult <ViewProductOption> > UpdateProductOption(Guid id, Guid optionId, UpdateProductOption updateProductOption)
        {
            try
            {
                var productOption = await _productOptionsService.GetProductOption(id, optionId);

                if (productOption == null)
                {
                    return(NotFound());
                }


                var updatedProductOption = await _productOptionsService.UpdateProductOption(id, optionId, updateProductOption);

                return(Ok(updatedProductOption));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(StatusCode(500, new ApiResponse {
                    Result = 1, Message = ex.Message
                }));
            }
        }
예제 #8
0
        public async Task <ViewProductOption> UpdateProductOption(Guid productId, Guid optionId, UpdateProductOption updateProductOption)
        {
            var productOption = await GetOptionInDb(productId, optionId);

            _mapper.Map <UpdateProductOption, ProductOptions>(updateProductOption, productOption);

            await _context.SaveChangesAsync();

            return(_mapper.Map <ViewProductOption>(productOption));
        }