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); }
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)); } }