From b314c0dc2a9e5f3c715cdae34ad1df39c42f5124 Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Tue, 2 Dec 2025 15:25:30 -0800 Subject: [PATCH] Fixup singleton tests --- test/Common/AutoFixture/SutProvider.cs | 14 +++ test/Core.Test/Services/PlayIdServiceTests.cs | 113 +++++++----------- 2 files changed, 59 insertions(+), 68 deletions(-) diff --git a/test/Common/AutoFixture/SutProvider.cs b/test/Common/AutoFixture/SutProvider.cs index e1b37a9827..295f6bc950 100644 --- a/test/Common/AutoFixture/SutProvider.cs +++ b/test/Common/AutoFixture/SutProvider.cs @@ -26,6 +26,7 @@ public class SutProvider : ISutProvider public TSut Sut { get; private set; } public Type SutType => typeof(TSut); + public IFixture Fixture => _fixture; public SutProvider() : this(new Fixture()) { } @@ -65,6 +66,19 @@ public class SutProvider : ISutProvider return this; } + /// + /// Creates and registers a dependency to be injected when the sut is created. + /// + /// The Dependency type to create + /// The (optional) parameter name to register the dependency under + /// The created dependency value + public TDep CreateDependency(string parameterName = "") + { + var dependency = _fixture.Create(); + SetDependency(dependency, parameterName); + return dependency; + } + /// /// Gets a dependency of the sut. Can only be called after the dependency has been set, either explicitly with /// or automatically with . diff --git a/test/Core.Test/Services/PlayIdServiceTests.cs b/test/Core.Test/Services/PlayIdServiceTests.cs index b3ce843435..7e4977c7bb 100644 --- a/test/Core.Test/Services/PlayIdServiceTests.cs +++ b/test/Core.Test/Services/PlayIdServiceTests.cs @@ -39,7 +39,7 @@ public class PlayIdServiceTests var result = sutProvider.Sut.InPlay(out var resultPlayId); Assert.False(result); - Assert.Empty(resultPlayId); + Assert.Equal(playId, resultPlayId); } [Theory] @@ -101,8 +101,35 @@ public class NeverPlayIdServicesTests [SutProviderCustomize] public class PlayIdSingletonServiceTests { + public static IEnumerable SutProvider() + { + var sutProvider = new SutProvider(); + var httpContext = sutProvider.CreateDependency(); + var serviceProvider = sutProvider.CreateDependency(); + var hostEnvironment = sutProvider.CreateDependency(); + var playIdService = new PlayIdService(hostEnvironment); + sutProvider.SetDependency(playIdService); + httpContext.RequestServices.Returns(serviceProvider); + serviceProvider.GetService().Returns(playIdService); + serviceProvider.GetRequiredService().Returns(playIdService); + sutProvider.CreateDependency().HttpContext.Returns(httpContext); + sutProvider.Create(); + return [[sutProvider]]; + } + + private void PrepHttpContext( + SutProvider sutProvider) + { + var httpContext = sutProvider.CreateDependency(); + var serviceProvider = sutProvider.CreateDependency(); + var PlayIdService = sutProvider.CreateDependency(); + httpContext.RequestServices.Returns(serviceProvider); + serviceProvider.GetRequiredService().Returns(PlayIdService); + sutProvider.GetDependency().HttpContext.Returns(httpContext); + } + [Theory] - [BitAutoData] + [BitMemberAutoData(nameof(SutProvider))] public void InPlay_WhenNoHttpContext_ReturnsFalse( SutProvider sutProvider) { @@ -116,25 +143,13 @@ public class PlayIdSingletonServiceTests } [Theory] - [BitAutoData] + [BitMemberAutoData(nameof(SutProvider))] public void InPlay_WhenNotDevelopment_ReturnsFalse( - string playIdValue, - SutProvider sutProvider) + SutProvider sutProvider, + string playIdValue) { - var httpContext = Substitute.For(); - var serviceProvider = Substitute.For(); - var scopedPlayIdService = Substitute.For(Substitute.For()); + var scopedPlayIdService = sutProvider.GetDependency(); scopedPlayIdService.PlayId = playIdValue; - scopedPlayIdService.InPlay(out Arg.Any()).Returns(x => - { - x[0] = playIdValue; - return true; - }); - - httpContext.RequestServices.Returns(serviceProvider); - serviceProvider.GetRequiredService().Returns(scopedPlayIdService); - - sutProvider.GetDependency().HttpContext.Returns(httpContext); sutProvider.GetDependency().EnvironmentName.Returns(Environments.Production); var result = sutProvider.Sut.InPlay(out var playId); @@ -144,21 +159,12 @@ public class PlayIdSingletonServiceTests } [Theory] - [BitAutoData] + [BitMemberAutoData(nameof(SutProvider))] public void InPlay_WhenDevelopmentAndHttpContextWithPlayId_ReturnsTrue( - string playIdValue, - SutProvider sutProvider) + SutProvider sutProvider, + string playIdValue) { - var httpContext = Substitute.For(); - var serviceProvider = Substitute.For(); - var hostEnvironment = Substitute.For(); - hostEnvironment.EnvironmentName.Returns(Environments.Development); - var scopedPlayIdService = new PlayIdService(hostEnvironment) { PlayId = playIdValue }; - - httpContext.RequestServices.Returns(serviceProvider); - serviceProvider.GetRequiredService().Returns(scopedPlayIdService); - - sutProvider.GetDependency().HttpContext.Returns(httpContext); + sutProvider.GetDependency().PlayId = playIdValue; sutProvider.GetDependency().EnvironmentName.Returns(Environments.Development); var result = sutProvider.Sut.InPlay(out var playId); @@ -168,41 +174,12 @@ public class PlayIdSingletonServiceTests } [Theory] - [BitAutoData] - public void PlayId_GetterRetrievesFromScopedService( - string playIdValue, - SutProvider sutProvider) - { - var httpContext = Substitute.For(); - var serviceProvider = Substitute.For(); - var hostEnvironment = Substitute.For(); - var scopedPlayIdService = new PlayIdService(hostEnvironment) { PlayId = playIdValue }; - - httpContext.RequestServices.Returns(serviceProvider); - serviceProvider.GetRequiredService().Returns(scopedPlayIdService); - - sutProvider.GetDependency().HttpContext.Returns(httpContext); - - var result = sutProvider.Sut.PlayId; - - Assert.Equal(playIdValue, result); - } - - [Theory] - [BitAutoData] + [BitMemberAutoData(nameof(SutProvider))] public void PlayId_SetterSetsOnScopedService( - string playIdValue, - SutProvider sutProvider) + SutProvider sutProvider, + string playIdValue) { - var httpContext = Substitute.For(); - var serviceProvider = Substitute.For(); - var hostEnvironment = Substitute.For(); - var scopedPlayIdService = new PlayIdService(hostEnvironment); - - httpContext.RequestServices.Returns(serviceProvider); - serviceProvider.GetRequiredService().Returns(scopedPlayIdService); - - sutProvider.GetDependency().HttpContext.Returns(httpContext); + var scopedPlayIdService = sutProvider.GetDependency(); sutProvider.Sut.PlayId = playIdValue; @@ -210,7 +187,7 @@ public class PlayIdSingletonServiceTests } [Theory] - [BitAutoData] + [BitMemberAutoData(nameof(SutProvider))] public void PlayId_WhenNoHttpContext_GetterReturnsNull( SutProvider sutProvider) { @@ -222,10 +199,10 @@ public class PlayIdSingletonServiceTests } [Theory] - [BitAutoData] + [BitMemberAutoData(nameof(SutProvider))] public void PlayId_WhenNoHttpContext_SetterDoesNotThrow( - string playIdValue, - SutProvider sutProvider) + SutProvider sutProvider, + string playIdValue) { sutProvider.GetDependency().HttpContext.Returns((HttpContext?)null);