using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using SchotzIadKmTracker.Api.Configuration; using SchotzIadKmTracker.Api.Services; using Xunit; namespace SchotzIadKmTracker.Tests.Auth; /// /// Vérifie la logique de sélection en DI de l'implémentation d', /// telle que décrite dans Program.cs : /// Smtp:Host vide => LoggingEmailService (repli journalisation, Exigence 6.5) /// Smtp:Host renseigné => SmtpEmailService (MailKit, Exigence 6.4) /// /// On reconstruit un minimal appliquant la même condition /// (string.IsNullOrWhiteSpace(smtpOptions.Host)) puis on résout le service pour /// confirmer le type concret retenu, sans démarrer l'hôte complet (évite l'accès à la base réelle). /// public class AuthServiceEmailSelectionTests { private static IEmailService ResoudreEmailService(string host) { var smtpOptions = new SmtpOptions { Host = host }; var services = new ServiceCollection(); services.AddLogging(); services.Configure(o => o.Host = host); // Réplique exacte de la condition de Program.cs (section « Sélection de l'implémentation Email »). if (string.IsNullOrWhiteSpace(smtpOptions.Host)) services.AddScoped(); else services.AddScoped(); var provider = services.BuildServiceProvider(); return provider.GetRequiredService(); } // Feature: authentification, sélection DI email (5.3) : Host vide => LoggingEmailService. // Validates: Requirements 6.5 [Theory] [InlineData("")] [InlineData(" ")] public void Host_vide_selectionne_LoggingEmailService(string host) { var service = ResoudreEmailService(host); service.Should().BeOfType(); } // Feature: authentification, sélection DI email (5.3) : Host renseigné => SmtpEmailService. // Validates: Requirements 6.4 [Fact] public void Host_renseigne_selectionne_SmtpEmailService() { var service = ResoudreEmailService("smtp.example.com"); service.Should().BeOfType(); } }