using LehrerApp.Desktop.ViewModels.ClassTeacher; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class UntisNameMatchingTests { [Theory] [InlineData("Ben Schmidt", "Schmidt Ben")] [InlineData("Ada Müller", "MÜLLER ADA")] [InlineData("Max Mustermann", "mustermann max")] public void NamesMatch_IstReihenfolgeUndGrossKleinschreibungUnabhaengig(string a, string b) => Assert.True(UntisNameMatching.NamesMatch(a, b)); [Theory] [InlineData("Ben Schmidt", "Ben Müller")] [InlineData(null, "Ben Schmidt")] [InlineData("Ben Schmidt", "")] public void NamesMatch_LehntUnterschiedlicheOderFehlendeNamenAb(string? a, string b) => Assert.False(UntisNameMatching.NamesMatch(a, b)); // Regression: Student.FullName liefert "Nachname, Vorname" (mit Komma) für Anzeigezwecke. // Wird dieser String direkt an NamesMatch übergeben, bleibt das Komma am Wort kleben // ("gerste," != "gerste") und der Abgleich gegen WebUntis-Namen (immer ohne Komma) schlägt // fehl - genau das ließ den Anwesenheitskalender/die Fehlzeitenliste im Elternbrief leer // bleiben, obwohl echte Fehlzeiten vorlagen. Aufrufer müssen deshalb "Vorname Nachname" ohne // Komma bilden (siehe StudentAttendanceCalendarDrawingBuilder.StudentAttendanceCalendarService // und ClassTeacherOverviewViewModel.cs:1173), statt Student.FullName direkt zu verwenden. [Fact] public void NamesMatch_KommaGetrennterAnzeigename_PasstNichtOhneUmformung() { Assert.False(UntisNameMatching.NamesMatch("Gerste, Amelia", "Gerste Amelia")); Assert.True(UntisNameMatching.NamesMatch("Amelia Gerste", "Gerste Amelia")); } }