2021-02-27 17:45:22 +00:00
using System.Threading.Tasks ;
using Elsa.Services.Models ;
using Elsa.Activities.Signaling.Models ;
using Xunit ;
using Elsa.ActivityResults ;
using System.Linq ;
2021-04-07 11:00:58 +00:00
using Elsa.Testing.Shared ;
2021-09-16 18:34:32 +00:00
using Elsa.Testing.Shared.AutoFixture.Attributes ;
2021-02-27 17:45:22 +00:00
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]
2021-09-16 18:25:38 +00:00
public async Task CanExecuteAsyncShouldReturnATaskOfFalseIfTheSignalNameDoesNotMatch (
SignalReceived sut ,
Signal triggeredSignal )
2021-02-27 17:45:22 +00:00
{
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]
2021-09-16 18:25:38 +00:00
public async Task CanExecuteAsyncShouldReturnATaskOfTrueIfTheSignalNameMatchs (
SignalReceived sut ,
string signalName ,
Signal triggeredSignal )
2021-02-27 17:45:22 +00:00
{
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]
2021-09-16 18:25:38 +00:00
public async Task CanExecuteAsyncShouldReturnATaskOfFalseIfTheInputIsNotATriggeredSignal (
SignalReceived sut ,
string signalName ,
object notASignal )
2021-02-27 17:45:22 +00:00
{
var context = new ActivityExecutionContext ( default , default , default , notASignal , default , default ) ;
sut . Signal = signalName ;
var result = await sut . CanExecuteAsync ( context ) ;
Assert . False ( result ) ;
}
2021-06-14 09:46:04 +00:00
[Theory(DisplayName = "The ResumeAsync method should return a 'Done' Outcome result"), AutoMoqData]
2021-09-16 18:34:32 +00:00
public async Task ResumeAsyncShouldReturnDoneResult ( SignalReceived sut , Signal triggeredSignal , object signalInput , [ StubActivityBlueprint ] IActivityBlueprint activityBlueprint )
2021-02-27 17:45:22 +00:00
{
2021-09-16 18:34:32 +00:00
var context = new ActivityExecutionContext ( default ! , default ! , activityBlueprint , triggeredSignal , default , default ) ;
2021-02-27 17:45:22 +00:00
triggeredSignal . Input = signalInput ;
2021-09-16 18:25:38 +00:00
2021-02-27 17:45:22 +00:00
var result = await sut . ResumeAsync ( context ) ;
2021-06-14 09:46:04 +00:00
Assert . True ( ( result is OutcomeResult outcome & & outcome . Outcomes . Any ( o = > o = = OutcomeNames . Done ) ) ,
2021-09-16 18:25:38 +00:00
$"The result is {nameof(OutcomeResult)} which contains a {nameof(OutcomeResult)} (of \" Done \ ")." ) ;
2021-02-27 17:45:22 +00:00
}
[Theory(DisplayName = "The ResumeAsync method should include the original signal input within the Output result"), AutoMoqData]
2021-09-16 18:34:32 +00:00
public async Task ResumeAsyncShouldReturnOriginalSignalInputWithinDoneResult ( SignalReceived sut , Signal triggeredSignal , object signalInput , [ StubActivityBlueprint ] IActivityBlueprint activityBlueprint )
2021-02-27 17:45:22 +00:00
{
2021-09-16 18:34:32 +00:00
var context = new ActivityExecutionContext ( default ! , default ! , activityBlueprint , triggeredSignal , default , default ) ;
2021-02-27 17:45:22 +00:00
triggeredSignal . Input = signalInput ;
2021-06-14 09:46:04 +00:00
await sut . ResumeAsync ( context ) ;
var resultOutput = sut . Output ;
2021-02-27 17:45:22 +00:00
Assert . Same ( signalInput , resultOutput ) ;
}
}
}