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