Files
tiku-backend.net/Tiku.IntegrationTests/AuthorizationCachePersistenceTests.cs

48 lines
1.7 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Tiku.Domain.Operations;
using Tiku.Domain.Tenancy;
using Tiku.Infrastructure.Persistence;
using Tiku.IntegrationTests.Api;
namespace Tiku.IntegrationTests;
public sealed class AuthorizationCachePersistenceTests
{
[Fact]
public async Task Rbac_mutation_bumps_durable_scope_version_and_enqueues_invalidation_in_same_save()
{
await using var factory = new ApiTestFactory();
var tenantId = Guid.NewGuid();
using var scope = factory.CreateSystemScope("Verify authorization version trigger");
var dbContext = scope.ServiceProvider.GetRequiredService<TikuDbContext>();
dbContext.Tenants.Add(new Tenant
{
Id = tenantId,
Slug = tenantId.ToString("N"),
Name = "Authorization cache trigger tenant"
});
dbContext.AuthorizationScopeVersions.Add(new AuthorizationScopeVersion
{
Realm = AuthRealm.Tenant,
TenantId = tenantId
});
await dbContext.SaveChangesAsync();
dbContext.TenantBackendRoles.Add(new TenantBackendRole
{
TenantId = tenantId,
Code = "cache-trigger-role",
Name = "Cache trigger role"
});
await dbContext.SaveChangesAsync();
dbContext.ChangeTracker.Clear();
var version = await dbContext.AuthorizationScopeVersions.AsNoTracking()
.SingleAsync(item => item.TenantId == tenantId);
Assert.Equal(2, version.Version);
Assert.True(await dbContext.AuthorizationCacheInvalidations.AsNoTracking().AnyAsync(item =>
item.TargetType == "scope" && item.TenantId == tenantId && item.Version == version.Version));
}
}