104 lines
4.3 KiB
C#
104 lines
4.3 KiB
C#
using LehrerApp.Core.Models;
|
|
using LehrerApp.Desktop.ViewModels;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Desktop.Tests;
|
|
|
|
public sealed class GlobalSearchViewModelTests
|
|
{
|
|
[Fact]
|
|
public void LeereSuche_ZeigtSchnellaktionen()
|
|
{
|
|
var vm = BuildVm();
|
|
|
|
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.NewGroupDocumentation, item.Action));
|
|
Assert.Same(vm.Results[0], vm.SelectedResult);
|
|
}
|
|
|
|
[Fact]
|
|
public void Suche_FindetSchuelerGruppeKlausurUndAufgabe()
|
|
{
|
|
var group = new LearningGroup { Name = "9 Chemie", SchoolYear = "2026/27", GradeLevel = 9 };
|
|
var student = new Student { FirstName = "Mia", LastName = "Chemie" };
|
|
var exam = new Exam { GroupId = group.Id, Title = "Chemie-Test", Date = new DateOnly(2026, 9, 1) };
|
|
var tasks = new FakeWorkTasks();
|
|
tasks.Add(new WorkTask { GroupId = group.Id, Title = "Chemie-Klausur korrigieren" });
|
|
var vm = BuildVm([student], [group], [exam], tasks);
|
|
|
|
vm.Query = "Chemie";
|
|
|
|
Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Student && x.EntityId == student.Id);
|
|
Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Group && x.EntityId == group.Id);
|
|
Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Exam && x.EntityId == exam.Id);
|
|
Assert.Contains(vm.Results, x => x.Kind == GlobalSearchResultKind.Task && x.Title.Contains("korrigieren"));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task TrefferAusfuehren_NavigiertUndSchliesstPalette()
|
|
{
|
|
var student = new Student { FirstName = "Mia", LastName = "Muster" };
|
|
var vm = BuildVm([student]);
|
|
vm.Query = "Muster";
|
|
var result = Assert.Single(vm.Results, x => x.Kind == GlobalSearchResultKind.Student);
|
|
GlobalSearchResult? navigated = null;
|
|
var closed = false;
|
|
vm.OnNavigate = x => navigated = x;
|
|
vm.OnClose = () => closed = true;
|
|
|
|
await vm.ExecuteCommand.ExecuteAsync(result);
|
|
|
|
Assert.Same(result, navigated);
|
|
Assert.True(closed);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ErinnerungSchnellErfassen_StartetDialogAlsErinnerung()
|
|
{
|
|
var vm = BuildVm();
|
|
bool? reminder = null;
|
|
vm.OnQuickAddTask = value => { reminder = value; return Task.CompletedTask; };
|
|
var action = vm.Results.Single(x => x.Action == GlobalSearchAction.NewReminder);
|
|
|
|
await vm.ExecuteCommand.ExecuteAsync(action);
|
|
|
|
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<Subject>? subjects = null) =>
|
|
new(new FakeStudents(students ?? []), new FakeGroups(groups ?? []),
|
|
new FakeSubjects(subjects ?? []), new FakeExams(exams ?? []), tasks ?? new FakeWorkTasks());
|
|
}
|