elsa-core/test/integration/Elsa.IntegrationTests/Scenarios/ParentChildOutputMapping/Tests.cs
2023-11-17 20:59:09 +01:00

88 lines
3.4 KiB
C#

using System;
using System.Linq;
using System.Threading.Tasks;
using Elsa.Testing.Shared;
using Xunit;
using Xunit.Abstractions;
namespace Elsa.IntegrationTests.Scenarios.ParentChildOutputMapping;
/// <summary>
/// Tests for mapping an activity's output directly to the workflow's output definition.
/// </summary>
public class Tests
{
private readonly CapturingTextWriter _capturingTextWriter = new();
private readonly IServiceProvider _services;
public Tests(ITestOutputHelper testOutputHelper)
{
_services = new TestApplicationBuilder(testOutputHelper).WithCapturingTextWriter(_capturingTextWriter).Build();
}
[Fact(DisplayName = "Parent workflow receives output from child workflow.")]
public async Task Test1()
{
// Populate registries.
await _services.PopulateRegistriesAsync();
// Import child workflow.
var sumFileName = "Scenarios/ParentChildOutputMapping/Workflows/sum.json";
await _services.ImportWorkflowDefinitionAsync(sumFileName);
// Import parent workflow.
var calculatorFileName = "Scenarios/ParentChildOutputMapping/Workflows/calculator.json";
var workflowDefinition = await _services.ImportWorkflowDefinitionAsync(calculatorFileName);
// Execute.
await _services.RunWorkflowUntilEndAsync(workflowDefinition.DefinitionId);
// Assert expected output.
var lines = _capturingTextWriter.Lines.ToList();
Assert.Equal(new[] { "Result: 9" }, lines);
}
[Fact(DisplayName = "Multiple parent/child workflows receive output from child workflows even when using same output names.")]
public async Task Test2()
{
// Populate registries.
await _services.PopulateRegistriesAsync();
// Import workflows.
await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/a.json");
await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/b.json");
await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/c.json");
// Import root workflow.
var workflowDefinition = await _services.ImportWorkflowDefinitionAsync("Scenarios/ParentChildOutputMapping/Workflows/d.json");
// Execute.
await _services.RunWorkflowUntilEndAsync(workflowDefinition.DefinitionId);
// Assert expected output.
var lines = _capturingTextWriter.Lines.ToList();
Assert.Equal(new[] { "FooBar" }, lines);
}
[Fact(DisplayName = "Parent workflow receives output from child workflow when using SetOutput activity.")]
public async Task Test3()
{
// Populate registries.
await _services.PopulateRegistriesAsync();
// Import child workflow.
var producerFileName = "Scenarios/ParentChildOutputMapping/Workflows/producer.json";
await _services.ImportWorkflowDefinitionAsync(producerFileName);
// Import parent workflow.
var consumerFileName = "Scenarios/ParentChildOutputMapping/Workflows/consumer.json";
var workflowDefinition = await _services.ImportWorkflowDefinitionAsync(consumerFileName);
// Execute.
await _services.RunWorkflowUntilEndAsync(workflowDefinition.DefinitionId);
// Assert expected output.
var lines = _capturingTextWriter.Lines.ToList();
Assert.Equal(new[] { "Foo" }, lines);
}
}