public async Task ProductController_GetProducts_Returns_OKResult_With_Correct_Products_ObjectType()
        {
            // Arrange
            _mockProductsService.Setup(p => p.GetProducts()).Returns(Task.FromResult(GetTestData.GetTestProducts()));

            ProductController controller = new ProductController(_mockLogger.Object, _mockProductsService.Object, _mockCalculatorService.Object, _mockPersistenceService.Object);

            // Act
            IActionResult result = await controller.GetProducts();

            ObjectResult objectResult = result as ObjectResult;

            // Assert
            Assert.IsNotNull(objectResult);
            Assert.AreEqual(StatusCodes.Status200OK, objectResult.StatusCode);
            Assert.IsInstanceOfType(objectResult.Value, typeof(IEnumerable <Product>));
        }
        public async Task ProductController_GetProductsBySKU_Returns_NotFound_When_SKU_Not_Exists()
        {
            // Arrange
            _mockProductsService.Setup(p => p.GetProductById(It.IsAny <string>()))
            .Returns(Task.FromResult(GetTestData.GetTestProducts().Where(t => t.Id == "00000").FirstOrDefault()));

            ProductController controller = new ProductController(_mockLogger.Object, _mockProductsService.Object, _mockCalculatorService.Object, _mockPersistenceService.Object);

            // Act
            IActionResult result = await controller.GetProductsValue();

            StatusCodeResult statusCodeResult = result as NotFoundResult;

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.GetType(), typeof(NotFoundResult));
            Assert.AreEqual(StatusCodes.Status404NotFound, statusCodeResult.StatusCode);
        }
        public async Task ProductController_GetProductsBySKU_Returns_OKResult_With_Correct_Total_Amount()
        {
            // Arrange
            _mockProductsService.Setup(p => p.GetProductById(It.IsAny <string>()))
            .Returns(Task.FromResult(GetTestData.GetTestProducts().Where(t => t.Id == "T2006").FirstOrDefault()));

            _mockCalculatorService.Setup(p => p.ComputeTotalProductsValueByCurrency(It.IsAny <IEnumerable <Product> >(), It.IsAny <CurrencyCode>())).Returns(10.16M);

            ProductController controller = new ProductController(_mockLogger.Object, _mockProductsService.Object, _mockCalculatorService.Object, _mockPersistenceService.Object);

            // Act
            IActionResult result = await controller.GetProductsValue();

            ObjectResult objectResult = result as ObjectResult;
            decimal?     content      = objectResult.Value as decimal?;

            // Assert
            Assert.IsNotNull(objectResult);
            Assert.AreEqual(StatusCodes.Status200OK, objectResult.StatusCode);
            Assert.AreEqual(10.16M, content);
        }