using MaBibli.Api.Services.Identite; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; namespace MaBibli.Tests; /// /// Lecture de l'identité dans les en-têtes SSOwat, et repli sur l'utilisateur simulé /// en développement. /// public class FournisseurUtilisateurTests { private static FournisseurUtilisateurSsowat Construire( IDictionary? entetes = null, OptionsIdentite? options = null) { var contexte = new DefaultHttpContext(); foreach (var (nom, valeur) in entetes ?? new Dictionary()) { contexte.Request.Headers[nom] = valeur; } var accesseur = new HttpContextAccessor { HttpContext = contexte }; return new FournisseurUtilisateurSsowat(accesseur, Options.Create(options ?? new OptionsIdentite())); } [Fact] public void Les_entetes_ssowat_sont_lus() { var fournisseur = Construire(new Dictionary { ["YNH_USER"] = "mathieu", ["YNH_USER_EMAIL"] = "mathieu@example.org", ["YNH_USER_FULLNAME"] = "Mathieu L.", }); var utilisateur = fournisseur.Obtenir(); Assert.Equal("mathieu", utilisateur.Identifiant); Assert.Equal("mathieu@example.org", utilisateur.Email); Assert.Equal("Mathieu L.", utilisateur.NomComplet); Assert.False(utilisateur.Simule); Assert.Equal("Mathieu L.", utilisateur.Affichage); } [Fact] public void Lentete_utilisateur_seul_suffit() { var utilisateur = Construire(new Dictionary { ["YNH_USER"] = "camille" }).Obtenir(); Assert.Equal("camille", utilisateur.Identifiant); Assert.Null(utilisateur.Email); Assert.Equal("camille", utilisateur.Affichage); } [Fact] public void Lentete_ssowat_prime_sur_lutilisateur_simule() { // Sur le serveur, une configuration de dev oubliée ne doit jamais masquer l'identité réelle. var fournisseur = Construire( new Dictionary { ["YNH_USER"] = "camille" }, new OptionsIdentite { UtilisateurSimule = "dev" }); var utilisateur = fournisseur.Obtenir(); Assert.Equal("camille", utilisateur.Identifiant); Assert.False(utilisateur.Simule); } [Fact] public void Sans_entete_lutilisateur_simule_prend_le_relais() { var fournisseur = Construire(options: new OptionsIdentite { UtilisateurSimule = "dev", EmailSimule = "dev@localhost", NomCompletSimule = "Utilisateur de développement", }); var utilisateur = fournisseur.Obtenir(); Assert.Equal("dev", utilisateur.Identifiant); Assert.Equal("Utilisateur de développement", utilisateur.NomComplet); Assert.True(utilisateur.Simule); } [Fact] public void Sans_entete_ni_simulation_lidentite_reste_inconnue() { // On n'invente pas d'identité : mieux vaut un livre sans traçabilité qu'un faux nom. var utilisateur = Construire().Obtenir(); Assert.Null(utilisateur.Identifiant); Assert.False(utilisateur.Simule); Assert.Equal("inconnu", utilisateur.Affichage); } [Fact] public void Un_entete_vide_est_traite_comme_absent() { var fournisseur = Construire( new Dictionary { ["YNH_USER"] = " " }, new OptionsIdentite { UtilisateurSimule = "dev" }); var utilisateur = fournisseur.Obtenir(); Assert.Equal("dev", utilisateur.Identifiant); Assert.True(utilisateur.Simule); } }