elsa-core/test/shared/Elsa.Testing.Shared/AutoFixture/SpecimenBuilders/AutofixtureServiceProviderSpecimenBuilder.cs
Craig Fowler b583c7f1a9
Resolves #485 - Add PurgeVariables functionality (#654)
* Trivial - Add VS Code workspace

* Trivial - Add VSCode build task & extra ignore

On GNU/Linux, auto-generated .directory
files should be ignored.

* WIP #485 - Boilerplate for unit test project

* WIP #485 - Add test coverage (Remove/RemoveAll)

* WIP #485 - Implement RemoveAll

* Remove redundant logic, covered by IDictionary

Per the following, the contract for a generic IDictionary,
the Remove method already deals with non-existent keys.

  https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.idictionary-2.remove?view=net-5.0#System_Collections_Generic_IDictionary_2_Remove__0_

* Resolve #485 - Add PurgeVariables methods

These are convenience methods upon ActivityExecutionContext
and WorkflowExecutionContext, consistent with their current APIs.

Also in this commit are tests for those simple methods.
There's a bit of test-scaffold as well included, such as:
* Autofixture Xunit2 integration
* New project for unit tests
* Customize attribute for avoiding crashes on Autofixture recursion
* Reusable specimen builder for creating IServiceProvider which
  resolves services from Autofixture
* Custonize attribute for a parameter to use that ^^ specimen builder
2021-02-24 14:29:03 +01:00

36 lines
1.2 KiB
C#

using System;
using System.Reflection;
using AutoFixture.Kernel;
using Moq;
namespace Elsa.Testing.Shared.AutoFixture.SpecimenBuilders
{
/// <summary>
/// Creates a mock <see cref="IServiceProvider"/> which gets services
/// by resolving them from Autofixture.
/// </summary>
public class AutofixtureServiceProviderSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
if(Equals(request, typeof(IServiceProvider)))
return GetServiceProvider(context);
if(request is ParameterInfo paramInfo && paramInfo.ParameterType == typeof(IServiceProvider))
return GetServiceProvider(context);
return new NoSpecimen();
}
static object GetServiceProvider(ISpecimenContext context)
{
var provider = new Mock<IServiceProvider>();
provider.Name = $"Autofixture_{nameof(IServiceProvider)}-{Guid.NewGuid()}";
provider
.Setup(x => x.GetService(It.IsAny<Type>()))
.Returns((Type t) => context.Resolve(t));
return provider.Object;
}
}
}