Files
LehrerApp/LehrerApp.Desktop.Tests/TrashViewModelTests.cs
adminandClaude Sonnet 5 331033db5c feat: Dunkelmodus, Fenstergröße merken, Papierkorb für Löschvorgänge (12.4, 14.3, 14.6)
Dunkelmodus über neuen Einstellungen-Tab "Darstellung" (Systemvorgabe/Hell/Dunkel),
Fenstergröße/Maximiert-Status wird über Sitzungen hinweg gemerkt (bewusst ohne
Fensterposition), und ein generischer Snapshot-basierter Papierkorb (30 Tage) für
Sitzpläne, Noten, Notenschlüssel-Vorlagen, Aufgaben und Zeiteinträge. Details und
bewusste Scope-Entscheidungen (Spaltenbreiten zurückgestellt, Farb-Audit für
Dunkelmodus offen, welche Entitäten der Papierkorb abdeckt) in TODO.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 16:26:10 +02:00

100 lines
3.2 KiB
C#

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);
}
}