public void ChoiceStateWithoutDefaultState() { StateMachine stateMachine = StepFunctionBuilder.StateMachine() .StartAt("InitialState") .State("InitialState", StepFunctionBuilder.ChoiceState() .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState")) .Condition( StepFunctionBuilder.Or(StepFunctionBuilder.Gt("$.var", "value"), StepFunctionBuilder.Lte("$.other-var", 10) )))) .State("NextState", StepFunctionBuilder.SucceedState()) .State("DefaultState", StepFunctionBuilder.SucceedState()) .Build(); AssertStateMachine(stateMachine, "ChoiceStateWithoutDefault.json"); }
public void TestOrOperator() { var c = StepFunctionBuilder.ChoiceState() .Choice(StepFunctionBuilder.Choice() .Transition(StepFunctionBuilder.Next("NextState")) .Condition(StepFunctionBuilder.Or(StepFunctionBuilder.Eq("$.varstr", "value"), StepFunctionBuilder.Eq("$.varbool", false))) ) .Build(); var choices = c.Choices.ToArray(); Assert.True(choices[0].Condition.Match(JObject.FromObject(new { varstr = "value", varbool = false }))); Assert.True(choices[0].Condition.Match(JObject.FromObject(new { varstr = "valuee", varbool = false }))); Assert.True(choices[0].Condition.Match(JObject.FromObject(new { varstr = "value", varbool = true }))); Assert.False(choices[0].Condition.Match(JObject.FromObject(new { varstr = "valuee", varbool = true }))); }
public void ChoiceStateWithComplexCondition() { StateMachine stateMachine = StepFunctionBuilder.StateMachine() .StartAt("InitialState") .State("InitialState", StepFunctionBuilder.ChoiceState() .DefaultStateName("DefaultState") .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState")) .Condition(StepFunctionBuilder.And( StepFunctionBuilder.Gte("$.var", "value"), StepFunctionBuilder.Lte("$.other-var", "foo"), StepFunctionBuilder.Or( StepFunctionBuilder.Lt("$.numeric", 9000.1), StepFunctionBuilder.Not(StepFunctionBuilder.Gte("$.numeric", 42)) ) )))) .State("NextState", StepFunctionBuilder.SucceedState()) .State("DefaultState", StepFunctionBuilder.SucceedState()) .Build(); AssertStateMachine(stateMachine, "ChoiceStateWithComplexCondition.json"); }
public void TestBadFormat() { var dt = new DateTime(2018, 10, 22, 22, 33, 11); var c = StepFunctionBuilder.ChoiceState() .Choice(StepFunctionBuilder.Choice() .Transition(StepFunctionBuilder.Next("NextState")) .Condition(StepFunctionBuilder.Or(StepFunctionBuilder.Eq("$.varint", 33), StepFunctionBuilder.Gt("$.varint", 33), StepFunctionBuilder.Gte("$.varint", 33), StepFunctionBuilder.Lt("$.varint", 33), StepFunctionBuilder.Lte("$.varint", 33)))) .Choice(StepFunctionBuilder.Choice() .Transition(StepFunctionBuilder.Next("NextState")) .Condition(StepFunctionBuilder.Or(StepFunctionBuilder.Eq("$.vardate", dt), StepFunctionBuilder.Gt("$.vardate", dt), StepFunctionBuilder.Gte("$.vardate", dt), StepFunctionBuilder.Lt("$.vardate", dt), StepFunctionBuilder.Lte("$.vardate", dt)))) .Choice(StepFunctionBuilder.Choice() .Transition(StepFunctionBuilder.Next("NextState")) .Condition(StepFunctionBuilder.Eq("$.varbool", true))) .Build(); var choices = c.Choices.ToArray(); //Unknown prop Assert.False(choices[0].Condition.Match(JObject.FromObject(new { other = "value" }))); Assert.False(choices[1].Condition.Match(JObject.FromObject(new { other = "value" }))); Assert.False(choices[2].Condition.Match(JObject.FromObject(new { other = "value" }))); //Assert.False(choices[0].Condition.Match(JObject.FromObject(new { varstr = "1000" }))); //string instead of correct type Assert.False(choices[0].Condition.Match(JObject.FromObject(new { varint = "hello" }))); Assert.False(choices[1].Condition.Match(JObject.FromObject(new { vardate = "hello" }))); Assert.False(choices[2].Condition.Match(JObject.FromObject(new { varbool = "hello" }))); //Invalid date Assert.False(choices[1].Condition.Match(JObject.FromObject(new { varbool = "2016-14-14T01:59:00Z" }))); }