public async Task UpdateProductOption_Returns_BadResponse_If_Exception_Is_Thrown()
        {
            //Arrange
            Mock <ILogger <ProductsController> > mockLogger = new Mock <ILogger <ProductsController> >();
            Mock <IProductService> mockProductService       = new Mock <IProductService>();

            Guid productId = Guid.Parse("de1287c0-4b15-4a7b-9d8a-dd21b3cafec3");
            Guid optionId  = Guid.Parse("845403f2-5179-4efb-820e-c1c120ed5930");

            UpdateProductOptionRequest updateProductOptionRequest = new UpdateProductOptionRequest
            {
                Name        = "Test Product Option 2",
                Description = "Description 2",
            };

            mockProductService.Setup(m => m.UpdateProductOption(productId, optionId, It.IsAny <UpdateProductOptionRequest>()))
            .ThrowsAsync(new Exception("Error occured!"))
            .Verifiable();

            ProductsController productsController = new ProductsController(mockLogger.Object, mockProductService.Object);

            //Act
            var response = await productsController.UpdateProductOption(productId, optionId, updateProductOptionRequest) as BadRequestObjectResult;

            var responseObject = response.Value as ApiResult;

            //Assert
            Assert.Equal("An error has occured", responseObject.Error);

            mockLogger.VerifyAll();
            mockProductService.VerifyAll();
        }
        public async Task UpdateProductOption_Updates_ProductOption_Successfully()
        {
            //Arrange
            Mock <IProductRepository>        mockProductRepository = new Mock <IProductRepository>();
            Mock <ILogger <ProductService> > mockLogger            = new Mock <ILogger <ProductService> >();

            mockProductRepository.Setup(m => m.GetProductOptionsByProductIdAndOptionsId(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .ReturnsAsync(new ProductOption())
            .Verifiable();

            mockProductRepository.Setup(m => m.UpdateProductOption(It.IsAny <ProductOption>()))
            .ReturnsAsync(true)
            .Verifiable();

            UpdateProductOptionRequest createProductOptionRequest = new UpdateProductOptionRequest
            {
                Name        = "Test Product Option",
                Description = "This is a desc"
            };

            ProductService productService = new ProductService(mockProductRepository.Object, mockLogger.Object);

            //Act
            var result = await productService.UpdateProductOption(Guid.Parse("01234567-89ab-cdef-0123-456789abcdef"), Guid.Parse("de1287c0-4b15-4a7b-9d8a-dd21b3cafec3"), createProductOptionRequest);

            //Assert
            Assert.True(result.IsSuccessful);

            mockProductRepository.VerifyAll();
            mockLogger.VerifyAll();
        }
        public async Task UpdateProductOption_Returns_OkResponse_Successfully()
        {
            //Arrange
            Mock <ILogger <ProductsController> > mockLogger = new Mock <ILogger <ProductsController> >();
            Mock <IProductService> mockProductService       = new Mock <IProductService>();

            Guid productId = Guid.Parse("de1287c0-4b15-4a7b-9d8a-dd21b3cafec3");
            Guid optionId  = Guid.Parse("845403f2-5179-4efb-820e-c1c120ed5930");

            UpdateProductOptionRequest updateProductOptionRequest = new UpdateProductOptionRequest
            {
                Name        = "Test Product Option 2",
                Description = "Description 2",
            };

            mockProductService.Setup(m => m.UpdateProductOption(productId, optionId, It.IsAny <UpdateProductOptionRequest>()))
            .ReturnsAsync(new UpdateProductOptionResponse
            {
                IsSuccessful = true
            })
            .Verifiable();

            ProductsController productsController = new ProductsController(mockLogger.Object, mockProductService.Object);

            //Act
            var response = await productsController.UpdateProductOption(productId, optionId, updateProductOptionRequest) as OkObjectResult;

            var responseObject = response.Value as UpdateProductOptionResponse;

            //Assert
            Assert.True(responseObject.IsSuccessful);

            mockLogger.VerifyAll();
            mockProductService.VerifyAll();
        }
Пример #4
0
        public UpdateProductOptionResponse UpdateProductOption(UpdateProductOptionRequest request)
        {
            var response = new UpdateProductOptionResponse {
                Errors = new List <Error>()
            };

            try
            {
                Repository.UpdateProductOption(request.ProductOptionEntity);
                response.Message = "Product option updated successfully!";
            }
            catch (Exception ex)
            {
                response.Errors.Add(
                    new Error
                {
                    CustomisedMessage = "Unable to update product option",
                    StackTrace        = ex.StackTrace,
                    SystemMessage     = ex.Message,
                });

                Logger.Fatal(request);
                Logger.Fatal(response, ex);
            }
            return(response);
        }
Пример #5
0
        public IActionResult UpdateOptionForProduct(Guid productId, Guid optionId,
                                                    UpdateProductOptionRequest optionForProductToUpdate)
        {
            var logParamsMessage = $"productId : {productId} optionId : {optionId} {JsonConvert.SerializeObject(optionForProductToUpdate)}";

            _logger.LogDebug($"Start - UpdateOptionForProduct, params - {logParamsMessage}");

            var optionForProductFromRepo = _productRepository.GetProductOption(productId, optionId);

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

            _mapper.Map(optionForProductToUpdate, optionForProductFromRepo);

            _productRepository.UpdateProductOption(optionForProductFromRepo);
            _productRepository.Save();

            var logReturnMessage = $"productId : {productId} optionId : {optionId} No Content";

            _logger.LogDebug($"Start - UpdateOptionForProduct, params - {logReturnMessage}");

            return(NoContent());
        }
        public async Task ReturnBadRequest_WhenProductOptionIdInPayloadAndPathDontMatch()
        {
            // Arrange
            var fixture      = new ProductsControllerTestFixture();
            var request2Test = new UpdateProductOptionRequest
            {
                Id          = Guid.Parse("45ed1c70-4e21-4f2d-960e-4e0c9a301f42"),
                Name        = "Shoe",
                Description = "Spy phone"
            };
            // Act
            var response = await fixture.SUT().UpdateProductOption(
                Guid.Parse("90201b31-96a9-4371-9073-3500251b6765"),
                Guid.Parse("1fe9708e-d2b2-4ca7-8b20-627d41acad68"),
                request2Test);

            // Assert
            response.Should().BeOfType(typeof(BadRequestObjectResult));
        }
Пример #7
0
        public async Task <UpdateProductOptionResponse> UpdateProductOption(Guid productId, Guid optionId, UpdateProductOptionRequest updateProductOptionRequest)
        {
            _logger.LogInformation($"Updating product option with productId: {productId} and optionId: {optionId}");

            var productOption = await _productRepository.GetProductOptionsByProductIdAndOptionsId(productId, optionId);

            if (productOption == null)
            {
                _logger.LogInformation($"Could not find product option with productId: {productId} and optionId: {optionId}");

                return(new UpdateProductOptionResponse
                {
                    IsSuccessful = false
                });
            }

            productOption.Name        = updateProductOptionRequest.Name;
            productOption.Description = updateProductOptionRequest.Description;

            var result = await _productRepository.UpdateProductOption(productOption);

            var updateProductOptionResponse = new UpdateProductOptionResponse
            {
                IsSuccessful = result
            };

            _logger.LogInformation($"Updated a product with IsSuccessful: {updateProductOptionResponse.IsSuccessful}");

            return(updateProductOptionResponse);
        }
Пример #8
0
        public async Task <IActionResult> UpdateProductOption(Guid productId, Guid id, UpdateProductOptionRequest updatedOption)
        {
            if (id != updatedOption.Id)
            {
                _logger.LogError("Cannot Update Option, option {id} in path does not math {@payload}", id, updatedOption);
                return(BadRequest(new ErrorResponse("Option id in payload must match id in path")));
            }
            await _productService.UpdateProductOption(productId, updatedOption);

            return(NoContent());
        }
Пример #9
0
        public async Task <IActionResult> UpdateProductOption(Guid id, Guid optionId, [FromBody] UpdateProductOptionRequest updateProductOptionRequest)
        {
            try
            {
                _logger.LogInformation($"[Put] /products/{id}/options/{optionId}");

                var result = await _productService.UpdateProductOption(id, optionId, updateProductOptionRequest);

                return(Ok(result));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Exception caught!");
                return(BadRequest(new ApiResult {
                    Error = "An error has occured"
                }));
            }
        }