using System; using Elsa.Extensions; using Elsa.Modules.Activities.Contracts; using Elsa.Modules.Activities.Providers; using Elsa.Persistence.InMemory.Extensions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Xunit.Abstractions; namespace Elsa.Testing.Shared; public class TestApplicationBuilder { private readonly ITestOutputHelper _testOutputHelper; private readonly ServiceCollection _services; public TestApplicationBuilder(ITestOutputHelper testOutputHelper) { _testOutputHelper = testOutputHelper; _services = new ServiceCollection(); _services .AddElsa() .AddInMemoryPersistence() .AddSingleton(testOutputHelper) .AddSingleton(new StandardOutStreamProvider(new XunitConsoleTextWriter(testOutputHelper))) .AddLogging(logging => logging.AddProvider(new XunitLoggerProvider(testOutputHelper)).SetMinimumLevel(LogLevel.Debug)); } public IServiceProvider Build() => _services.BuildServiceProvider(); public TestApplicationBuilder Configure(Action configure) { configure(_services); return this; } public TestApplicationBuilder WithCapturingTextWriter(CapturingTextWriter capturingTextWriter) { var combinedTextWriter = new CombinedTextWriter(capturingTextWriter, new XunitConsoleTextWriter(_testOutputHelper)); _services.AddSingleton(new StandardOutStreamProvider(combinedTextWriter)); return this; } }