diff --git a/src/HomeInventory/HomeInventory.Application.Framework/ApplicationMediatrSupportModule.cs b/src/HomeInventory/HomeInventory.Application.Framework/ApplicationMediatrSupportModule.cs index 28dc6280..a2f12aa1 100644 --- a/src/HomeInventory/HomeInventory.Application.Framework/ApplicationMediatrSupportModule.cs +++ b/src/HomeInventory/HomeInventory.Application.Framework/ApplicationMediatrSupportModule.cs @@ -22,6 +22,8 @@ public override async Task AddServicesAsync(IModuleServicesContext context, Canc serviceConfig.RegisterServicesFromAssemblyContaining(module.GetType()); } + context.Services.AddSingleton(serviceConfig); + ServiceRegistrar.AddMediatRClasses(context.Services, serviceConfig, cancellationToken); ServiceRegistrar.AddRequiredServices(context.Services, serviceConfig); } diff --git a/src/HomeInventory/HomeInventory.Tests/Application/ApplicationMediatrSupportModuleTests.cs b/src/HomeInventory/HomeInventory.Tests/Application/ApplicationMediatrSupportModuleTests.cs new file mode 100644 index 00000000..d3b3f5ca --- /dev/null +++ b/src/HomeInventory/HomeInventory.Tests/Application/ApplicationMediatrSupportModuleTests.cs @@ -0,0 +1,29 @@ +using System.Diagnostics.CodeAnalysis; +using HomeInventory.Application.Framework; +using HomeInventory.Modules.Interfaces; +using HomeInventory.Tests.Modules; +using MediatR; +using MediatR.NotificationPublishers; + +namespace HomeInventory.Tests.Application; + +[SuppressMessage("ReSharper", "UnusedType.Global")] +public sealed class ApplicationMediatrSupportModuleTests() : BaseModuleTest(static () => new()) +{ + private readonly SubjectBaseModuleWithMediatr _subject = new(); + + protected override IReadOnlyCollection GetModules() => [_subject]; + + protected override void EnsureRegistered(IServiceCollection services) + { + _subject.Configured.Should().BeTrue(); + services.Should() + .ContainSingleTransient() + .And.ContainSingleTransient() + .And.ContainSingleTransient() + .And.ContainSingleTransient() + .And.ContainSingleSingleton() + .Which.ImplementationInstance.Should().BeOfType() + .Which.NotificationPublisherType.Should().Be(); + } +} diff --git a/src/HomeInventory/HomeInventory.Tests/Application/SubjectBaseModuleWithMediatr.cs b/src/HomeInventory/HomeInventory.Tests/Application/SubjectBaseModuleWithMediatr.cs new file mode 100644 index 00000000..36eef220 --- /dev/null +++ b/src/HomeInventory/HomeInventory.Tests/Application/SubjectBaseModuleWithMediatr.cs @@ -0,0 +1,10 @@ +using HomeInventory.Application.Framework; + +namespace HomeInventory.Tests.Application; + +public sealed class SubjectBaseModuleWithMediatr : BaseModuleWithMediatr +{ + public bool Configured { get; private set; } + + public override void Configure(MediatRServiceConfiguration configuration) => Configured = true; +} diff --git a/src/HomeInventory/HomeInventory.Tests/Modules/BaseModuleTest.cs b/src/HomeInventory/HomeInventory.Tests/Modules/BaseModuleTest.cs index ca6c55c0..d3975523 100644 --- a/src/HomeInventory/HomeInventory.Tests/Modules/BaseModuleTest.cs +++ b/src/HomeInventory/HomeInventory.Tests/Modules/BaseModuleTest.cs @@ -18,7 +18,7 @@ public void ShouldRegisterServices() .Sut(out var sutVar); var then = When - .Invoked(sutVar, servicesVar, configurationVar, featureManagerVar, (sut, services, configuration, featureManager) => sut.AddServicesAsync(new ModuleServicesContext(services, configuration, featureManager, []))); + .Invoked(sutVar, servicesVar, configurationVar, featureManagerVar, (sut, services, configuration, featureManager) => sut.AddServicesAsync(new ModuleServicesContext(services, configuration, featureManager, GetModules()))); then .Ensure(servicesVar, services => @@ -29,6 +29,8 @@ public void ShouldRegisterServices() } protected abstract void EnsureRegistered(IServiceCollection services); + + protected virtual IReadOnlyCollection GetModules() => []; } public abstract class BaseModuleTest(Func createModuleFunc) : BaseModuleTest, TSut>(t => BaseModuleTestGivenContext.Create(t, createModuleFunc)) diff --git a/src/HomeInventory/HomeInventory.Tests/Modules/DomainModuleTests.cs b/src/HomeInventory/HomeInventory.Tests/Modules/DomainModuleTests.cs index efd9f77a..dcc4aa53 100644 --- a/src/HomeInventory/HomeInventory.Tests/Modules/DomainModuleTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Modules/DomainModuleTests.cs @@ -1,9 +1,11 @@ -using HomeInventory.Domain; +using System.Diagnostics.CodeAnalysis; +using HomeInventory.Domain; using HomeInventory.Domain.Primitives.Ids; using HomeInventory.Domain.ValueObjects; namespace HomeInventory.Tests.Modules; +[SuppressMessage("ReSharper", "UnusedType.Global")] public sealed class DomainModuleTests() : BaseModuleTest(static () => new()) { protected override void EnsureRegistered(IServiceCollection services) =>