public void RerunBlockedCommand_CommandIsBlocked_CommandIsPendingAgain()
{
var resetEvent = new ManualResetEventSlim(false);
var fakeFilterManager = A.Fake<IFilterManager>();
A.CallTo(() => fakeFilterManager.Process(A<CommandBase>.Ignored)).Returns(true);
var processor = new CommandProcessor(null, fakeFilterManager);
var command = new TestCommand(CommandState.New, blockCanExecute: true);
command.RegisterForStateChange(Observer.Create<CommandState>(b =>
{
if (b == CommandState.Blocked)
{
resetEvent.Set();
}
}));
processor.PublishCommand(command);
resetEvent.Wait();
A.CallTo(() => fakeFilterManager.Process(A<CommandBase>.Ignored)).Returns(false);
command.RegisterForStateChange(Observer.Create<CommandState>(b =>
{
if (b == CommandState.Pending)
{
resetEvent.Set();
}
}));
processor.RerunBlockedCommand(command);
resetEvent.Wait();
Assert.AreEqual(CommandState.Pending, command.CurrentState);
}