tests/SboxSuperuser.Contracts.Tests/ModuleFixture.cs

Test fixture for unit tests that sets up a DispatcherRig and a ModuleManager with a configurable deadline. It exposes helper methods to enable/disable modules and to query module state, and disposes the manager and rig on teardown.

File Access
using SboxSuperuser.Engine.Modules;

namespace SboxSuperuser.Contracts.Tests;

internal sealed class ModuleFixture : IDisposable
{
	internal DispatcherRig Rig { get; } = new();
	internal ModuleManager Manager { get; }
	internal ModuleFixture( int timeoutMilliseconds = 1000 )
	{
		Manager = new ModuleManager( Rig.Registry, Rig.Policy, () => Rig.Active, Rig.Errors.Add,
			deadline: TimeSpan.FromMilliseconds( timeoutMilliseconds ) );
	}
	internal Task<CommandResult> Enable( string id, ActorIdentity actor = null )
		=> Manager.SetEnabledAsync( () => actor ?? DispatcherRig.Owner, id, true, CancellationToken.None );
	internal Task<CommandResult> Disable( string id, ActorIdentity actor = null )
		=> Manager.SetEnabledAsync( () => actor ?? DispatcherRig.Owner, id, false, CancellationToken.None );
	internal ModuleState State( string id ) => Manager.Statuses.Single( item => item.Descriptor.Id == id ).State;
	public void Dispose()
	{
		Manager.Dispose();
		Rig.Dispose();
	}
}