Neue Aufgabenart über bestehende Felder (WorkTask.Kind=Reminder + GroupId) statt Vererbung, mit Priorität (TaskPriority) und optionaler Abhak-Liste (ChecklistItems, wahlweise Kurs- Roster oder Freitext). Kurs-Dashboard zeigt jetzt eine "Anstehende Aufgaben"-Karte samt direktem Anlege-Button; derselbe Anlege-Einstieg wurde auch ins Hauptdashboard und (als Schnellüberblick samt fehlender Übersicht/Mitarbeit-Buttons) in die Gruppenliste gezogen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
81 lines
3.3 KiB
C#
81 lines
3.3 KiB
C#
using LehrerApp.Core.Models;
|
|
using LehrerApp.Core.Services;
|
|
using LehrerApp.Desktop.ViewModels.Groups;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Desktop.Tests;
|
|
|
|
/// Tests für den Schnellüberblick im Auswahl-Panel der Gruppenliste (Nutzer-Feedback:
|
|
/// "oberhalb der Buttonliste ein paar Daten auswerfen. Nächste Stunde, nächste Arbeit,
|
|
/// wichtige Todos").
|
|
public sealed class GroupListViewModelTests
|
|
{
|
|
private static GroupListViewModel BuildVm(LearningGroup group, FakeLessons? lessons = null,
|
|
FakeExams? exams = null, FakeWorkTasks? tasks = null) =>
|
|
new(new FakeGroups([group]), new FakeSubjects([]), new SchoolYearService(),
|
|
lessons ?? new FakeLessons(), exams ?? new FakeExams([]), tasks ?? new FakeWorkTasks());
|
|
|
|
[Fact]
|
|
public void SelectedGroup_OhneDatenZeigtKeinenSchnellueberblick()
|
|
{
|
|
var group = new LearningGroup { Name = "9c" };
|
|
var vm = BuildVm(group);
|
|
|
|
vm.SelectedGroup = vm.Groups.Count > 0 ? vm.Groups[0] : new GroupListItem(group, "");
|
|
|
|
Assert.False(vm.QuickHasAnything);
|
|
}
|
|
|
|
[Fact]
|
|
public void SelectedGroup_ZeigtNaechsteGeplanteStundeUndKlausur()
|
|
{
|
|
var group = new LearningGroup { Name = "9c" };
|
|
var today = DateOnly.FromDateTime(DateTime.Today);
|
|
var lessons = new FakeLessons();
|
|
lessons.Add(new Lesson { GroupId = group.Id, Date = today.AddDays(3), Topic = "Redox", Status = LessonStatus.Planned });
|
|
var exams = new FakeExams([new Exam { GroupId = group.Id, Date = today.AddDays(10), Title = "Klausur 1" }]);
|
|
var vm = BuildVm(group, lessons: lessons, exams: exams);
|
|
|
|
vm.SelectedGroup = new GroupListItem(group, "");
|
|
|
|
Assert.True(vm.QuickHasNextLesson);
|
|
Assert.Contains("Redox", vm.QuickNextLessonLabel);
|
|
Assert.True(vm.QuickHasNextExam);
|
|
Assert.Contains("Klausur 1", vm.QuickNextExamLabel);
|
|
Assert.True(vm.QuickHasAnything);
|
|
}
|
|
|
|
[Fact]
|
|
public void SelectedGroup_ZeigtOffeneAufgabenDieserGruppeSortiertNachFaelligkeit()
|
|
{
|
|
var group = new LearningGroup { Name = "9c" };
|
|
var today = DateOnly.FromDateTime(DateTime.Today);
|
|
var tasks = new FakeWorkTasks();
|
|
tasks.Add(new WorkTask { GroupId = group.Id, Title = "Bald fällig", DueDate = today.AddDays(1), Status = WorkTaskStatus.Open });
|
|
tasks.Add(new WorkTask { GroupId = group.Id, Title = "Erledigt", DueDate = today, Status = WorkTaskStatus.Done });
|
|
tasks.Add(new WorkTask { GroupId = Guid.NewGuid(), Title = "Andere Gruppe", DueDate = today, Status = WorkTaskStatus.Open });
|
|
var vm = BuildVm(group, tasks: tasks);
|
|
|
|
vm.SelectedGroup = new GroupListItem(group, "");
|
|
|
|
Assert.True(vm.QuickHasTasks);
|
|
Assert.Equal("Bald fällig", Assert.Single(vm.QuickTasks).Title);
|
|
}
|
|
|
|
[Fact]
|
|
public void SelectedGroup_Zuruecksetzen_LeertSchnellueberblick()
|
|
{
|
|
var group = new LearningGroup { Name = "9c" };
|
|
var today = DateOnly.FromDateTime(DateTime.Today);
|
|
var exams = new FakeExams([new Exam { GroupId = group.Id, Date = today.AddDays(10), Title = "Klausur 1" }]);
|
|
var vm = BuildVm(group, exams: exams);
|
|
vm.SelectedGroup = new GroupListItem(group, "");
|
|
Assert.True(vm.QuickHasAnything);
|
|
|
|
vm.SelectedGroup = null;
|
|
|
|
Assert.False(vm.QuickHasAnything);
|
|
Assert.Empty(vm.QuickTasks);
|
|
}
|
|
}
|