public void GetState_should_return_status()
{
IPhoenixState state = new RaisingPhoenix();
Assert.AreEqual("wait to raise", state.GetState());
var wait = new AutoResetEvent(false);
var wait2 = new AutoResetEvent(false);
Func<Task<IPhoenixState>> action = () =>
{
wait.WaitOne();
state = Substitute.For<IPhoenixState>();
state.GetState().Returns("some other state");
wait2.Set();
return Task.FromResult(state);
};
state.Reborn(action);
Assert.AreEqual("raising", state.GetState());
wait.Set();
wait2.WaitOne();
Assert.AreEqual("some other state", state.GetState());
}