public async Task CreateProductOption_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"); CreateProductOptionRequest createProductOptionRequest = new CreateProductOptionRequest { Name = "Test Product Option 1", Description = "Description 1", }; mockProductService.Setup(m => m.CreateProductOption(productId, It.IsAny <CreateProductOptionRequest>())) .ReturnsAsync(new CreateProductOptionResponse { IsSuccessful = true }) .Verifiable(); ProductsController productsController = new ProductsController(mockLogger.Object, mockProductService.Object); //Act var response = await productsController.CreateProductOption(productId, createProductOptionRequest) as OkObjectResult; var responseObject = response.Value as CreateProductOptionResponse; //Assert Assert.True(responseObject.IsSuccessful); mockLogger.VerifyAll(); mockProductService.VerifyAll(); }
public async Task CreateProductOption_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"); CreateProductOptionRequest createProductOptionRequest = new CreateProductOptionRequest { Name = "Test Product Option 1", Description = "Description 1", }; mockProductService.Setup(m => m.CreateProductOption(productId, It.IsAny <CreateProductOptionRequest>())) .ThrowsAsync(new Exception("Error occured!")) .Verifiable(); ProductsController productsController = new ProductsController(mockLogger.Object, mockProductService.Object); //Act var response = await productsController.CreateProductOption(productId, createProductOptionRequest) as BadRequestObjectResult; var responseObject = response.Value as ApiResult; //Assert Assert.Equal("An error has occured", responseObject.Error); mockLogger.VerifyAll(); mockProductService.VerifyAll(); }
public async Task CreateProductOption_Creates_ProductOption_Successfully() { //Arrange Mock <IProductRepository> mockProductRepository = new Mock <IProductRepository>(); Mock <ILogger <ProductService> > mockLogger = new Mock <ILogger <ProductService> >(); mockProductRepository.Setup(m => m.GetProductById(It.IsAny <Guid>())) .ReturnsAsync(new Product()) .Verifiable(); mockProductRepository.Setup(m => m.CreateProductOption(It.IsAny <ProductOption>())) .ReturnsAsync(true) .Verifiable(); CreateProductOptionRequest createProductOptionRequest = new CreateProductOptionRequest { Name = "Test Product Option", Description = "This is a desc" }; ProductService productService = new ProductService(mockProductRepository.Object, mockLogger.Object); //Act var result = await productService.CreateProductOption(Guid.Parse("01234567-89ab-cdef-0123-456789abcdef"), createProductOptionRequest); //Assert Assert.True(result.IsSuccessful); mockProductRepository.VerifyAll(); mockLogger.VerifyAll(); }
public async Task <IActionResult> CreateProductOption(Guid id, [FromBody] CreateProductOptionRequest createProductOptionRequest) { try { _logger.LogInformation($"[POST] /products/{id}/options"); var result = await _productService.CreateProductOption(id, createProductOptionRequest); return(Ok(result)); } catch (Exception ex) { _logger.LogError(ex, "Exception caught!"); return(BadRequest(new ApiResult { Error = "An error has occured" })); } }
public ActionResult <ProductOptionResponse> CreateOptionForProduct( Guid productId, CreateProductOptionRequest optionForProductToCreate) { var logParamsMessage = $"productId : {productId} {JsonConvert.SerializeObject(optionForProductToCreate)}"; _logger.LogDebug($"Start - CreateOptionForProduct, params - {logParamsMessage}"); var optionForProductEntity = _mapper.Map <ProductOption>(optionForProductToCreate); _productRepository.AddProductOption(productId, optionForProductEntity); _productRepository.Save(); var optionForProductToReturn = _mapper.Map <ProductOptionResponse>(optionForProductEntity); var logReturnMessage = $"productId : {productId} {JsonConvert.SerializeObject(optionForProductToReturn)}"; _logger.LogDebug($"End - CreateOptionForProduct, return - {logReturnMessage}"); return(CreatedAtRoute("GetOptionForProduct", new { ProductId = productId, optionId = optionForProductEntity.Id }, optionForProductToReturn)); }
public async Task <CreateProductOptionResponse> CreateProductOption(Guid productId, CreateProductOptionRequest createProductOptionRequest) { _logger.LogInformation($"Creating a product: {JsonConvert.SerializeObject(createProductOptionRequest)}"); //Find the product first var product = await _productRepository.GetProductById(productId); if (product == null) { _logger.LogInformation($"No product with id: {productId} found. Can't add product to product option."); return(new CreateProductOptionResponse { IsSuccessful = false }); } var productOption = new ProductOption { ProductId = productId, Description = createProductOptionRequest.Description, Name = createProductOptionRequest.Name }; var result = await _productRepository.CreateProductOption(productOption); var createProductOptionResponse = new CreateProductOptionResponse { IsSuccessful = result }; _logger.LogInformation($"Created a product option with IsSuccessful: {createProductOptionResponse.IsSuccessful}"); return(createProductOptionResponse); }
public async Task <IActionResult> CreateProductOption(Guid productId, CreateProductOptionRequest newProductOptionRequest) { var newProductOption = await _productService.AddOptionToProduct(productId, newProductOptionRequest); return(CreatedAtAction(nameof(GetProductOption), new { productId, id = newProductOption.Id }, newProductOption)); }