elsa-core/test/unit/Elsa.Identity.UnitTests/HostedServices/AdminUserInitializerTests.cs
2026-07-25 23:16:32 +02:00

70 lines
2.3 KiB
C#

using Elsa.Common.Services;
using Elsa.Identity.Contracts;
using Elsa.Identity.Entities;
using Elsa.Identity.HostedServices;
using Elsa.Identity.Models;
using Elsa.Identity.Options;
using Elsa.Identity.Services;
using Microsoft.Extensions.Logging.Abstractions;
using NSubstitute;
namespace Elsa.Identity.UnitTests.HostedServices;
public class AdminUserInitializerTests
{
[Fact]
public async Task ExecuteAsyncAddsMissingConfiguredPermissionsToExistingAdminRole()
{
var roleStore = await CreateRoleStoreAsync(["custom"]);
var initializer = CreateInitializer(roleStore, ["*"]);
await initializer.ExecuteAsync(CancellationToken.None);
var role = await roleStore.FindAsync(new RoleFilter { Id = "admin" });
Assert.NotNull(role);
Assert.Equal(["custom", "*"], role.Permissions);
}
[Fact]
public async Task ExecuteAsyncDoesNotDuplicateExistingConfiguredPermissions()
{
var roleStore = await CreateRoleStoreAsync(["*", "custom"]);
var initializer = CreateInitializer(roleStore, ["*"]);
await initializer.ExecuteAsync(CancellationToken.None);
await initializer.ExecuteAsync(CancellationToken.None);
var role = await roleStore.FindAsync(new RoleFilter { Id = "admin" });
Assert.NotNull(role);
Assert.Equal(["*", "custom"], role.Permissions);
}
private static async Task<MemoryRoleStore> CreateRoleStoreAsync(ICollection<string> permissions)
{
var roleStore = new MemoryRoleStore(new MemoryStore<Role>());
await roleStore.AddAsync(new Role
{
Id = "admin",
Name = "Administrator",
Permissions = permissions
});
return roleStore;
}
private static AdminUserInitializer CreateInitializer(IRoleStore roleStore, ICollection<string> permissions)
{
var options = Microsoft.Extensions.Options.Options.Create(new DefaultAdminUserOptions
{
AdminRoleName = "admin",
AdminRolePermissions = permissions
});
return new(
Substitute.For<IUserStore>(),
roleStore,
Substitute.For<IUserManager>(),
Substitute.For<IRoleManager>(),
options,
NullLogger<AdminUserInitializer>.Instance);
}
}