elsa-core/test/shared/Elsa.Testing.Shared/AutoFixture/Customizations/HostBubilderUsingServicesCustomization.cs
Craig Fowler cbc7c2d461 WIP #552 - Refactor test logic (reusability)
This refactor of integration test logic is to boost its
reusability.  Moving some functionality to attributes &
customization classes means I can reuse elsewhere without
duplication.
2021-03-06 13:55:19 +00:00

37 lines
1.3 KiB
C#

using System;
using System.Reflection;
using AutoFixture;
using AutoFixture.Kernel;
using Elsa.Testing.Shared.AutoFixture.SpecimenBuilders;
using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Testing.Shared.AutoFixture.Customizations
{
public class HostBubilderUsingServicesCustomization : ICustomization
{
readonly Action<IServiceCollection> serviceConfig;
readonly ParameterInfo? parameter;
public void Customize(IFixture fixture)
{
fixture.Customizations.Insert(0, GetSpecimenBuilder());
}
ISpecimenBuilder GetSpecimenBuilder()
{
var specimenBuilder = new HostBubilderUsingServicesSpecimenBuilder(serviceConfig);
if(parameter is null) return specimenBuilder;
var paramSpec = new ParameterSpecification(parameter.ParameterType, parameter.Name);
return new FilteringSpecimenBuilder(specimenBuilder, paramSpec);
}
public HostBubilderUsingServicesCustomization(Action<IServiceCollection> serviceConfig,
ParameterInfo? parameter = null)
{
this.parameter = parameter ?? throw new ArgumentNullException(nameof(parameter));
this.serviceConfig = serviceConfig ?? throw new ArgumentNullException(nameof(serviceConfig));
}
}
}