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();
}
}