Skip to content

Commit e2df1f1

Browse files
fix: If condition empty else does not exist
1 parent eaf7984 commit e2df1f1

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

PowerAutomateMockUp/FlowParser/ActionExecutors/Implementations/IfActionExecutor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,24 @@ public override Task<ActionResult> Execute()
3737
if (result)
3838
{
3939
var actions = Json.SelectToken("$.actions");
40-
if (actions.HasValues)
40+
if (actions?.HasValues ?? false)
4141
{
4242
return Task.FromResult(
4343
new ActionResult
4444
{
45-
NextAction = ((JProperty) actions.First).Name
45+
NextAction = ((JProperty) actions.First)?.Name
4646
});
4747
}
4848
}
4949
else
5050
{
5151
var elseActions = Json.SelectToken("$.else.actions");
52-
if (elseActions.HasValues)
52+
if (elseActions?.HasValues ?? false)
5353
{
5454
return Task.FromResult(
5555
new ActionResult
5656
{
57-
NextAction = ((JProperty) elseActions.First).Name
57+
NextAction = ((JProperty) elseActions.First)?.Name
5858
});
5959
}
6060
}

Test/ActionTests/IfActionTest.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,5 +285,51 @@ public async Task EndsWithIfActionTest()
285285
Assert.AreEqual(ActionStatus.Succeeded, result.ActionStatus);
286286
Assert.AreEqual("TerminateTrue", result.NextAction);
287287
}
288+
289+
[Test]
290+
public async Task NoElseTest()
291+
{
292+
var expressionParserMock = new Mock<IExpressionEngine>();
293+
var log = TestLogger.Create<IfActionExecutor>();
294+
295+
expressionParserMock.Setup(x => x.ParseToValueContainer(It.IsAny<string>()))
296+
.Returns((string s) => new ValueContainer(s));
297+
298+
const string ifJson =
299+
"{\"actions\":{\"TerminateTrue\":{\"runAfter\":{},\"type\":\"Terminate\",\"inputs\":{\"runStatus\":\"Succeeded\"}}}," +
300+
"\"runAfter\":{\"Status_Reason_-_Failed\":[\"Succeeded\"]}," +
301+
"\"expression\":{\"and\":[{\"endsWith\":[\"Jane Doe\",\"Nope\"]},{\"not\":{\"endsWith\":[\"John Doe\",\"John\"]},}]},\"type\":\"If\"}";
302+
303+
var ifAction = new IfActionExecutor(expressionParserMock.Object, log);
304+
ifAction.InitializeActionExecutor("IfActionTest", JToken.Parse(ifJson));
305+
306+
var result = await ifAction.Execute();
307+
308+
Assert.AreEqual(ActionStatus.Succeeded, result.ActionStatus);
309+
Assert.AreEqual(null, result.NextAction);
310+
}
311+
312+
[Test]
313+
public async Task EmptyActionTest()
314+
{
315+
var expressionParserMock = new Mock<IExpressionEngine>();
316+
var log = TestLogger.Create<IfActionExecutor>();
317+
318+
expressionParserMock.Setup(x => x.ParseToValueContainer(It.IsAny<string>()))
319+
.Returns((string s) => new ValueContainer(s));
320+
321+
const string ifJson =
322+
"{\"actions\":{}," +
323+
"\"runAfter\":{\"Status_Reason_-_Failed\":[\"Succeeded\"]}," +
324+
"\"expression\":{\"and\":[{\"endsWith\":[\"Jane Doe\",\"Doe\"]},{\"not\":{\"endsWith\":[\"John Doe\",\"John\"]},}]},\"type\":\"If\"}";
325+
326+
var ifAction = new IfActionExecutor(expressionParserMock.Object, log);
327+
ifAction.InitializeActionExecutor("IfActionTest", JToken.Parse(ifJson));
328+
329+
var result = await ifAction.Execute();
330+
331+
Assert.AreEqual(ActionStatus.Succeeded, result.ActionStatus);
332+
Assert.AreEqual(null, result.NextAction);
333+
}
288334
}
289335
}

0 commit comments

Comments
 (0)