tests/SboxSuperuser.Contracts.Tests/AuditLifetimeTests.cs

xUnit unit test for HostAuditService behavior. It constructs a HostAuditService with a fake availability predicate and tests that a failed completion that returns false releases a retention pin so a subsequent BeginAsync can succeed.

using SboxSuperuser.Engine.Audit;
using Xunit;

namespace SboxSuperuser.Contracts.Tests;

public sealed class AuditLifetimeTests
{
	[Fact]
	public async Task FailedCompletionAdmissionReleasesRetentionPin()
	{
		var available = true;
		var audit = new HostAuditService( new AuditStoreHarness(), () => available, _ => { } );
		await audit.ConfigureAsync( () => DispatcherRig.Owner, new AuditRetentionOptions( 1 ), CancellationToken.None );
		AuditAction Action() => new( DispatcherRig.Owner, CommandOrigin.Console, Guid.NewGuid(), "test.run", DateTimeOffset.UtcNow );
		var first = Action();
		Assert.True( await audit.BeginAsync( first, CancellationToken.None ) );
		available = false;
		Assert.False( await audit.CompleteAsync( first, CommandStatus.Success, CancellationToken.None ) );
		available = true;
		Assert.True( await audit.BeginAsync( Action(), CancellationToken.None ) );
	}
}