elsa-core/test/unit/Elsa.UnitTests/Activities/Signaling/SignalReceivedTests.cs
Sipke Schoorstra ce957b95e7 Cleanup
2021-04-07 13:13:13 +02:00

82 lines
4.2 KiB
C#

using System.Threading.Tasks;
using Elsa.Services.Models;
using Elsa.Activities.Signaling.Models;
using Xunit;
using Elsa.ActivityResults;
using System.Linq;
using Elsa.Testing.Shared;
namespace Elsa.Activities.Signaling
{
public class SignalReceivedTests
{
[Theory(DisplayName = "The CanExecuteAsync method should return a task of false if the signal name does not match the triggered signal"), AutoMoqData]
public async Task CanExecuteAsyncShouldReturnATaskOfFalseIfTheSignalNameDoesNotMatch(SignalReceived sut,
Signal triggeredSignal)
{
var context = new ActivityExecutionContext(default, default, default, triggeredSignal, default, default);
triggeredSignal.SignalName = "Yes";
sut.Signal = "No";
var result = await sut.CanExecuteAsync(context);
Assert.False(result);
}
[Theory(DisplayName = "The CanExecuteAsync method should return a task of true if the signal name matches the triggered signal"), AutoMoqData]
public async Task CanExecuteAsyncShouldReturnATaskOfTrueIfTheSignalNameMatchs(SignalReceived sut,
string signalName,
Signal triggeredSignal)
{
var context = new ActivityExecutionContext(default, default, default, triggeredSignal, default, default);
triggeredSignal.SignalName = signalName;
sut.Signal = signalName;
var result = await sut.CanExecuteAsync(context);
Assert.True(result);
}
[Theory(DisplayName = "The CanExecuteAsync method should return a task of false if the input from the context is not a triggered signal"), AutoMoqData]
public async Task CanExecuteAsyncShouldReturnATaskOfFalseIfTheInputIsNotATriggeredSignal(SignalReceived sut,
string signalName,
object notASignal)
{
var context = new ActivityExecutionContext(default, default, default, notASignal, default, default);
sut.Signal = signalName;
var result = await sut.CanExecuteAsync(context);
Assert.False(result);
}
[Theory(DisplayName = "The ResumeAsync method should return a combined 'Done' Outcome & Output result"), AutoMoqData]
public async Task ResumeAsyncShouldReturnCombinedDoneAndOutputResult(SignalReceived sut, Signal triggeredSignal, object signalInput)
{
var context = new ActivityExecutionContext(default, default, default, triggeredSignal, default, default);
triggeredSignal.Input = signalInput;
var result = await sut.ResumeAsync(context);
Assert.True((result is CombinedResult combinedResult)
&& combinedResult.Results.Any(res => res is OutcomeResult outcome && outcome.Outcomes.Any(o => o == OutcomeNames.Done))
&& combinedResult.Results.Any(res => res is OutputResult),
$"The result is {nameof(CombinedResult)} which contains both a {nameof(OutcomeResult)} (of \"Done\") and a {nameof(OutputResult)}.");
}
[Theory(DisplayName = "The ResumeAsync method should include the original signal input within the Output result"), AutoMoqData]
public async Task ResumeAsyncShouldReturnOriginalSignalInputWithinDoneResult(SignalReceived sut, Signal triggeredSignal, object signalInput)
{
var context = new ActivityExecutionContext(default, default, default, triggeredSignal, default, default);
triggeredSignal.Input = signalInput;
var result = await sut.ResumeAsync(context);
var resultOutput = ((CombinedResult) result).Results
.OfType<OutputResult>()
?.FirstOrDefault()
?.Output;
Assert.Same(signalInput, resultOutput);
}
}
}