public async Task GetItemAsync_OfCacheableStructRequestedMultipleTimesInSuccession_CallsRetrievalDelegateJustOnce()
        {
            // Arrange
            CacheableStruct cacheableStruct           = new CacheableStruct(100);
            InMemoryItemCache <CacheableStruct> cache = new InMemoryItemCache <CacheableStruct>(
                () => { return(Task.FromResult(cacheableStruct.GetSelf())); },
                null,
                TimeSpan.FromMinutes(2));
            int actualResult;
            int expectedResult = 1;

            // Act
            _ = await cache.GetItemAsync();

            _ = await cache.GetItemAsync();

            _ = await cache.GetItemAsync();

            _ = await cache.GetItemAsync();

            actualResult = cacheableStruct.NumberOfGetSelfCalls;

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
        public void GetItem_OfCacheableStructRequestedMultipleTimesInSuccession_CallsRetrievalDelegateJustOnce()
        {
            // Arrange
            CacheableStruct cacheableStruct = new CacheableStruct(125);
            AutoRefreshingItemCache <CacheableStruct> cache = new AutoRefreshingItemCache <CacheableStruct>(
                new FakeLogger(),
                (ct) => { return(Task.FromResult(cacheableStruct.GetSelf())); },
                new CacheableStruct(1000),
                TimeSpan.FromMinutes(2)
                );
            int actualResult;
            int expectedResult = 1;

            cache.Initialise();

            // Act
            _            = cache.GetItem();
            _            = cache.GetItem();
            _            = cache.GetItem();
            _            = cache.GetItem();
            actualResult = cacheableStruct.NumberOfGetSelfCalls;

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
        public void GetItem_OfCacheableStruct_ReturnsCorrectCachedValue()
        {
            // Arrange
            CacheableStruct cacheableStruct           = new CacheableStruct(125);
            InMemoryItemCache <CacheableStruct> cache = new InMemoryItemCache <CacheableStruct>(
                null,
                () => { return(cacheableStruct); },
                TimeSpan.FromMinutes(2));
            int actualResult;
            int expectedResult = 125;

            // Act
            actualResult = cache.GetItem().GetValue();

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
        public async Task GetItemAsync_OfCacheableStruct_ReturnsCorrectCachedValue()
        {
            // Arrange
            CacheableStruct cacheableStruct           = new CacheableStruct(100);
            InMemoryItemCache <CacheableStruct> cache = new InMemoryItemCache <CacheableStruct>(
                () => { return(Task.FromResult(cacheableStruct.GetSelf())); },
                null,
                TimeSpan.FromMinutes(2));
            int actualResult;
            int expectedResult = 100;

            // Act
            actualResult = (await cache.GetItemAsync()).GetValue();

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
        public void GetItem_OfCacheableStruct_ReturnsCorrectCachedValue()
        {
            // Arrange
            CacheableStruct cacheableStruct = new CacheableStruct(125);
            AutoRefreshingItemCache <CacheableStruct> cache = new AutoRefreshingItemCache <CacheableStruct>(
                new FakeLogger(),
                (ct) => { return(Task.FromResult(cacheableStruct)); },
                new CacheableStruct(1000),
                TimeSpan.FromMinutes(2)
                );
            int actualResult;
            int expectedResult = 125;

            cache.Initialise();

            // Act
            actualResult = cache.GetItem().GetValue();

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }