using FluentAssertions; using Microsoft.Extensions.Configuration; using SchotzIadKmTracker.Api.Configuration; namespace SchotzIadKmTracker.Tests.Auth; /// /// Tests d'exemple vérifiant la liaison des options d'authentification depuis une configuration /// in-memory, ainsi que les valeurs par défaut attendues (feature authentification, tâche 2.2). /// public class OptionsBindingTests { private static IConfiguration ConstruireConfiguration(IEnumerable> valeurs) => new ConfigurationBuilder() .AddInMemoryCollection(valeurs) .Build(); // Validates: Requirements 5.5 [Fact] public void JwtOptions_se_lie_depuis_la_configuration_et_applique_les_defauts() { // Seul SecretKey est fourni : Issuer/Audience/ExpirationMinutes doivent prendre leurs défauts. var config = ConstruireConfiguration(new Dictionary { ["Jwt:SecretKey"] = "clef-secrete-de-test-suffisamment-longue-0123456789" }); var options = new JwtOptions(); config.GetSection(JwtOptions.SectionName).Bind(options); options.SecretKey.Should().Be("clef-secrete-de-test-suffisamment-longue-0123456789"); options.Issuer.Should().Be("SchotzIadKmTracker"); options.Audience.Should().Be("SchotzIadKmTracker"); options.ExpirationMinutes.Should().Be(720); } [Fact] public void JwtOptions_prend_les_valeurs_fournies_par_la_configuration() { var config = ConstruireConfiguration(new Dictionary { ["Jwt:SecretKey"] = "une-autre-clef-de-test-tres-longue-abcdefghijklmnop", ["Jwt:Issuer"] = "MonIssuer", ["Jwt:Audience"] = "MonAudience", ["Jwt:ExpirationMinutes"] = "60" }); var options = new JwtOptions(); config.GetSection(JwtOptions.SectionName).Bind(options); options.Issuer.Should().Be("MonIssuer"); options.Audience.Should().Be("MonAudience"); options.ExpirationMinutes.Should().Be(60); } // Validates: Requirements 6.3 [Fact] public void AuthOptions_se_lie_depuis_la_configuration_et_applique_les_defauts() { // Configuration vide : les défauts doivent s'appliquer. var config = ConstruireConfiguration(new Dictionary()); var options = new AuthOptions(); config.GetSection(AuthOptions.SectionName).Bind(options); options.ResetTokenLifetimeMinutes.Should().Be(60); options.FrontendBaseUrl.Should().Be("http://localhost:8080"); } // Validates: Requirements 6.7 [Fact] public void SmtpOptions_se_lie_depuis_la_configuration_et_applique_les_defauts() { var config = ConstruireConfiguration(new Dictionary()); var options = new SmtpOptions(); config.GetSection(SmtpOptions.SectionName).Bind(options); options.Host.Should().BeEmpty(); options.Port.Should().Be(587); options.User.Should().BeEmpty(); options.Password.Should().BeEmpty(); options.From.Should().BeEmpty(); } }