public void AttemptToRemoveItemThatIsNotInTheCache()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            var removed = sut.RemoveFromCacheAsync(key).Result;

            // assert
            removed.Should().BeFalse();
        }
        public async Task CheckingIfCacheContainsKeyWhenTheCacheDoesNotContainTheItemReturnsFalse()
        {
            // arrange
            const string key              = "test";
            var          cacheItemDummy   = new CacheItemFixture();
            var          retrievalFixture = new RetrievalFixture <CacheItemFixture>(cacheItemDummy);
            var          sut              = new MemoryCacheWrapper <CacheItemFixture>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            var result = await sut.ContainsKeyAsync(key);

            // assert
            result.Should().BeFalse();
        }
        public void RetrievingItemFromTheCacheReturnsTheCorrectItem()
        {
            // arrange
            const string key              = "test";
            var          cacheItemDummy   = new CacheItemFixture();
            var          retrievalFixture = new RetrievalFixture <CacheItemFixture>(cacheItemDummy);
            var          sut              = new MemoryCacheWrapper <CacheItemFixture>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };
            var firstRetrieval = sut.GetAsync(key).Result;

            // act
            var secondRetrieval = sut.GetAsync(key).Result;

            // assert
            firstRetrieval.Should().Be(secondRetrieval);
        }
        public void AddItemToTheCache()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            var result = sut.GetAsync(key).Result;

            // assert
            sut.ItemsInCache.Should().Be(1);
            retrievalFixture.WasCalled.Should().BeTrue();
            result.Should().Be(returnValue);
        }
        public void RemoveItemFromCache()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            sut.GetAsync(key).Wait();

            // act
            var removed = sut.RemoveFromCacheAsync(key).Result;

            // assert
            removed.Should().BeTrue();
            sut.ItemsInCache.Should().Be(0);
        }
        public void MultipleRetrievalsOnlyHitTheRetrievalFuncitonOnce()
        {
            // arrange
            const string key              = "test";
            const int    returnValue      = 12;
            var          retrievalFixture = new RetrievalFixture <int>(returnValue);
            var          sut              = new MemoryCacheWrapper <int>
            {
                CachePolicy       = new CacheItemPolicy(),
                DataRetrievalFunc = retrievalFixture.DataRetrievalFunc
            };

            // act
            Parallel.For(0, 10, t =>
            {
                sut.GetAsync(key).Wait();
            });

            // assert
            retrievalFixture.CallCount.Should().Be(1);
        }