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>
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user