public async Task CacheResponseAsync_ShouldCache()
        {
            //Arrange
            var cacheKey   = "test";
            var response   = new { randomKey = "randomValue" };
            var timeToLive = TimeSpan.FromSeconds(1);

            var sut = new ResponseCacheService(_cacheMock, _loggerMock.Object);

            //Act
            await sut.CacheResponseAsync(cacheKey, response, timeToLive);

            //Assert
            _cacheMock.SetStringAsyncWasCalled.Should().BeTrue();
        }
        public async Task CacheResponseAsync_WhenEmptyResponseIsPassed_ShouldNotCache()
        {
            //Arrange
            var cacheKey   = "test";
            var response   = default(object);
            var timeToLive = TimeSpan.FromSeconds(0);

            var sut = new ResponseCacheService(_cacheMock, _loggerMock.Object);

            //Act
            await sut.CacheResponseAsync(cacheKey, response, timeToLive);

            //Assert
            _cacheMock.SetStringAsyncWasCalled.Should().BeFalse();
        }
        public async Task CacheResponseAsync_WhenEmptyResponseIsPassed_ShouldLogEvent()
        {
            //Arrange
            var cacheKey   = "test";
            var response   = default(object);
            var timeToLive = TimeSpan.FromSeconds(0);

            var sut = new ResponseCacheService(_cacheMock, _loggerMock.Object);

            //Act
            await sut.CacheResponseAsync(cacheKey, response, timeToLive);

            //Assert
            _loggerMock.Verify(x =>
                               x.Write(LogLevel.Warning, EventCodes.CacheObjectMissingInCacheRequest), Times.Once);
        }
Esempio n. 4
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                var cachedData = await ResponseCacheService.GetCachedData(key);

                if (string.IsNullOrWhiteSpace(cachedData))
                {
                    //since background services are singleton and
                    //DBcontext is scoped we cannot directly inject dbcontext
                    using (var scope = ScopeFactory.CreateScope())
                    {
                        var dbContext  = scope.ServiceProvider.GetRequiredService <salesdbContext>();
                        var dataFromDb = await dbContext.Employees.ToListAsync();

                        await ResponseCacheService.CacheReponse(key, dataFromDb, TimeSpan.FromSeconds(10));
                    }
                }

                await Task.Delay(TimeSpan.FromSeconds(intervalToCacheData));
            }
        }