Dashboard und Schnellnavigation fix
This commit is contained in:
@@ -59,12 +59,12 @@ public sealed class DashboardViewModelTests
|
||||
DashboardSettingsService? dashboardSettings = null, FakeSchoolHolidays? schoolHolidays = null,
|
||||
FakeLessons? lessons = null, FakeSubstitutionEntries? substitutions = null,
|
||||
FakeSessions? sessions = null, FakeEntries? entries = null,
|
||||
FakeAnnualPlanEvents? annualPlanEvents = null)
|
||||
FakeAnnualPlanEvents? annualPlanEvents = null, List<LearningGroup>? allGroups = null)
|
||||
{
|
||||
lessons ??= new FakeLessons();
|
||||
lessons.Add(lesson);
|
||||
return new DashboardViewModel(
|
||||
new FakeGroups([group]), new FakeSubjects([]), lessons,
|
||||
new FakeGroups(allGroups ?? [group]), new FakeSubjects([]), lessons,
|
||||
exams ?? new FakeExams([]), results ?? new FakeResults(), grades ?? new FakeGrades(),
|
||||
reportGrades ?? new FakeReportGrades(), memberships ?? new FakeMemberships([]),
|
||||
tasks ?? new FakeWorkTasks(), sessions ?? new FakeSessions([]), entries ?? new FakeEntries(),
|
||||
@@ -242,6 +242,26 @@ public sealed class DashboardViewModelTests
|
||||
Assert.Contains(vm.SelectedDayEvents, e => e.Kind == CalendarEventKind.Exam && e.Title == "Test");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Kalenderauswahl_SortiertKurseDesTagesVorDenAlphabetischenRest()
|
||||
{
|
||||
var today = DateOnly.FromDateTime(DateTime.Today);
|
||||
var selectedDate = today.AddDays(1);
|
||||
var alphabeticallyFirst = new LearningGroup { Name = "10a" };
|
||||
var selectedDayGroup = new LearningGroup { Name = "WAT 10c" };
|
||||
var lessons = new FakeLessons();
|
||||
lessons.Add(new Lesson { GroupId = selectedDayGroup.Id, Date = selectedDate });
|
||||
var vm = BuildVm(alphabeticallyFirst,
|
||||
new Lesson { GroupId = alphabeticallyFirst.Id, Date = today }, lessons: lessons,
|
||||
allGroups: [alphabeticallyFirst, selectedDayGroup]);
|
||||
|
||||
vm.SelectCalendarDayCommand.Execute(vm.CalendarDays.Single(d => d.Date == selectedDate));
|
||||
|
||||
Assert.Equal(selectedDayGroup.Id, vm.CurrentGroups[0].GroupId);
|
||||
Assert.True(vm.CurrentGroups[0].IsOnSelectedDay);
|
||||
Assert.Equal(alphabeticallyFirst.Id, vm.CurrentGroups[1].GroupId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Kalender_ZeigtMitarbeitssitzungenAlsEigenenTermintyp()
|
||||
{
|
||||
|
||||
@@ -247,6 +247,25 @@ public sealed class DocumentationDialogViewModelTests
|
||||
Assert.Equal(groupId, vm.Result.GroupId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GesamteLerngruppe_SaveSpeichertOhneSchuelerbezug()
|
||||
{
|
||||
var groupId = Guid.NewGuid();
|
||||
var wholeGroup = new StudentOption(Guid.Empty, "Gesamte Lerngruppe");
|
||||
var vm = new DocumentationDialogViewModel(Guid.Empty, null, new FakeAttachmentStorage(),
|
||||
[wholeGroup], groupId)
|
||||
{
|
||||
SelectedStudent = wholeGroup, Title = "Klausur planen", TypeName = "Planung / Erinnerung",
|
||||
};
|
||||
|
||||
vm.SaveCommand.Execute(null);
|
||||
|
||||
Assert.NotNull(vm.Result);
|
||||
Assert.Equal(Guid.Empty, vm.Result!.StudentId);
|
||||
Assert.Equal(groupId, vm.Result.GroupId);
|
||||
Assert.Equal(DocumentationType.Planning, vm.Result.Type);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MitStudentOptions_Bearbeiten_SchuelerIstVorausgewaehlt()
|
||||
{
|
||||
|
||||
@@ -14,7 +14,8 @@ public sealed class GlobalSearchViewModelTests
|
||||
Assert.Collection(vm.Results,
|
||||
item => Assert.Equal(GlobalSearchAction.NewTask, item.Action),
|
||||
item => Assert.Equal(GlobalSearchAction.NewReminder, item.Action),
|
||||
item => Assert.Equal(GlobalSearchAction.NewStudent, item.Action));
|
||||
item => Assert.Equal(GlobalSearchAction.NewStudent, item.Action),
|
||||
item => Assert.Equal(GlobalSearchAction.NewGroupDocumentation, item.Action));
|
||||
Assert.Same(vm.Results[0], vm.SelectedResult);
|
||||
}
|
||||
|
||||
@@ -67,8 +68,36 @@ public sealed class GlobalSearchViewModelTests
|
||||
Assert.True(reminder);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Suche_FindetAktiveGruppeUeberFachUndZeigtFachImUntertitel()
|
||||
{
|
||||
var subject = new Subject { Name = "Wirtschaft-Arbeit-Technik", ShortName = "WAT" };
|
||||
var group = new LearningGroup { Name = "10c", SubjectId = subject.Id, SchoolYear = "2026/27", GradeLevel = 10 };
|
||||
var vm = BuildVm(groups: [group], subjects: [subject]);
|
||||
|
||||
vm.Query = "wat";
|
||||
|
||||
var result = Assert.Single(vm.Results, x => x.Kind == GlobalSearchResultKind.Group);
|
||||
Assert.Contains("WAT", result.Subtitle);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Suche_UeberspringtArchivierteSchuelerUndGruppenSamtDerenKlausuren()
|
||||
{
|
||||
var archivedGroup = new LearningGroup { Name = "Testkurs Vorjahr", IsActive = false };
|
||||
var archivedStudent = new Student { FirstName = "Test", LastName = "Archiv", IsActive = false };
|
||||
var exam = new Exam { GroupId = archivedGroup.Id, Title = "Testklausur" };
|
||||
var vm = BuildVm([archivedStudent], [archivedGroup], [exam]);
|
||||
|
||||
vm.Query = "Test";
|
||||
|
||||
Assert.DoesNotContain(vm.Results, x => x.Kind is GlobalSearchResultKind.Student
|
||||
or GlobalSearchResultKind.Group or GlobalSearchResultKind.Exam);
|
||||
}
|
||||
|
||||
private static GlobalSearchViewModel BuildVm(List<Student>? students = null,
|
||||
List<LearningGroup>? groups = null, List<Exam>? exams = null, FakeWorkTasks? tasks = null) =>
|
||||
List<LearningGroup>? groups = null, List<Exam>? exams = null, FakeWorkTasks? tasks = null,
|
||||
List<Subject>? subjects = null) =>
|
||||
new(new FakeStudents(students ?? []), new FakeGroups(groups ?? []),
|
||||
new FakeExams(exams ?? []), tasks ?? new FakeWorkTasks());
|
||||
new FakeSubjects(subjects ?? []), new FakeExams(exams ?? []), tasks ?? new FakeWorkTasks());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
using LehrerApp.Core.Models;
|
||||
using LehrerApp.Desktop.ViewModels.Students;
|
||||
using Xunit;
|
||||
|
||||
namespace LehrerApp.Desktop.Tests;
|
||||
|
||||
public sealed class GroupDocumentationQuickViewModelTests
|
||||
{
|
||||
[Fact]
|
||||
public void Save_ErstelltPlanungFuerGesamteLerngruppe()
|
||||
{
|
||||
var group = new GroupDocumentationOption(Guid.NewGuid(), "10c · WAT");
|
||||
var vm = new GroupDocumentationQuickViewModel([group])
|
||||
{
|
||||
SelectedGroup = group, Title = "Klausur ankündigen", Content = "Termin abstimmen",
|
||||
};
|
||||
|
||||
vm.SaveCommand.Execute(null);
|
||||
|
||||
Assert.NotNull(vm.Result);
|
||||
Assert.Equal(Guid.Empty, vm.Result!.StudentId);
|
||||
Assert.Equal(group.Id, vm.Result.GroupId);
|
||||
Assert.Equal(DocumentationType.Planning, vm.Result.Type);
|
||||
Assert.True(vm.Result.ExcludeFromWebUntisSync);
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,25 @@ public sealed class GroupDocumentationTabViewModelTests
|
||||
Assert.Equal("Alt", vm.Entries[1].Model.Title);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Initialize_ZeigtGruppenweitenEintragAuchOhneSchueler()
|
||||
{
|
||||
var group = new LearningGroup { Name = "10c" };
|
||||
var docs = new FakeDocumentation();
|
||||
docs.Add(new Documentation
|
||||
{
|
||||
StudentId = Guid.Empty, GroupId = group.Id, Type = DocumentationType.Planning,
|
||||
Title = "Klausur planen", Date = new DateOnly(2026, 9, 1),
|
||||
});
|
||||
|
||||
var vm = BuildVm([], [group], docs);
|
||||
vm.Initialize(group.Id);
|
||||
|
||||
var entry = Assert.Single(vm.Entries);
|
||||
Assert.Equal("Gesamte Lerngruppe", entry.StudentName);
|
||||
Assert.Equal("Planung / Erinnerung", entry.TypeLabel);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Initialize_EintragAusAndererGruppe_WirdMitangezeigtAberAlsFremdMarkiert()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user