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();
        }
예제 #4
0
        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"
                }));
            }
        }
예제 #5
0
        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));
        }
예제 #6
0
        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);
        }
예제 #7
0
        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));
        }