public void TestEqOperator()
        {
            var c = StepFunctionBuilder.ChoiceState()
                    .Choice(StepFunctionBuilder.Choice()
                            .Transition(StepFunctionBuilder.Next("NextState"))
                            .Condition(StepFunctionBuilder.Eq("$.varstr", "value")))
                    .Choice(StepFunctionBuilder.Choice()
                            .Transition(StepFunctionBuilder.Next("NextState"))
                            .Condition(StepFunctionBuilder.Eq("$.varint", 33)))
                    .Choice(StepFunctionBuilder.Choice()
                            .Transition(StepFunctionBuilder.Next("NextState"))
                            .Condition(StepFunctionBuilder.Eq("$.vardate", new DateTime(2018, 10, 22, 22, 33, 11))))
                    .Choice(StepFunctionBuilder.Choice()
                            .Transition(StepFunctionBuilder.Next("NextState"))
                            .Condition(StepFunctionBuilder.Eq("$.varbool", true)))
                    .Build();

            var choices = c.Choices.ToArray();

            Assert.True(choices[0].Condition.Match(JObject.FromObject(new { varstr = "value" })));
            Assert.False(choices[0].Condition.Match(JObject.FromObject(new { varstr = "notValue" })));

            Assert.True(choices[1].Condition.Match(JObject.FromObject(new { varint = 33 })));
            Assert.False(choices[1].Condition.Match(JObject.FromObject(new { varint = 34 })));

            Assert.True(choices[2].Condition.Match(JObject.FromObject(new { vardate = new DateTime(2018, 10, 22, 22, 33, 11) })));
            Assert.False(choices[2].Condition.Match(JObject.FromObject(new { vardate = new DateTime(2018, 10, 22, 22, 33, 12) })));

            Assert.True(choices[3].Condition.Match(JObject.FromObject(new { varbool = true })));
            Assert.False(choices[3].Condition.Match(JObject.FromObject(new { varbool = false })));
        }
Exemple #2
0
 public void ParallelState_ChoiceStateWithTerminalPath_IsValid()
 {
     AssertHasPathToTerminal(
         StepFunctionBuilder.StateMachine()
         .StartAt("Parallel")
         .State("Parallel", StepFunctionBuilder.ParallelState()
                .Transition(StepFunctionBuilder.End())
                .Branch(StepFunctionBuilder.Branch()
                        .StartAt("Initial")
                        .State("Initial", StepFunctionBuilder.PassState()
                               .Transition(StepFunctionBuilder
                                           .Next("Choice")))
                        .State("Choice", StepFunctionBuilder.ChoiceState()
                               .DefaultStateName("Default")
                               .Choice(StepFunctionBuilder.Choice()
                                       .Transition(StepFunctionBuilder
                                                   .Next("Initial"))
                                       .Condition(StepFunctionBuilder
                                                  .Eq("$.foo",
                                                      "bar")))
                               .Choice(StepFunctionBuilder.Choice()
                                       .Transition(StepFunctionBuilder
                                                   .Next("Default"))
                                       .Condition(StepFunctionBuilder
                                                  .Eq("$.foo",
                                                      "bar"))))
                        .State("Default",
                               StepFunctionBuilder
                               .PassState().Transition(StepFunctionBuilder.End())))));
 }
        public void TestNotOperator()
        {
            var c = StepFunctionBuilder.ChoiceState()
                    .Choice(StepFunctionBuilder.Choice()
                            .Transition(StepFunctionBuilder.Next("NextState"))
                            .Condition(StepFunctionBuilder.Not(StepFunctionBuilder.Eq("$.varstr", "value"))))
                    .Build();

            var choices = c.Choices.ToArray();

            Assert.False(choices[0].Condition.Match(JObject.FromObject(new { varstr = "value" }))); //Equal
        }
Exemple #4
0
 public void MissingExpectedValue_StringEqualsCondition_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ChoiceState()
                                                .Choice(StepFunctionBuilder.Choice()
                                                        .Condition(StepFunctionBuilder.Eq("$.Foo", null))
                                                        .Transition(StepFunctionBuilder.Next("Terminal")))
                                                .DefaultStateName("Terminal"))
                                         .State("Terminal", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #5
0
 public void ChoiceStateWithInvalidChoiceTransition_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         StepFunctionBuilder.StateMachine()
                                         .StartAt("Initial")
                                         .State("Initial", StepFunctionBuilder.ChoiceState()
                                                .Choice(StepFunctionBuilder.Choice()
                                                        .Condition(StepFunctionBuilder.Eq("$.Foo", "bar"))
                                                        .Transition(StepFunctionBuilder.Next("NoSuchState")))
                                                .DefaultStateName("Terminal"))
                                         .State("Terminal", StepFunctionBuilder.SucceedState())
                                         .Build());
 }
