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>
63 lines
1.9 KiB
C#
63 lines
1.9 KiB
C#
using LehrerApp.Desktop.Services;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Desktop.Tests;
|
|
|
|
public sealed class AppearanceSettingsServiceTests
|
|
{
|
|
private static string BuildTempPath()
|
|
{
|
|
var path = Path.Combine(Path.GetTempPath(), $"lehrerapp-appearance-tests-{Guid.NewGuid():N}");
|
|
Directory.CreateDirectory(path);
|
|
return path;
|
|
}
|
|
|
|
[Fact]
|
|
public void Load_OhneVorhandeneDatei_LiefertSystemvorgabe() =>
|
|
Assert.Equal(AppTheme.System, new AppearanceSettingsService(BuildTempPath()).Load());
|
|
|
|
[Theory]
|
|
[InlineData(AppTheme.Light)]
|
|
[InlineData(AppTheme.Dark)]
|
|
[InlineData(AppTheme.System)]
|
|
public void SaveUndLoad_PersistiertUeberNeueInstanz(AppTheme theme)
|
|
{
|
|
var path = BuildTempPath();
|
|
new AppearanceSettingsService(path).Save(theme);
|
|
|
|
var reloaded = new AppearanceSettingsService(path).Load();
|
|
|
|
Assert.Equal(theme, reloaded);
|
|
}
|
|
|
|
[Fact]
|
|
public void Load_BeschaedigteDatei_FaelltAufSystemvorgabeZurueck()
|
|
{
|
|
var path = BuildTempPath();
|
|
File.WriteAllText(Path.Combine(path, "appearancesettings.json"), "{ kein json");
|
|
|
|
Assert.Equal(AppTheme.System, new AppearanceSettingsService(path).Load());
|
|
}
|
|
}
|
|
|
|
public sealed class AppThemeDisplayTests
|
|
{
|
|
[Theory]
|
|
[InlineData(AppTheme.System, "Systemvorgabe")]
|
|
[InlineData(AppTheme.Light, "Hell")]
|
|
[InlineData(AppTheme.Dark, "Dunkel")]
|
|
public void Label_LiefertDeutscheBeschriftung(AppTheme theme, string expected) =>
|
|
Assert.Equal(expected, AppThemeDisplay.Label(theme));
|
|
|
|
[Fact]
|
|
public void FromLabel_UndLabel_SindZueinanderInvers()
|
|
{
|
|
foreach (var theme in Enum.GetValues<AppTheme>())
|
|
Assert.Equal(theme, AppThemeDisplay.FromLabel(AppThemeDisplay.Label(theme)));
|
|
}
|
|
|
|
[Fact]
|
|
public void FromLabel_UnbekanntesLabel_LiefertSystemvorgabe() =>
|
|
Assert.Equal(AppTheme.System, AppThemeDisplay.FromLabel("Nonsens"));
|
|
}
|