diff --git a/CHANGELOG.md b/CHANGELOG.md index 1408b2c41..15cfd0f55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,11 @@ * Enhance BoDi error handling to provide the name of the interface being registered when that interface has already been resolved (#324) * Improve code-behind feature file compilation speed (#336) * Improve parameter type naming for generic types (#343) +* Add default registration for IReqnrollOutputHelper using Autofac (#357) ## Bug fixes: -*Contributors of this release (in alphabetical order):* @clrudolphi, @obligaron, @olegKoshmeliuk +*Contributors of this release (in alphabetical order):* @Antwane, @clrudolphi, @obligaron, @olegKoshmeliuk # v2.2.1 - 2024-11-08 diff --git a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs index eeb13ea9c..d15fbee68 100644 --- a/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs +++ b/Plugins/Reqnroll.Autofac.ReqnrollPlugin/AutofacPlugin.cs @@ -179,5 +179,12 @@ private void RegisterReqnrollDependencies( var scenarioContext = reqnrollContainer.Resolve(); return scenarioContext; }).As(); + containerBuilder.Register( + ctx => + { + var reqnrollContainer = ctx.Resolve(); + var scenarioContext = reqnrollContainer.TestThreadContainer.Resolve(); + return scenarioContext; + }).As(); } } \ No newline at end of file diff --git a/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs b/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs index b82ad7fab..95bbd5c84 100644 --- a/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs +++ b/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs @@ -11,8 +11,10 @@ using Reqnroll.Autofac.ReqnrollPlugin; using Reqnroll.BoDi; using Reqnroll.Configuration; +using Reqnroll.Events; using Reqnroll.Infrastructure; using Reqnroll.Plugins; +using Reqnroll.Tracing; using Reqnroll.UnitTestProvider; using Xunit; @@ -106,7 +108,7 @@ public static void SetupScenarioContainer(global::Autofac.ContainerBuilder conta } } -private readonly RuntimePluginEvents _runtimePluginEvents; + private readonly RuntimePluginEvents _runtimePluginEvents; private readonly ObjectContainer _testRunContainer; private readonly ObjectContainer _testThreadContainer; private readonly ObjectContainer _featureContainer; @@ -304,4 +306,49 @@ public void Should_allow_using_existing_global_scope() var globalDep1 = resolver.ResolveBindingInstance(typeof(IGlobalDependency1), scenarioContainer); globalDep1.Should().NotBeNull(); } + + [Fact] + public void Should_register_IReqnrollOutputHelper() + { + // Arrange + var sut = new TestableAutofacPlugin(typeof(ContainerSetup1), + nameof(ContainerSetup1.SetupGlobalContainer), + nameof(ContainerSetup1.SetupScenarioContainer)); + + // Act + var scenarioContainer = InitializeToScenarioContainer(sut); + + var resolver = _testRunContainer.Resolve(); + + var testThreadContext = + new TestThreadContext(_testThreadContainer); + + _testThreadContainer.RegisterInstanceAs(testThreadContext); + + var traceListenerMock = + new Mock(); + var attachmentHandlerMock = + new Mock(); + var threadExecutionMock = + new Mock(); + + var defaultDenpendencyProvider = new DefaultDependencyProvider(); + defaultDenpendencyProvider + .RegisterTestThreadContainerDefaults(_testThreadContainer); + + _testThreadContainer + .RegisterInstanceAs(traceListenerMock.Object); + _testThreadContainer + .RegisterInstanceAs(attachmentHandlerMock.Object); + _testThreadContainer + .RegisterInstanceAs(threadExecutionMock.Object); + + // Assert + var resolvedOutputHelper = resolver + .ResolveBindingInstance(typeof(IReqnrollOutputHelper), scenarioContainer); + + resolvedOutputHelper + .Should() + .NotBeNull(); + } }