Exemple #6
0
        public void ChoiceStateWithAndCondition()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .DefaultStateName("DefaultState")
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(
                                                           StepFunctionBuilder.And(StepFunctionBuilder.Eq("$.var", "value"),
                                                                                   StepFunctionBuilder.Eq("$.other-var", 10)
                                                                                   ))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithAndCondition.json");
        }
Exemple #7
0
        public void SimpleChoiceState()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .Comment("My choice state")
                                               .DefaultStateName("DefaultState")
                                               .InputPath("$.input")
                                               .OutputPath("$.output")
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(StepFunctionBuilder.Eq("$.var", "value"))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "SimpleChoiceState.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 })));
        }
Exemple #9
0
        public void ChoiceStateWithMultipleChoices()
        {
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .DefaultStateName("DefaultState")
                                               .Choices(
                                                   StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                   .Condition(StepFunctionBuilder.Eq("$.var", "value")),
                                                   StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("OtherNextState"))
                                                   .Condition(StepFunctionBuilder.Gt("$.number", 10))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("OtherNextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithMultipleChoices.json");
        }
Exemple #10
0
 public void ChoiceStateWithPathOut_IsValid()
 {
     AssertNoCycle(
         StepFunctionBuilder.StateMachine()
         .StartAt("Initial")
         .State("Initial", StepFunctionBuilder.PassState()
                .Transition(StepFunctionBuilder.Next("ChoiceOne")))
         .State("ChoiceOne", StepFunctionBuilder.ChoiceState()
                .DefaultStateName("DefaultOne")
                .Choice(StepFunctionBuilder.Choice()
                        .Transition(StepFunctionBuilder.Next("ChoiceTwo"))
                        .Condition(StepFunctionBuilder.Eq("$.foo", "bar"))))
         .State("DefaultOne", StepFunctionBuilder.SucceedState())
         .State("ChoiceTwo", StepFunctionBuilder.ChoiceState()
                .DefaultStateName("DefaultTwo")
                .Choice(StepFunctionBuilder.Choice()
                        .Transition(StepFunctionBuilder.Next("ChoiceOne"))
                        .Condition(StepFunctionBuilder.Eq("$.foo", "bar"))))
         .State("DefaultTwo",
                StepFunctionBuilder.PassState().Transition(StepFunctionBuilder.Next("ChoiceTwo"))));
 }
        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" })));
        }
Exemple #12
0
 public void ParallelState_BranchContainsChoiceStateWithClosedCycle_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         AssertCycle(
                                             StepFunctionBuilder.StateMachine()
                                             .StartAt("Initial")
                                             .State("Initial", StepFunctionBuilder.PassState()
                                                    .Transition(StepFunctionBuilder.Next("Choice")))
                                             .State("Choice", StepFunctionBuilder.ChoiceState()
                                                    .DefaultStateName("Terminal")
                                                    .Choice(StepFunctionBuilder.Choice()
                                                            .Transition(StepFunctionBuilder.Next("Terminal"))
                                                            .Condition(StepFunctionBuilder.Eq("$.foo", "bar")))
                                                    .Choice(StepFunctionBuilder.Choice()
                                                            .Transition(StepFunctionBuilder.Next("NonTerminal"))
                                                            .Condition(StepFunctionBuilder.Eq("$.foo", "bar"))))
                                             .State("Terminal", StepFunctionBuilder.PassState().Transition(StepFunctionBuilder.End()))
                                             .State("NonTerminal",
                                                    StepFunctionBuilder.PassState().Transition(StepFunctionBuilder.Next("Cyclic")))
                                             .State("Cyclic",
                                                    StepFunctionBuilder.PassState().Transition(StepFunctionBuilder.Next("NonTerminal")))));
 }
