using SGU.AuthBroker.Core.Profiles; using Xunit; namespace SGU.AuthBroker.Core.Tests; public sealed class SguProfileParserTests { [Fact] public void ParsesOnlyTheRequiredAdministrativeFieldsFromTheInitialResponse() { const string html = """ 017045 - JESÚS ALEJANDRO ROSALES GONZÁLEZ SINDICALIZADO QUINCENAL (ACTIVO) persona@lasalle.mx
ANALISTA DE PROYECTOS FACULTAD DE INGENIERÍA ESTE CAMPO NO DEBE EXTRAERSE
DATOS NO REQUERIDOS
"""; InstitutionalProfile? profile = SguProfileParser.ParseAdministrative(html, "017045"); Assert.NotNull(profile); Assert.Equal("017045", profile.EmployeeNumber); Assert.Equal("Jesús Alejandro Rosales González", profile.DisplayName); Assert.Equal("persona@lasalle.mx", profile.Email); Assert.Equal("Sindicalizado quincenal (activo)", profile.EmployeeType); Assert.Equal("Analista de Proyectos", profile.JobTitle); Assert.Equal("Facultad de Ingeniería", profile.Department); } [Fact] public void RejectsAdministrativeMetadataForADifferentEmployeeNumber() { const string html = """ 017045 - PERSONA INCORRECTA incorrecta@lasalle.mx """; Assert.Null(SguProfileParser.ParseAdministrative(html, "999999")); } [Fact] public void ParsesTheMenuNameAsAConservativeFallback() { const string html = """ MARÍA & JOSÉ """; InstitutionalProfile? profile = SguProfileParser.ParseMenu(html); Assert.NotNull(profile); Assert.Equal("María & José", profile.DisplayName); Assert.Null(profile.Email); Assert.Null(profile.JobTitle); Assert.Null(profile.Department); } [Theory] [InlineData("MARÍA DEL CARMEN", "María del Carmen")] [InlineData("MIGUEL DE CERVANTES", "Miguel de Cervantes")] [InlineData("CARLOS DE LA FUENTE", "Carlos de la Fuente")] [InlineData("MARÍA-JOSÉ O'CONNOR", "María-José O'Connor")] public void PreservesSpanishNameParticlesAndAccents(string source, string expected) { const string marker = "ctl00_lblNombreUsuario"; InstitutionalProfile? profile = SguProfileParser.ParseMenu( $"{source}"); Assert.NotNull(profile); Assert.Equal(expected, profile.DisplayName); } [Fact] public void RejectsReplacementCharactersInsteadOfWritingCorruptMetadata() { const string html = """ 017045 - JES�S ROSALES ANALISTA DE INMERSI�N """; InstitutionalProfile? profile = SguProfileParser.ParseAdministrative(html, "017045"); Assert.NotNull(profile); Assert.Null(profile.DisplayName); Assert.Null(profile.JobTitle); Assert.Equal("017045", profile.EmployeeNumber); } [Fact] public void MissingKnownFieldsProducesNoProfile() { Assert.Null(SguProfileParser.ParseMenu("Portal SGU")); Assert.Null(SguProfileParser.ParseAdministrative( "Portal SGU", "017045")); } }