elsa-core/test/unit/Elsa.UnitTests/Triggers/TriggersForBlueprintsProviderTests.cs
Craig Fowler 282c90f80f Further fixup & refactoring of Autofixture attribs
This now also includes reworking the attribute which activates
Autofixture-style resolution upon an IServiceProvider.
This has now been renamed to WithAutofixtureResolutionAttribute.

The new/reworked attribute is composable with other Autofixture
attributes.
2021-04-02 13:28:27 +01:00

72 lines
5.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using AutoFixture.Xunit2;
using Elsa.ActivityProviders;
using Elsa.Bookmarks;
using Elsa.Models;
using Elsa.Services;
using Elsa.Services.Models;
using Elsa.Testing.Shared.AutoFixture.Attributes;
using Elsa.Triggers;
using Moq;
using Xunit;
namespace Elsa.UnitTests.Triggers
{
public class TriggersForBlueprintsProviderTests
{
[Theory(DisplayName = "The GetTriggersAsync method should return all triggers for start activities of the workflow blueprints"), AutoMoqData]
public async Task GetTriggersAsyncGetsAllTriggersForAllBlueprintsStartActivitiesAndCompatibleBookmarks([Frozen] IActivityTypeService activityTypeService,
[Frozen] ICreatesWorkflowExecutionContextForWorkflowBlueprint workflowExecutionContextFactory,
[Frozen] IGetsTriggersForActivityBlueprintAndWorkflow triggerProvider,
[Frozen] IGetsStartActivitiesForCompositeActivityBlueprint startingActivitiesProvider,
TriggersForBlueprintsProvider sut,
IWorkflowBlueprint workflowBlueprint1,
IWorkflowBlueprint workflowBlueprint2,
ActivityType activityType1,
ActivityType activityType2,
ActivityType activityType3,
IActivityBlueprint activityBlueprint1,
IActivityBlueprint activityBlueprint2,
IActivityBlueprint activityBlueprint3,
WorkflowTrigger trigger1,
WorkflowTrigger trigger2,
WorkflowTrigger trigger3,
WorkflowTrigger trigger4,
WorkflowTrigger trigger5,
WorkflowTrigger trigger6,
[WithAutofixtureResolution] IServiceProvider serviceProvider,
[NoAutoProperties] WorkflowInstance workflowInstance)
{
Mock.Get(activityTypeService)
.Setup(x => x.GetActivityTypesAsync(default))
.Returns(ValueTask.FromResult<IEnumerable<ActivityType>>(new [] { activityType1, activityType2, activityType3 }));
Mock.Get(startingActivitiesProvider)
.Setup(x => x.GetStartActivities(workflowBlueprint1))
.Returns(() => new [] { activityBlueprint1, activityBlueprint2 });
Mock.Get(startingActivitiesProvider)
.Setup(x => x.GetStartActivities(workflowBlueprint2))
.Returns(() => new [] { activityBlueprint3 });
Mock.Get(workflowExecutionContextFactory)
.Setup(x => x.CreateWorkflowExecutionContextAsync(It.IsAny<IWorkflowBlueprint>(), default))
.Returns((IWorkflowBlueprint bp, CancellationToken c) => Task.FromResult(new WorkflowExecutionContext(serviceProvider, bp, workflowInstance, default)));
Mock.Get(triggerProvider)
.Setup(x => x.GetTriggersForActivityBlueprintAsync(activityBlueprint1, It.IsAny<WorkflowExecutionContext>(), It.IsAny<IDictionary<string,ActivityType>>(), default))
.Returns(() => Task.FromResult<IEnumerable<WorkflowTrigger>>(new [] { trigger1, trigger2 }));
Mock.Get(triggerProvider)
.Setup(x => x.GetTriggersForActivityBlueprintAsync(activityBlueprint2, It.IsAny<WorkflowExecutionContext>(), It.IsAny<IDictionary<string,ActivityType>>(), default))
.Returns(() => Task.FromResult<IEnumerable<WorkflowTrigger>>(new [] { trigger3, trigger4 }));
Mock.Get(triggerProvider)
.Setup(x => x.GetTriggersForActivityBlueprintAsync(activityBlueprint3, It.IsAny<WorkflowExecutionContext>(), It.IsAny<IDictionary<string,ActivityType>>(), default))
.Returns(() => Task.FromResult<IEnumerable<WorkflowTrigger>>(new [] { trigger5, trigger6 }));
var results = await sut.GetTriggersAsync(new [] { workflowBlueprint1, workflowBlueprint2 });
Assert.Equal(new [] { trigger1, trigger2, trigger3, trigger4, trigger5, trigger6 },
results);
}
}
}