using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Desktop.ViewModels.Planning; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class TimetableSlotDialogViewModelTests { private static SchoolYearService SchoolYear() => new(); [Fact] public void Save_OhneAusgewaehlteGruppe_SetztFehlerUndSpeichertNicht() { var slots = new FakeTimetableSlots(); var groups = new FakeGroups([]); var vm = new TimetableSlotDialogViewModel(slots, groups, SchoolYear(), DayOfWeek.Monday, 1, null); vm.SaveCommand.Execute(null); Assert.Null(vm.Result); Assert.NotEqual("", vm.GroupError); } [Fact] public void Save_MitAusgewaehlterGruppe_LegtNeuenSlotAn() { var group = new LearningGroup { Name = "Q1 Chemie" }; var slots = new FakeTimetableSlots(); var groups = new FakeGroups([group]); var vm = new TimetableSlotDialogViewModel(slots, groups, SchoolYear(), DayOfWeek.Monday, 1, null) { SelectedGroupName = "Q1 Chemie", Room = "R204", }; vm.SaveCommand.Execute(null); Assert.NotNull(vm.Result); Assert.Equal(group.Id, vm.Result!.GroupId); Assert.Equal("R204", vm.Result.Room); Assert.Single(slots.GetAll()); } [Fact] public void Save_BelegteStunde_ZeigtFreundlicheFehlermeldungStattAbsturz() { var groupA = new LearningGroup { Name = "Q1 Chemie" }; var groupB = new LearningGroup { Name = "Q1 Physik" }; var slots = new FakeTimetableSlots(); slots.Add(new TimetableSlot { GroupId = groupA.Id, Weekday = DayOfWeek.Monday, PeriodNumber = 1 }); var groups = new FakeGroups([groupA, groupB]); var vm = new TimetableSlotDialogViewModel(slots, groups, SchoolYear(), DayOfWeek.Monday, 1, null) { SelectedGroupName = "Q1 Physik", }; vm.SaveCommand.Execute(null); Assert.Null(vm.Result); Assert.Equal("Diese Stunde ist bereits belegt.", vm.GroupError); } [Fact] public void Delete_BeimBearbeitenEinesVorhandenenSlots_EntferntIhn() { var group = new LearningGroup { Name = "Q1 Chemie" }; var slot = new TimetableSlot { GroupId = group.Id, Weekday = DayOfWeek.Monday, PeriodNumber = 1 }; var slots = new FakeTimetableSlots(); slots.Add(slot); var groups = new FakeGroups([group]); var vm = new TimetableSlotDialogViewModel(slots, groups, SchoolYear(), DayOfWeek.Monday, 1, slot); vm.DeleteCommand.Execute(null); Assert.True(vm.Deleted); Assert.Empty(slots.GetAll()); } }