Unit test coverage for If activity

This commit is contained in:
lucas.hipolito 2025-10-14 11:45:21 +02:00
parent 9f19f1a80e
commit 954e88bae5

View file

@ -0,0 +1,240 @@
using Elsa.Activities.UnitTests.Helpers;
using Elsa.Extensions;
namespace Elsa.Activities.UnitTests.Branching;
public class IfTests
{
[Fact]
public async Task Should_Evaluate_Condition_And_Set_Result_When_Activity_Runs()
{
// Arrange
var ifActivity = new If(() => true);
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.True(resultValue);
}
[Fact]
public async Task Should_Set_Result_To_True_When_Condition_Is_True()
{
// Arrange
var variable = new Variable<string>("testVar", "initial", "testVar");
var thenActivity = new SetVariable<string>(variable, new Input<string>("then_executed"));
var ifActivity = new If(() => true)
{
Then = thenActivity
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.True(resultValue);
}
[Fact]
public async Task Should_Set_Result_To_False_When_Condition_Is_False()
{
// Arrange
var variable = new Variable<string>("testVar", "initial", "testVar");
var elseActivity = new SetVariable<string>(variable, new Input<string>("else_executed"));
var ifActivity = new If(() => false)
{
Else = elseActivity
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.False(resultValue);
}
[Fact]
public async Task Should_Set_Result_To_True_When_Condition_Is_True_With_Both_Branches()
{
// Arrange
var thenVariable = new Variable<string>("thenVar", "initial", "thenVar");
var elseVariable = new Variable<string>("elseVar", "initial", "elseVar");
var thenActivity = new SetVariable<string>(thenVariable, new Input<string>("then_executed"));
var elseActivity = new SetVariable<string>(elseVariable, new Input<string>("else_executed"));
var ifActivity = new If(() => true)
{
Then = thenActivity,
Else = elseActivity
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.True(resultValue);
}
[Fact]
public async Task Should_Set_Result_To_False_When_Condition_Is_False_With_Both_Branches()
{
// Arrange
var thenVariable = new Variable<string>("thenVar", "initial", "thenVar");
var elseVariable = new Variable<string>("elseVar", "initial", "elseVar");
var thenActivity = new SetVariable<string>(thenVariable, new Input<string>("then_executed"));
var elseActivity = new SetVariable<string>(elseVariable, new Input<string>("else_executed"));
var ifActivity = new If(() => false)
{
Then = thenActivity,
Else = elseActivity
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.False(resultValue);
}
[Fact]
public async Task Should_Set_Result_With_Missing_Else_Branch_When_Condition_Is_True()
{
// Arrange
var variable = new Variable<string>("testVar", "initial", "testVar");
var thenActivity = new SetVariable<string>(variable, new Input<string>("then_executed"));
var ifActivity = new If(() => true)
{
Then = thenActivity
// Else is intentionally null
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.True(resultValue);
}
[Fact]
public async Task Should_Set_Result_With_Missing_Else_Branch_When_Condition_Is_False()
{
// Arrange
var variable = new Variable<string>("testVar", "initial", "testVar");
var thenActivity = new SetVariable<string>(variable, new Input<string>("then_executed"));
var ifActivity = new If(() => false)
{
Then = thenActivity
// Else is intentionally null
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.False(resultValue);
}
[Fact]
public async Task Should_Set_Result_With_Missing_Then_Branch_When_Condition_Is_True()
{
// Arrange
var variable = new Variable<string>("testVar", "initial", "testVar");
var elseActivity = new SetVariable<string>(variable, new Input<string>("else_executed"));
var ifActivity = new If(() => true)
{
// Then is intentionally null
Else = elseActivity
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.True(resultValue);
}
[Fact]
public async Task Should_Set_Result_With_Missing_Then_Branch_When_Condition_Is_False()
{
// Arrange
var variable = new Variable<string>("testVar", "initial", "testVar");
var elseActivity = new SetVariable<string>(variable, new Input<string>("else_executed"));
var ifActivity = new If(() => false)
{
// Then is intentionally null
Else = elseActivity
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.False(resultValue);
}
[Fact]
public async Task Should_Not_Throw_When_Both_Branches_Are_Missing_And_Condition_Is_True()
{
// Arrange
var ifActivity = new If(() => true)
{
// Both Then and Else are intentionally null
};
// Act & Assert
var exception = await Record.ExceptionAsync(async () => await ActivityTestHelper.ExecuteActivityAsync(ifActivity));
Assert.Null(exception);
}
[Fact]
public async Task Should_Not_Throw_When_Both_Branches_Are_Missing_And_Condition_Is_False()
{
// Arrange
var ifActivity = new If(() => false)
{
// Both Then and Else are intentionally null
};
// Act & Assert
var exception = await Record.ExceptionAsync(async () => await ActivityTestHelper.ExecuteActivityAsync(ifActivity));
Assert.Null(exception);
}
[Fact]
public async Task Should_Set_Result_When_Both_Branches_Are_Missing()
{
// Arrange
var ifActivity = new If(() => true)
{
// Both Then and Else are intentionally null
};
// Act
var context = await ActivityTestHelper.ExecuteActivityAsync(ifActivity);
// Assert
var resultValue = (bool)context.GetExecutionOutput(_ => ifActivity.Result)!;
Assert.True(resultValue);
}
}