Files
2026-03-25 14:50:13 -05:00

103 lines
3.2 KiB
C#

using System;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using LCU.API.Internal.DocumentIngestor.Security;
using Microsoft.AspNetCore.Authorization;
using NUnit.Framework;
namespace LCU.API.Internal.DocumentIngestorTests.Security;
public class GroupMembershipRequirementHandlerTest
{
private readonly IAuthorizationHandler _handler = new GroupMembershipRequirementHandler();
private readonly GroupMembershipRequirement _requirement = new
(
Guid.NewGuid().ToString(),
Guid.NewGuid().ToString(),
Guid.NewGuid().ToString()
);
[Test]
public async Task HandleRequirementAsync_NoRolesOrGroups_RequirementNotSucceeded()
{
var principal = new ClaimsPrincipal();
var context = new AuthorizationHandlerContext(new[] { _requirement }, principal, null);
await _handler.HandleAsync(context);
Assert.IsFalse(context.HasSucceeded);
}
[Test]
public async Task HandleRequirementAsync_RolesAndGroupsDoesNotIncludeAnyRequirementGroups_RequirementNotSucceeded()
{
var roles = new[]
{
new Claim("roles", Guid.NewGuid().ToString()),
new Claim("roles", Guid.NewGuid().ToString()),
new Claim("roles", Guid.NewGuid().ToString()),
};
var groups = new[]
{
new Claim("groups", Guid.NewGuid().ToString()),
new Claim("groups", Guid.NewGuid().ToString()),
new Claim("groups", Guid.NewGuid().ToString()),
};
var principal = new ClaimsPrincipal(new ClaimsIdentity(roles.Concat(groups)));
var context = new AuthorizationHandlerContext(new[] { _requirement }, principal, null);
await _handler.HandleAsync(context);
Assert.IsFalse(context.HasSucceeded);
}
[Test]
public async Task HandleRequirementAsync_OneRoleIncludedInRequirementGroups_RequirementSucceeded()
{
var includedRole = _requirement.Groups.Skip(DateTime.Now.Millisecond % _requirement.Groups.Count).First();
var roles = new[]
{
new Claim("roles", Guid.NewGuid().ToString()),
new Claim("roles", includedRole),
new Claim("roles", Guid.NewGuid().ToString()),
};
var groups = new[]
{
new Claim("groups", Guid.NewGuid().ToString()),
new Claim("groups", Guid.NewGuid().ToString()),
new Claim("groups", Guid.NewGuid().ToString()),
};
var principal = new ClaimsPrincipal(new ClaimsIdentity(roles.Concat(groups)));
var context = new AuthorizationHandlerContext(new[] { _requirement }, principal, null);
await _handler.HandleAsync(context);
Assert.IsTrue(context.HasSucceeded);
}
[Test]
public async Task HandleRequirementAsync_OneGroupIncludedInRequirementGroups_RequirementSucceeded()
{
var includedRole = _requirement.Groups.Skip(DateTime.Now.Millisecond % _requirement.Groups.Count).First();
var roles = new[]
{
new Claim("roles", Guid.NewGuid().ToString()),
new Claim("roles", includedRole),
new Claim("roles", Guid.NewGuid().ToString())
};
var groups = new[]
{
new Claim("groups", Guid.NewGuid().ToString()),
new Claim("groups", includedRole),
new Claim("groups", Guid.NewGuid().ToString())
};
var principal = new ClaimsPrincipal(new ClaimsIdentity(roles.Concat(groups)));
var context = new AuthorizationHandlerContext(new[] { _requirement }, principal, null);
await _handler.HandleAsync(context);
Assert.IsTrue(context.HasSucceeded);
}
}