Headless CMS and Content Managment Hub
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

91 lines
2.7 KiB

// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using Microsoft.Extensions.Caching.Distributed;
namespace Squidex.Shared;
public abstract class DistributedCacheTests
{
private readonly TimeProvider timeProvider = A.Fake<TimeProvider>();
private DateTimeOffset now = DateTimeOffset.UtcNow;
protected DistributedCacheTests()
{
A.CallTo(() => timeProvider.GetUtcNow())
.ReturnsLazily(() => now);
}
protected abstract Task<IDistributedCache> CreateSutAsync(TimeProvider timeProvider);
[Fact]
public async Task Should_add_and_get_entry_without_expiration()
{
var sut = await CreateSutAsync(timeProvider);
var cacheKey = Guid.NewGuid().ToString();
var cacheValue = cacheKey;
var options = new DistributedCacheEntryOptions();
await sut.SetStringAsync(cacheKey, cacheValue, options);
var result = await sut.GetStringAsync(cacheKey);
Assert.Equal(cacheKey, result);
}
[Fact]
public async Task Should_add_and_get_entry()
{
var sut = await CreateSutAsync(timeProvider);
var cacheKey = Guid.NewGuid().ToString();
var cacheValue = cacheKey;
var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1) };
await sut.SetStringAsync(cacheKey, cacheValue, options);
var result = await sut.GetStringAsync(cacheKey);
Assert.Equal(cacheKey, result);
}
[Fact]
public async Task Should_not_return_result_if_expired()
{
var sut = await CreateSutAsync(timeProvider);
var cacheKey = Guid.NewGuid().ToString();
var cacheValue = cacheKey;
var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1) };
await sut.SetStringAsync(cacheKey, cacheValue, options);
now = now.AddDays(1);
var result = await sut.GetStringAsync(cacheKey);
Assert.Null(result);
}
[Fact]
public async Task Should_not_return_result_if_removed()
{
var sut = await CreateSutAsync(timeProvider);
var cacheKey = Guid.NewGuid().ToString();
var cacheValue = cacheKey;
var options = new DistributedCacheEntryOptions();
await sut.SetStringAsync(cacheKey, cacheValue, options);
await sut.RemoveAsync(cacheKey);
var result = await sut.GetStringAsync(cacheKey);
Assert.Null(result);
}
}