Exemple #13
0
        public void ChoiceStateWithAllPrimitiveConditions()
        {
            DateTime     date         = DateTime.Parse("2016-03-14T01:59:00.000Z").ToUniversalTime();
            StateMachine stateMachine = StepFunctionBuilder.StateMachine()
                                        .StartAt("InitialState")
                                        .State("InitialState", StepFunctionBuilder.ChoiceState()
                                               .DefaultStateName("DefaultState")
                                               .Choice(StepFunctionBuilder.Choice().Transition(StepFunctionBuilder.Next("NextState"))
                                                       .Condition(StepFunctionBuilder.And(
                                                                      StepFunctionBuilder.Eq("$.string", "value"),
                                                                      StepFunctionBuilder.Gt("$.string", "value"),
                                                                      StepFunctionBuilder.Gte("$.string", "value"),
                                                                      StepFunctionBuilder.Lt("$.string", "value"),
                                                                      StepFunctionBuilder.Lte("$.string", "value"),
                                                                      StepFunctionBuilder.Eq("$.integral", 42),
                                                                      StepFunctionBuilder.Gt("$.integral", 42),
                                                                      StepFunctionBuilder.Gte("$.integral", 42),
                                                                      StepFunctionBuilder.Lt("$.integral", 42),
                                                                      StepFunctionBuilder.Lte("$.integral", 42),
                                                                      StepFunctionBuilder.Eq("$.double", 9000.1),
                                                                      StepFunctionBuilder.Gt("$.double", 9000.1),
                                                                      StepFunctionBuilder.Gte("$.double", 9000.1),
                                                                      StepFunctionBuilder.Lt("$.double", 9000.1),
                                                                      StepFunctionBuilder.Lte("$.double", 9000.1),
                                                                      StepFunctionBuilder.Eq("$.timestamp", date),
                                                                      StepFunctionBuilder.Gt("$.timestamp", date),
                                                                      StepFunctionBuilder.Gte("$.timestamp", date),
                                                                      StepFunctionBuilder.Lt("$.timestamp", date),
                                                                      StepFunctionBuilder.Lte("$.timestamp", date),
                                                                      StepFunctionBuilder.Eq("$.boolean", true),
                                                                      StepFunctionBuilder.Eq("$.boolean", false)
                                                                      ))))
                                        .State("NextState", StepFunctionBuilder.SucceedState())
                                        .State("DefaultState", StepFunctionBuilder.SucceedState())
                                        .Build();

            AssertStateMachine(stateMachine, "ChoiceStateWithAllPrimitiveCondition.json");
        }
Exemple #14
0
 public void ChoiceStateWithOnlyCycles_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         AssertDoesNotHaveTerminalPath(StepFunctionBuilder.StateMachine()
                                                                       .StartAt("Initial")
                                                                       .State("Initial", StepFunctionBuilder.PassState()
                                                                              .Transition(StepFunctionBuilder.Next("Choice")))
                                                                       .State("Choice", StepFunctionBuilder.ChoiceState()
                                                                              .DefaultStateName("Default")
                                                                              .Choice(StepFunctionBuilder.Choice()
                                                                                      .Transition(StepFunctionBuilder
                                                                                                  .Next("Initial"))
                                                                                      .Condition(StepFunctionBuilder
                                                                                                 .Eq("$.foo",
                                                                                                     "bar")))
                                                                              .Choice(StepFunctionBuilder.Choice()
                                                                                      .Transition(StepFunctionBuilder
                                                                                                  .Next("Default"))
                                                                                      .Condition(StepFunctionBuilder
                                                                                                 .Eq("$.foo",
                                                                                                     "bar"))))
                                                                       .State("Default",
                                                                              StepFunctionBuilder.PassState().Transition(StepFunctionBuilder.Next("Choice")))));
 }
Exemple #15
0
 public void ParallelState_WithChoiceThatHasNoTerminalPath_IsNotValid()
 {
     Assert.Throws <ValidationException>(() =>
                                         AssertDoesNotHaveTerminalPath(
                                             StepFunctionBuilder.StateMachine()
                                             .StartAt("Parallel")
                                             .State("Parallel", StepFunctionBuilder.ParallelState()
                                                    .Transition(StepFunctionBuilder.End())
                                                    .Branch(StepFunctionBuilder.Branch()
                                                            .StartAt("Initial")
                                                            .State("Initial",
                                                                   StepFunctionBuilder
                                                                   .PassState()
                                                                   .Transition(StepFunctionBuilder
                                                                               .Next("Choice")))
                                                            .State("Choice",
                                                                   StepFunctionBuilder
                                                                   .ChoiceState()
                                                                   .DefaultStateName("Default")
                                                                   .Choice(StepFunctionBuilder
                                                                           .Choice()
                                                                           .Transition(StepFunctionBuilder
                                                                                       .Next("Initial"))
                                                                           .Condition(StepFunctionBuilder
                                                                                      .Eq("$.foo",
                                                                                          "bar")))
                                                                   .Choice(StepFunctionBuilder
                                                                           .Choice()
                                                                           .Transition(StepFunctionBuilder
                                                                                       .Next("Default"))
                                                                           .Condition(StepFunctionBuilder
                                                                                      .Eq("$.foo",
                                                                                          "bar"))))
                                                            .State("Default",
                                                                   StepFunctionBuilder
                                                                   .PassState()
                                                                   .Transition(StepFunctionBuilder
                                                                               .Next("Choice")))))));
 }