From b119303ac2e0b97cbd2a20070c87b316884f7714 Mon Sep 17 00:00:00 2001 From: "Antonio.Puche" Date: Thu, 19 Dec 2024 11:57:49 +0000 Subject: [PATCH 1/3] To add default registration for IReqnrollOutputHelper --- .../AutofacPlugin.cs | 7 ++++ .../Autofac/AutofacPluginTests.cs | 42 +++++++++++++++++++ 2 files changed, 49 insertions(+) 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..fd59b7ac2 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; @@ -304,4 +306,44 @@ 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 outputHelper = new ReqnrollOutputHelper( + threadExecutionMock.Object, + traceListenerMock.Object, + attachmentHandlerMock.Object); + + _testThreadContainer.RegisterInstanceAs(outputHelper); + + // Assert + + var resolvedOutputHelper = resolver + .ResolveBindingInstance(typeof(IReqnrollOutputHelper), scenarioContainer); + + outputHelper + .Should() + .BeSameAs(outputHelper); + } } From fd9bb683de23673d0c66bbb51fa64d75b3a15b79 Mon Sep 17 00:00:00 2001 From: "Antonio.Puche" Date: Thu, 19 Dec 2024 12:41:04 +0000 Subject: [PATCH 2/3] To update vNext section on the change --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From b05f052414e16a80e00c4dfcb8be508bd8ed0518 Mon Sep 17 00:00:00 2001 From: Antonio Puche Date: Mon, 6 Jan 2025 11:31:01 +0000 Subject: [PATCH 3/3] To address not covering production code during unit tests --- .../Autofac/AutofacPluginTests.cs | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs b/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs index fd59b7ac2..95bbd5c84 100644 --- a/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs +++ b/Tests/Reqnroll.PluginTests/Autofac/AutofacPluginTests.cs @@ -108,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; @@ -317,10 +317,12 @@ public void Should_register_IReqnrollOutputHelper() // Act var scenarioContainer = InitializeToScenarioContainer(sut); + var resolver = _testRunContainer.Resolve(); var testThreadContext = new TestThreadContext(_testThreadContainer); + _testThreadContainer.RegisterInstanceAs(testThreadContext); var traceListenerMock = @@ -330,20 +332,23 @@ public void Should_register_IReqnrollOutputHelper() var threadExecutionMock = new Mock(); - var outputHelper = new ReqnrollOutputHelper( - threadExecutionMock.Object, - traceListenerMock.Object, - attachmentHandlerMock.Object); + var defaultDenpendencyProvider = new DefaultDependencyProvider(); + defaultDenpendencyProvider + .RegisterTestThreadContainerDefaults(_testThreadContainer); - _testThreadContainer.RegisterInstanceAs(outputHelper); + _testThreadContainer + .RegisterInstanceAs(traceListenerMock.Object); + _testThreadContainer + .RegisterInstanceAs(attachmentHandlerMock.Object); + _testThreadContainer + .RegisterInstanceAs(threadExecutionMock.Object); // Assert - var resolvedOutputHelper = resolver .ResolveBindingInstance(typeof(IReqnrollOutputHelper), scenarioContainer); - outputHelper + resolvedOutputHelper .Should() - .BeSameAs(outputHelper); + .NotBeNull(); } }