60 lines
2.3 KiB
C#
60 lines
2.3 KiB
C#
using System.Text;
|
|
using LehrerApp.Core.Importing;
|
|
using LehrerApp.Core.Models;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Tests;
|
|
|
|
public sealed class LessonStudentListCsvImportHandlerTests
|
|
{
|
|
[Fact]
|
|
public async Task Parse_UebernimmtTeilnehmerUndOptionaleKontaktdaten()
|
|
{
|
|
var handler = new LessonStudentListCsvImportHandler();
|
|
var result = await handler.ParseAsync(File(LessonList()));
|
|
|
|
Assert.True(result.IsValid);
|
|
var student = Assert.Single(result.Items);
|
|
Assert.Equal("Max", student.FirstName);
|
|
Assert.Equal("Beispiel", student.LastName);
|
|
Assert.Equal("10c", student.GroupName);
|
|
Assert.Equal(Gender.M, student.Gender);
|
|
Assert.Equal("max@example.invalid", student.Contact?.Email);
|
|
Assert.Equal("0151 123", student.Contact?.MobilePhone);
|
|
Assert.Equal("0123 456", student.Contact?.Phone);
|
|
Assert.Equal("Zeile 2", student.SourceReference);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Detect_UnterscheidetTeilnehmerlisteVonStammdatenliste()
|
|
{
|
|
var handler = new LessonStudentListCsvImportHandler();
|
|
|
|
var detection = await handler.DetectAsync(File(LessonList()));
|
|
|
|
Assert.True(detection.IsMatch);
|
|
Assert.Equal(100, detection.Confidence);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task MarksExport_WirdErkanntUndErklaertFehlendeTeilnehmerdaten()
|
|
{
|
|
var handler = new MarksPerLessonCsvImportHandler();
|
|
const string header = "Datum\tName\tKlasse\tFach\tPrüfungsart\tNote\tBemerkung\tBenutzer\tSchlüssel (extern)\tGesamtnote\n";
|
|
|
|
var detection = await handler.DetectAsync(File(header));
|
|
var result = await handler.ParseAsync(File(header));
|
|
|
|
Assert.True(detection.IsMatch);
|
|
Assert.False(result.IsValid);
|
|
Assert.Empty(result.Items);
|
|
Assert.Contains(result.Messages, message => message.Code == "marks-per-lesson.no-participants");
|
|
}
|
|
|
|
private static ImportFile File(string text) => new("export.csv", Encoding.UTF8.GetBytes(text));
|
|
|
|
private static string LessonList() => string.Join('\n',
|
|
"Langname\tVorname\tKlasse\tGeschlecht\tEintrittsdatum\tAustrittsdatum\tE-Mail Adresse\tMobiltelefon\tTelefonnummer",
|
|
"Beispiel\tMax\t10c\tm\t01.08.2025\t\tmax@example.invalid\t0151 123\t0123 456") + "\n";
|
|
}
|