65 lines
1.9 KiB
C#
65 lines
1.9 KiB
C#
using KArtSell.Modules.SignalEngine.Domain;
|
|
|
|
namespace KArtSell.SignalEngine.UnitTests;
|
|
|
|
public sealed class ReentryStateMachineTests
|
|
{
|
|
[Fact]
|
|
public void Reentry_requires_wait_spacing_trend_breakout_and_asset_confirmation()
|
|
{
|
|
var state = ReentryStateMachine.Evaluate(
|
|
ReentryState.Watching,
|
|
new ReentryInput(10, 10, true, true, true, false, false));
|
|
|
|
Assert.Equal(ReentryState.Ready, state);
|
|
}
|
|
|
|
[Fact]
|
|
public void Missing_asset_confirmation_keeps_watch_open()
|
|
{
|
|
var state = ReentryStateMachine.Evaluate(
|
|
ReentryState.Watching,
|
|
new ReentryInput(10, 10, true, true, false, false, false));
|
|
|
|
Assert.Equal(ReentryState.Watching, state);
|
|
}
|
|
|
|
[Fact]
|
|
public void Executed_stage_moves_to_reentered_then_watching_when_stages_remain()
|
|
{
|
|
var reentered = ReentryStateMachine.Evaluate(
|
|
ReentryState.Ready,
|
|
new ReentryInput(10, 10, true, true, true, false, false,
|
|
StageExecuted: true, HasRemainingStages: true));
|
|
|
|
var next = ReentryStateMachine.Evaluate(
|
|
reentered,
|
|
new ReentryInput(10, 0, true, true, true, false, false,
|
|
HasRemainingStages: true));
|
|
|
|
Assert.Equal(ReentryState.Reentered, reentered);
|
|
Assert.Equal(ReentryState.Watching, next);
|
|
}
|
|
|
|
[Fact]
|
|
public void Last_executed_stage_moves_to_open()
|
|
{
|
|
var next = ReentryStateMachine.Evaluate(
|
|
ReentryState.Reentered,
|
|
new ReentryInput(20, 10, true, true, true, false, false,
|
|
HasRemainingStages: false));
|
|
|
|
Assert.Equal(ReentryState.Open, next);
|
|
}
|
|
|
|
[Fact]
|
|
public void Hard_impairment_closes_watch()
|
|
{
|
|
var state = ReentryStateMachine.Evaluate(
|
|
ReentryState.Watching,
|
|
new ReentryInput(100, 100, true, true, true, true, false));
|
|
|
|
Assert.Equal(ReentryState.Closed, state);
|
|
}
|
|
}
|