public void GetProductByIdAsync_GetFromCache_Test()
        {
            // Arrange
            var            product           = _dataFixture.GetProduct();
            long           productId         = 0;
            List <Product> cachedProductList = new List <Product> {
                product
            };

            _dataFixture.GetMocks <Product>(out var mockRepository, out var mockCacheManager, out var mockOptions);

            mockCacheManager
            .Setup(cache => cache.GetFromCacheAsync <List <Product> >(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(cachedProductList);

            mockRepository
            .Setup(repo => repo.GetAsync <Product>(product => product.Sid == productId, CancellationToken.None))
            .ReturnsAsync((Product)null);

            var customerFacade = new ProductFacade(mockRepository.Object, mockCacheManager.Object, mockOptions.Object);

            // Act
            var result = customerFacade.GetProductByIdAsync(productId, CancellationToken.None).Result;

            // Assert
            Assert.NotNull(result);
            Assert.Equal(0, result.Sid);
            Assert.Equal(20, result.Price);
            Assert.Equal("Coca cola", result.Name);
        }
        public void GetProductByIdAsync_ProductDoesNotExistInCacheNorInDb_Test()
        {
            // Arrange
            Product        product           = null;
            long           productId         = 0;
            List <Product> cachedProductList = null;

            _dataFixture.GetMocks <Product>(out var mockRepository, out var mockCacheManager, out var mockOptions);

            mockCacheManager
            .Setup(cache => cache.GetFromCacheAsync <List <Product> >(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(cachedProductList);

            mockRepository
            .Setup(repo => repo.GetAsync <Product>(product => product.Sid == productId, CancellationToken.None))
            .ReturnsAsync(product);

            var productFacade = new ProductFacade(mockRepository.Object, mockCacheManager.Object, mockOptions.Object);

            // Act & Assert
            var ex = Assert.Throws <AggregateException>(() => productFacade.GetProductByIdAsync(productId, CancellationToken.None).Result);

            Assert.Equal("One or more errors occurred. (Unnable to retieve product with id 0)", ex.Message);
        }