diff --git a/test/integration/Elsa.Activities.IntegrationTests/Branching/FlowDecisionTests.cs b/test/integration/Elsa.Activities.IntegrationTests/Branching/FlowDecisionTests.cs
new file mode 100644
index 000000000..1853ca250
--- /dev/null
+++ b/test/integration/Elsa.Activities.IntegrationTests/Branching/FlowDecisionTests.cs
@@ -0,0 +1,206 @@
+using Elsa.Testing.Shared;
+using Elsa.Workflows.Activities;
+using Elsa.Workflows.Activities.Flowchart.Activities;
+using Xunit.Abstractions;
+
+namespace Elsa.Activities.IntegrationTests.Branching;
+
+///
+/// Integration tests for FlowDecision activity in flowchart scenarios.
+///
+[Collection("FlowchartTests")]
+public class FlowDecisionTests(ITestOutputHelper testOutputHelper) : IDisposable
+{
+ private readonly WorkflowTestFixture _fixture = new(testOutputHelper);
+ private readonly bool _originalFlowMode = Flowchart.UseTokenFlow;
+
+ public void Dispose()
+ {
+ Flowchart.UseTokenFlow = _originalFlowMode;
+ }
+
+ [Theory(DisplayName = "FlowDecision follows correct path based on condition")]
+ [MemberData(nameof(BasicPathTestCases))]
+ public async Task Should_Follow_Correct_Path_Based_On_Condition(bool useTokenFlow, bool condition, string[] expectedOutputs, string[] unexpectedOutputs)
+ {
+ // Arrange
+ Flowchart.UseTokenFlow = useTokenFlow;
+
+ var start = new WriteLine("Start");
+ var decision = new FlowDecision(ctx => condition);
+ var truePath = new WriteLine("TruePath");
+ var falsePath = new WriteLine("FalsePath");
+
+ var flowchart = new Flowchart
+ {
+ Start = start,
+ Activities = { start, decision, truePath, falsePath },
+ Connections =
+ {
+ new() { Source = new(start, "Done"), Target = new(decision) },
+ new() { Source = new(decision, "True"), Target = new(truePath) },
+ new() { Source = new(decision, "False"), Target = new(falsePath) }
+ }
+ };
+
+ // Act
+ await _fixture.RunActivityAsync(flowchart);
+
+ // Assert
+ AssertOutputs(expectedOutputs, unexpectedOutputs);
+ }
+
+ public static IEnumerable