Skip to content

Commit

Permalink
fix: If condition empty else does not exist
Browse files Browse the repository at this point in the history
  • Loading branch information
thygesteffensen committed Jan 28, 2021
1 parent eaf7984 commit e2df1f1
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,24 +37,24 @@ public override Task<ActionResult> Execute()
if (result)
{
var actions = Json.SelectToken("$.actions");
if (actions.HasValues)
if (actions?.HasValues ?? false)
{
return Task.FromResult(
new ActionResult
{
NextAction = ((JProperty) actions.First).Name
NextAction = ((JProperty) actions.First)?.Name
});
}
}
else
{
var elseActions = Json.SelectToken("$.else.actions");
if (elseActions.HasValues)
if (elseActions?.HasValues ?? false)
{
return Task.FromResult(
new ActionResult
{
NextAction = ((JProperty) elseActions.First).Name
NextAction = ((JProperty) elseActions.First)?.Name
});
}
}
Expand Down
46 changes: 46 additions & 0 deletions Test/ActionTests/IfActionTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,5 +285,51 @@ public async Task EndsWithIfActionTest()
Assert.AreEqual(ActionStatus.Succeeded, result.ActionStatus);
Assert.AreEqual("TerminateTrue", result.NextAction);
}

[Test]
public async Task NoElseTest()
{
var expressionParserMock = new Mock<IExpressionEngine>();
var log = TestLogger.Create<IfActionExecutor>();

expressionParserMock.Setup(x => x.ParseToValueContainer(It.IsAny<string>()))
.Returns((string s) => new ValueContainer(s));

const string ifJson =
"{\"actions\":{\"TerminateTrue\":{\"runAfter\":{},\"type\":\"Terminate\",\"inputs\":{\"runStatus\":\"Succeeded\"}}}," +
"\"runAfter\":{\"Status_Reason_-_Failed\":[\"Succeeded\"]}," +
"\"expression\":{\"and\":[{\"endsWith\":[\"Jane Doe\",\"Nope\"]},{\"not\":{\"endsWith\":[\"John Doe\",\"John\"]},}]},\"type\":\"If\"}";

var ifAction = new IfActionExecutor(expressionParserMock.Object, log);
ifAction.InitializeActionExecutor("IfActionTest", JToken.Parse(ifJson));

var result = await ifAction.Execute();

Assert.AreEqual(ActionStatus.Succeeded, result.ActionStatus);
Assert.AreEqual(null, result.NextAction);
}

[Test]
public async Task EmptyActionTest()
{
var expressionParserMock = new Mock<IExpressionEngine>();
var log = TestLogger.Create<IfActionExecutor>();

expressionParserMock.Setup(x => x.ParseToValueContainer(It.IsAny<string>()))
.Returns((string s) => new ValueContainer(s));

const string ifJson =
"{\"actions\":{}," +
"\"runAfter\":{\"Status_Reason_-_Failed\":[\"Succeeded\"]}," +
"\"expression\":{\"and\":[{\"endsWith\":[\"Jane Doe\",\"Doe\"]},{\"not\":{\"endsWith\":[\"John Doe\",\"John\"]},}]},\"type\":\"If\"}";

var ifAction = new IfActionExecutor(expressionParserMock.Object, log);
ifAction.InitializeActionExecutor("IfActionTest", JToken.Parse(ifJson));

var result = await ifAction.Execute();

Assert.AreEqual(ActionStatus.Succeeded, result.ActionStatus);
Assert.AreEqual(null, result.NextAction);
}
}
}

0 comments on commit e2df1f1

Please sign in to comment.