Klassenbucheinträge abgleich und poll
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
using Xunit;
|
||||
using LehrerApp.WebUntis;
|
||||
|
||||
namespace LehrerApp.WebUntis.Tests;
|
||||
|
||||
public sealed class WebUntisClassRegisterEventReportParserTests
|
||||
{
|
||||
[Fact]
|
||||
public void Parse_UebernimmtAlleFelderUndZweistelligesJahr()
|
||||
{
|
||||
const string report = "\uFEFFKlasse\tDatum\tFach\tName\tBenutzer\tEintragskategorie\tKategoriegruppe\tText\r\n" +
|
||||
"10c\t24.08.26\tEng_G\tMuster Erika\ttownsend\tFehlende HA\tNegativ\tKeine Hausaufgaben gemacht.\r\n";
|
||||
|
||||
var entry = Assert.Single(WebUntisClassRegisterEventReportParser.Parse(report));
|
||||
|
||||
Assert.Equal("10c", entry.ClassName);
|
||||
Assert.Equal(20260824, entry.Date);
|
||||
Assert.Equal("Eng_G", entry.Subject);
|
||||
Assert.Equal("Muster Erika", entry.StudentName);
|
||||
Assert.Equal("townsend", entry.TeacherUsername);
|
||||
Assert.Equal("Fehlende HA", entry.CategoryName);
|
||||
Assert.Equal("Negativ", entry.CategoryGroup);
|
||||
Assert.Equal("Keine Hausaufgaben gemacht.", entry.Text);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Parse_UeberspringtLeereZeilen()
|
||||
{
|
||||
const string report = "Klasse\tDatum\tFach\tName\tBenutzer\tEintragskategorie\tKategoriegruppe\tText\r\n" +
|
||||
"6a\t24.08.26\tNAT\tMuster Max\thedtrich\tMitarb. über Erwart.\tPositiv\tGut.\r\n" +
|
||||
"\t\t\t\t\t\t\t\r\n";
|
||||
|
||||
var entry = Assert.Single(WebUntisClassRegisterEventReportParser.Parse(report));
|
||||
Assert.Equal("Muster Max", entry.StudentName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Parse_LehntUngueltigesDatumAb()
|
||||
{
|
||||
const string report = "Klasse\tDatum\tFach\tName\tBenutzer\tEintragskategorie\tKategoriegruppe\tText\r\n" +
|
||||
"6a\tkein-datum\tNAT\tMuster Max\thedtrich\tMitarb. über Erwart.\tPositiv\tGut.\r\n";
|
||||
|
||||
Assert.Throws<InvalidDataException>(() => WebUntisClassRegisterEventReportParser.Parse(report));
|
||||
}
|
||||
}
|
||||
@@ -209,6 +209,41 @@ public sealed class WebUntisClientTests
|
||||
await client.DisposeAsync();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetClassRegisterEventsReportAsync_BautDenBerichtsAbrufAufUndTypisiertDasErgebnis()
|
||||
{
|
||||
var csv = Encoding.UTF8.GetBytes(
|
||||
"Klasse\tDatum\tFach\tName\tBenutzer\tEintragskategorie\tKategoriegruppe\tText\r\n" +
|
||||
"6a\t24.08.26\tNAT\tMuster Max\thedtrich\tMitarb. über Erwart.\tPositiv\tArbeitet gut mit.\r\n");
|
||||
var handler = new QueueHandler(
|
||||
Json("{\"result\":{\"sessionId\":\"s\",\"personId\":89}}"),
|
||||
Json("{\"data\":{\"finished\":true,\"error\":false," +
|
||||
"\"reportParams\":\"get=rpt2.tmp&name=ClassregEventPerStudent&format=csv\"}}"),
|
||||
new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(csv) },
|
||||
Json("{\"result\":{}}"));
|
||||
var client = CreateClient(handler);
|
||||
|
||||
var report = await client.GetClassRegisterEventsReportAsync(20260824, 20260828, CancellationToken.None);
|
||||
|
||||
var entry = Assert.Single(report);
|
||||
Assert.Equal("6a", entry.ClassName);
|
||||
Assert.Equal(20260824, entry.Date);
|
||||
Assert.Equal("NAT", entry.Subject);
|
||||
Assert.Equal("Muster Max", entry.StudentName);
|
||||
Assert.Equal("hedtrich", entry.TeacherUsername);
|
||||
Assert.Equal("Mitarb. über Erwart.", entry.CategoryName);
|
||||
Assert.Equal("Positiv", entry.CategoryGroup);
|
||||
Assert.Equal("Arbeitet gut mit.", entry.Text);
|
||||
Assert.Contains("reports.do?name=ClassregEventPerStudent", handler.Requests[1].Uri);
|
||||
Assert.Contains("klasseOrStudentgroupId=-1", handler.Requests[1].Uri);
|
||||
Assert.Contains("studentId=-1", handler.Requests[1].Uri);
|
||||
Assert.Contains("rpt_sd=20260824", handler.Requests[1].Uri);
|
||||
Assert.Contains("rpt_ed=20260828", handler.Requests[1].Uri);
|
||||
Assert.EndsWith("reports.do?get=rpt2.tmp&name=ClassregEventPerStudent&format=csv", handler.Requests[2].Uri);
|
||||
|
||||
await client.DisposeAsync();
|
||||
}
|
||||
|
||||
private static WebUntisClient CreateClient(HttpMessageHandler handler) => new(
|
||||
new HttpClient(handler),
|
||||
new WebUntisOptions
|
||||
|
||||
Reference in New Issue
Block a user