Unit tests for administration/permission command behavior. Exercises help, group and permission commands, audit queries, and policy enforcement using an AdministrationRig test harness.
using Xunit;
namespace SboxSuperuser.Contracts.Tests;
public sealed class AdministrationCommandTests
{
[Fact]
public async Task HelpFiltersSecurityCommandsAndDescribesConstraints()
{
using var rig = new AdministrationRig();
var ordinary = await rig.Run( Array.Empty<string>(), DispatcherRig.User );
Assert.Equal( CommandStatus.Success, ordinary.Status );
Assert.DoesNotContain( "group.create", string.Join( "", ordinary.Data.Values ) );
Assert.Equal( CommandStatus.NotFound, (await rig.Run( new[] { "help", "group.create" }, DispatcherRig.User )).Status );
var owner = await rig.Run( new[] { "help", "group.protection.set" } );
Assert.Contains( "minimum 0", string.Join( "", owner.Data.Values ) );
Assert.Contains( "admin.security.manage", string.Join( "", owner.Data.Values ) );
Assert.Contains( "Example:", string.Join( "", owner.Data.Values ) );
}
[Fact]
public async Task AccessCommandsPersistAndProtectReservedOwnerMembership()
{
using var rig = new AdministrationRig();
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "group", "create", "helpers" } )).Status );
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "group", "helpers", "parents", "set", "player" } )).Status );
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "group", "helpers", "permission", "allow", "admin.permissions.explain" } )).Status );
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "user", DispatcherRig.UserId, "group", "add", "helpers" } )).Status );
Assert.True( rig.Policy.Explain( DispatcherRig.User, "admin.permissions.explain" ).IsAllowed );
var groups = await rig.Run( new[] { "user", DispatcherRig.UserId, "group", "list" } );
Assert.Contains( "helpers", groups.Data.Values );
Assert.Equal( CommandStatus.InvalidArguments, (await rig.Run( new[] { "user", DispatcherRig.UserId, "group", "add", "owner" } )).Status );
Assert.Equal( CommandStatus.InvalidArguments, (await rig.Run( new[] { "group", "delete", "helpers" } )).Status );
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "user", DispatcherRig.UserId, "group", "remove", "helpers" } )).Status );
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "group", "delete", "helpers" } )).Status );
}
[Fact]
public async Task ManagementGrantDoesNotTurnOrdinaryStaffIntoOwner()
{
using var rig = new AdministrationRig();
await rig.Run( new[] { "user", DispatcherRig.UserId, "permission", "allow", "admin.security.manage" } );
Assert.Equal( CommandStatus.Denied, (await rig.Run( new[] { "group", "create", "elevated" }, DispatcherRig.User )).Status );
Assert.Equal( CommandStatus.Denied, (await rig.Run( new[] { "diagnostics" }, DispatcherRig.User )).Status );
Assert.Equal( CommandStatus.NotFound, (await rig.Run( new[] { "help", "group.create" }, DispatcherRig.User )).Status );
Assert.False( rig.Policy.ReadPolicy( DispatcherRig.Owner ).Groups.ContainsKey( "elevated" ) );
}
[Fact]
public async Task ExplainRequiresPermissionForAnotherSubject()
{
using var rig = new AdministrationRig();
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "permissions", "explain", DispatcherRig.UserId, "admin.help" }, DispatcherRig.User )).Status );
Assert.Equal( CommandStatus.Denied, (await rig.Run( new[] { "permissions", "explain", DispatcherRig.OwnerId, "admin.help" }, DispatcherRig.User )).Status );
var owner = await rig.Run( new[] { "permissions", "explain", DispatcherRig.OwnerId, "admin.help" } );
Assert.Contains( "ownerBypass=True", string.Join( "", owner.Data.Values ) );
}
[Fact]
public async Task DedicatedConsoleAndPlayerUseSamePolicyRulesWithDistinctAuditActors()
{
using var rig = new AdministrationRig();
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "group", "create", "first" } )).Status );
Assert.Equal( CommandStatus.Success, (await rig.Run( new[] { "group", "create", "second" }, DispatcherRig.ConsoleActor )).Status );
var rows = await rig.Audit.QueryAsync( () => DispatcherRig.Owner, _ => true, _ => false,
new AuditQuery( command: "group.create" ), CancellationToken.None );
Assert.Equal( new[] { ActorKind.DedicatedConsole, ActorKind.Player }, rows.Entries.Select( row => row.ActorKind ) );
Assert.All( rows.Entries, row => Assert.Equal( CommandStatus.Success, row.Outcome ) );
}
[Fact]
public async Task AuditQueriesDoNotInvalidateTheirOwnPagination()
{
using var rig = new AdministrationRig();
for ( var index = 0; index < 7; index++ )
{
await rig.Run( new[] { "version" } );
}
var writes = rig.Store.Writes;
var first = await rig.Run( new[] { "audit", "query", "version" } );
Assert.Equal( CommandStatus.Success, first.Status );
Assert.True( first.Data.ContainsKey( "cursor" ) );
var second = await rig.Run( new[] { "audit", "query", "version", first.Data[ "cursor" ] } );
Assert.Equal( CommandStatus.Success, second.Status );
Assert.Equal( 2, second.Data.Count );
Assert.Equal( writes, rig.Store.Writes );
Assert.Equal( CommandStatus.Denied, (await rig.Run( new[] { "audit", "query" }, DispatcherRig.User )).Status );
}
}