diff --git a/src/api/SIGCM2.Application/DependencyInjection.cs b/src/api/SIGCM2.Application/DependencyInjection.cs index c0e29e9..171721a 100644 --- a/src/api/SIGCM2.Application/DependencyInjection.cs +++ b/src/api/SIGCM2.Application/DependencyInjection.cs @@ -67,6 +67,9 @@ public static class DependencyInjection { public static IServiceCollection AddApplication(this IServiceCollection services) { + // UDT-011: TimeProvider singleton — available to all handlers for Cat2 date computation + services.AddSingleton(TimeProvider.System); + // Command handlers services.AddScoped, LoginCommandHandler>(); services.AddScoped, RefreshCommandHandler>(); diff --git a/tests/SIGCM2.Application.Tests/Common/AddApplicationDependencyInjectionTests.cs b/tests/SIGCM2.Application.Tests/Common/AddApplicationDependencyInjectionTests.cs new file mode 100644 index 0000000..3a27cd5 --- /dev/null +++ b/tests/SIGCM2.Application.Tests/Common/AddApplicationDependencyInjectionTests.cs @@ -0,0 +1,30 @@ +using FluentAssertions; +using Microsoft.Extensions.DependencyInjection; +using SIGCM2.Application; + +namespace SIGCM2.Application.Tests.Common; + +/// +/// UDT-011 T300.20.2 — DI registration smoke tests for AddApplication. +/// Pure unit: no DB, no HTTP — just verifies the service container. +/// +public sealed class AddApplicationDependencyInjectionTests +{ + /// + /// [REQ-BE-CLOCK-004] TimeProvider.System must be registered as singleton + /// so all command handlers can inject it without a concrete coupling. + /// + [Fact] + public void AddApplication_Registers_TimeProvider_System() + { + var services = new ServiceCollection(); + // AddApplication requires some infrastructure; provide minimal stubs + // by only testing the DI graph without building the full host. + services.AddApplication(); + using var provider = services.BuildServiceProvider(); + + var timeProvider = provider.GetRequiredService(); + + timeProvider.Should().BeSameAs(TimeProvider.System); + } +}