103 lines
3.2 KiB
C#
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);
|
|
}
|
|
} |