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()) Assert.Equal(theme, AppThemeDisplay.FromLabel(AppThemeDisplay.Label(theme))); } [Fact] public void FromLabel_UnbekanntesLabel_LiefertSystemvorgabe() => Assert.Equal(AppTheme.System, AppThemeDisplay.FromLabel("Nonsens")); }