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>
100 lines
3.2 KiB
C#
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);
|
|
}
|
|
}
|