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
""";
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);
}
[Fact]
public void MissingKnownFieldsProducesNoProfile()
{
Assert.Null(SguProfileParser.ParseMenu("Portal SGU"));
Assert.Null(SguProfileParser.ParseAdministrative(
"Portal SGU",
"017045"));
}
}