using LehrerApp.Core.Models; using LehrerApp.Data; using LehrerApp.Data.Repositories; using LehrerApp.Desktop.ViewModels.Settings; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class TrashViewModelTests { private static TrashViewModel BuildViewModel(LiteDbContext db) => new( new TrashRepository(db), new GradeRepository(db), new WorkTaskRepository(db), new TimeEntryRepository(db), new SeatingPlanRepository(db), new GradingKeyTemplateRepository(db)); [Fact] public void Konstruktor_LaedtVorhandenePapierkorbEintraege() { using var db = new LiteDbContext(new MemoryStream()); var taskRepo = new WorkTaskRepository(db); var task = new WorkTask { Title = "Elternbrief schreiben" }; taskRepo.Save(task); taskRepo.Delete(task.Id); var vm = BuildViewModel(db); Assert.True(vm.HasItems); var item = Assert.Single(vm.Items); Assert.Equal("Aufgabe", item.TypeLabel); Assert.Equal("Elternbrief schreiben", item.Summary); } [Fact] public void LeererPapierkorb_HasItemsIstFalsch() { using var db = new LiteDbContext(new MemoryStream()); var vm = BuildViewModel(db); Assert.False(vm.HasItems); Assert.Empty(vm.Items); } [Fact] public void RestoreCommand_StelltAufgabeWiederHerUndAktualisiertDieListe() { using var db = new LiteDbContext(new MemoryStream()); var taskRepo = new WorkTaskRepository(db); var task = new WorkTask { Title = "Klausuren korrigieren" }; taskRepo.Save(task); taskRepo.Delete(task.Id); var vm = BuildViewModel(db); var item = Assert.Single(vm.Items); vm.RestoreCommand.Execute(item); Assert.NotNull(db.Tasks.FindById(task.Id)); Assert.False(vm.HasItems); Assert.Contains("Klausuren korrigieren", vm.Status); } [Fact] public void RestoreCommand_MitNullTutNichts() { using var db = new LiteDbContext(new MemoryStream()); var vm = BuildViewModel(db); vm.RestoreCommand.Execute(null); Assert.Equal("", vm.Status); } [Theory] [InlineData(nameof(Grade), "Note")] [InlineData(nameof(WorkTask), "Aufgabe")] [InlineData(nameof(TimeEntry), "Zeiteintrag")] [InlineData(nameof(SeatingPlan), "Sitzplan")] [InlineData(nameof(GradingKeyTemplate), "Notenschlüssel-Vorlage")] public void TypeLabel_UebersetztDenEntityTypeInsDeutsche(string entityType, string expectedLabel) { using var db = new LiteDbContext(new MemoryStream()); db.TrashedItems.Insert(new TrashedItem { EntityType = entityType, Summary = "Testeintrag" }); var vm = BuildViewModel(db); var item = Assert.Single(vm.Items); Assert.Equal(expectedLabel, item.TypeLabel); } [Fact] public void TypeLabel_UnbekannterEntityTypeFaelltAufDenRohenNamenZurueck() { using var db = new LiteDbContext(new MemoryStream()); db.TrashedItems.Insert(new TrashedItem { EntityType = "Sonstiges", Summary = "Testeintrag" }); var vm = BuildViewModel(db); Assert.Equal("Sonstiges", Assert.Single(vm.Items).TypeLabel); } }