Пример #1
0
        public async Task ShouldCallHandlerWithoutCacheIfHandlerIsNotRegisteredToProvider()
        {
            // Arrange
            var mockHandler = new Mock <IQueryHandler <NonRegisteredQuery, int> >();
            var query       = new NonRegisteredQuery();

            var cacheQueryHandlerDecorator = new InMemoryCacheQueryHandlerDecorator <NonRegisteredQuery, int>(mockHandler.Object, cache, queryInfoProvider, new NullLoggerFactory());

            mockHandler
            .Setup(x => x.Handle(query, Util.Context))
            .ReturnsAsync(new QueryResult <int>(1));

            // Act
            var result = await cacheQueryHandlerDecorator.Handle(query, Util.Context);

            // Assert
            Assert.True(result.IsSuccess);
            mockHandler.Verify(x => x.Handle(query, Util.Context), Times.Once);

            // Act
            result = await cacheQueryHandlerDecorator.Handle(query, Util.Context);

            // Assert
            Assert.True(result.IsSuccess);
            mockHandler.Verify(x => x.Handle(query, Util.Context), Times.Exactly(2));
        }
Пример #2
0
        public async Task ShouldCacheWithKey()
        {
            // Arrange
            string key      = "key";
            string value    = "value";
            string newKey   = "newKey";
            string newValue = "newValue";
            var    cacheQueryHandlerDecorator = new InMemoryCacheQueryHandlerDecorator <FooQuery, string>(new FooQueryHandler(), cache, queryInfoProvider, new NullLoggerFactory());
            var    fooQuery = new FooQuery {
                ValueToCache = value, CacheKey = key
            };

            // Act
            var result = await cacheQueryHandlerDecorator
                         .Handle(fooQuery, Util.Context);

            // Assert
            Assert.Equal(result.Result, value);

            // Arrange
            // result should be old value for same key
            fooQuery.ValueToCache = newValue;

            // Act
            result = await cacheQueryHandlerDecorator
                     .Handle(fooQuery, Util.Context);

            // Assert
            Assert.Equal(result.Result, value);

            // result should be new value for new key

            // Arrange
            fooQuery.ValueToCache = newValue;
            fooQuery.CacheKey     = newKey;

            // Act
            result = await cacheQueryHandlerDecorator
                     .Handle(fooQuery, Util.Context);

            // Assert
            Assert.Equal(result.Result, newValue);
        }
Пример #3
0
        public async Task ShouldThrowCacheKeyProviderTypeException()
        {
            // Arrange
            var qip = new QueryInfoProvider(new List <Type>
            {
                typeof(WrongCacheKeyProviderQueryHandler)
            });
            var  cacheQueryHandlerDecorator = new InMemoryCacheQueryHandlerDecorator <WrongCacheKeyProviderQuery, string>(new WrongCacheKeyProviderQueryHandler(), cache, qip);
            var  query           = new WrongCacheKeyProviderQuery();
            bool exceptionThrown = false;

            // Act
            try{
                var result = await cacheQueryHandlerDecorator.Handle(query, Util.Context);
            }catch (CacheKeyProviderTypeException) {
                exceptionThrown = true;
            }

            // Assert
            Assert.True(exceptionThrown);
        }
Пример #4
0
        public async Task ShouldCacheExpireInSecondsDuration()
        {
            // Arrange
            var cacheQueryHandlerDecorator = new InMemoryCacheQueryHandlerDecorator <FooQuery, string>(new FooQueryHandler(), cache, queryInfoProvider, new NullLoggerFactory());

            string oldValue = "foo";
            string newValue = "fooNew";

            var fooQuery = new FooQuery {
                ValueToCache = oldValue, CacheKey = "key"
            };

            var result = await cacheQueryHandlerDecorator
                         .Handle(fooQuery, Util.Context);

            // Assert
            Assert.Equal(result.Result, oldValue);

            // Arrange
            fooQuery.ValueToCache = newValue;

            // Act
            result = await cacheQueryHandlerDecorator
                     .Handle(fooQuery, Util.Context);

            // Assert
            Assert.Equal(result.Result, oldValue);

            // Arrange
            Thread.Sleep(new TimeSpan(0, 0, 3));

            // Act
            result = await cacheQueryHandlerDecorator
                     .Handle(fooQuery, Util.Context);

            // Assert
            Assert.Equal(result.Result, newValue);
        }