elsa-core/src/common/Elsa.Testing.Shared/TestApplicationBuilder.cs

85 lines
3.1 KiB
C#
Raw Normal View History

2022-04-12 13:55:35 +00:00
using Elsa.Extensions;
using Elsa.Features.Services;
using Elsa.Workflows.Core.Services;
2023-04-13 20:23:07 +00:00
using Microsoft.Extensions.Configuration;
2022-04-12 13:55:35 +00:00
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Xunit.Abstractions;
namespace Elsa.Testing.Shared;
2023-04-17 13:58:07 +00:00
/// <summary>
/// A builder that can be used to configure an <see cref="IServiceProvider"/> for testing purposes.
/// </summary>
2022-04-18 13:48:21 +00:00
public class TestApplicationBuilder
2022-04-12 13:55:35 +00:00
{
private readonly ITestOutputHelper _testOutputHelper;
private readonly ServiceCollection _services;
private Action<IModule> _configureElsa;
2023-04-17 13:58:07 +00:00
/// <summary>
/// Initializes a new instance of the <see cref="TestApplicationBuilder"/> class.
/// </summary>
/// <param name="testOutputHelper">The test output helper.</param>
2022-04-18 13:48:21 +00:00
public TestApplicationBuilder(ITestOutputHelper testOutputHelper)
2022-04-12 13:55:35 +00:00
{
_testOutputHelper = testOutputHelper;
_services = new ServiceCollection();
2022-04-12 13:55:35 +00:00
_services
.AddSingleton(testOutputHelper)
2023-04-13 20:23:07 +00:00
.AddSingleton<IConfiguration, ConfigurationManager>()
2022-04-12 13:55:35 +00:00
.AddLogging(logging => logging.AddProvider(new XunitLoggerProvider(testOutputHelper)).SetMinimumLevel(LogLevel.Debug));
_configureElsa += elsa => elsa
.UseWorkflows(workflows => workflows
.WithStandardOutStreamProvider(_ => new StandardOutStreamProvider(new XunitConsoleTextWriter(_testOutputHelper)))
);
}
2023-04-17 13:58:07 +00:00
/// <summary>
/// Builds the <see cref="IServiceProvider"/>.
/// </summary>
/// <returns>The <see cref="IServiceProvider"/>.</returns>
public IServiceProvider Build()
{
_services.AddElsa(_configureElsa);
return _services.BuildServiceProvider();
}
2022-04-12 13:55:35 +00:00
2023-04-17 13:58:07 +00:00
/// <summary>
/// Configures Elsa.
/// </summary>
/// <param name="configure">The configuration delegate.</param>
/// <returns>The <see cref="TestApplicationBuilder"/>.</returns>
public TestApplicationBuilder ConfigureElsa(Action<IModule> configure)
{
_configureElsa += configure;
return this;
}
2023-04-17 13:58:07 +00:00
/// <summary>
/// Configures the service provider.
/// </summary>
/// <param name="configure">The configuration delegate.</param>
/// <returns>The <see cref="TestApplicationBuilder"/>.</returns>
public TestApplicationBuilder ConfigureServices(Action<IServiceCollection> configure)
{
configure(_services);
return this;
}
2022-04-12 13:55:35 +00:00
2023-04-17 13:58:07 +00:00
/// <summary>
/// Configures the service provider to use a <see cref="CapturingTextWriter"/> to capture standard output.
/// </summary>
/// <param name="capturingTextWriter">The capturing text writer.</param>
/// <returns>The <see cref="TestApplicationBuilder"/>.</returns>
2022-04-18 13:48:21 +00:00
public TestApplicationBuilder WithCapturingTextWriter(CapturingTextWriter capturingTextWriter)
{
var combinedTextWriter = new CombinedTextWriter(capturingTextWriter, new XunitConsoleTextWriter(_testOutputHelper));
var provider = new StandardOutStreamProvider(combinedTextWriter);
ConfigureElsa(elsa => elsa.UseWorkflows(workflows => workflows.WithStandardOutStreamProvider(_ => provider)));
return this;
2022-04-12 13:55:35 +00:00
}
}