using LehrerApp.Desktop.Services; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class SyncSettingsServiceTests { private static string BuildTempPath() { var path = Path.Combine(Path.GetTempPath(), $"lehrerapp-syncsettingssvc-tests-{Guid.NewGuid():N}"); Directory.CreateDirectory(path); return path; } [Fact] public void SetServerUrl_PersistiertUeberNeueInstanz() { var path = BuildTempPath(); new SyncSettingsService(path).SetServerUrl("https://sync.example.com"); var reloaded = new SyncSettingsService(path); Assert.Equal("https://sync.example.com", reloaded.ServerUrl); } [Fact] public void SetCredentialsAndToken_TokenIstVerschluesseltAbrufbar() { var service = new SyncSettingsService(BuildTempPath()); service.SetCredentialsAndToken("sebastian", "geheimes-token-123"); Assert.True(service.IsLoggedIn); Assert.Equal("sebastian", service.Username); Assert.Equal("geheimes-token-123", service.GetToken()); } [Fact] public void Token_UeberlebtNeueInstanzMitDemselbenPfad() { var path = BuildTempPath(); new SyncSettingsService(path).SetCredentialsAndToken("sebastian", "token-abc"); var reloaded = new SyncSettingsService(path); Assert.True(reloaded.IsLoggedIn); Assert.Equal("token-abc", reloaded.GetToken()); } [Fact] public void TokenDateiEnthaeltNichtDenKlartext() { var path = BuildTempPath(); var service = new SyncSettingsService(path); service.SetCredentialsAndToken("sebastian", "geheimes-token-123"); var raw = File.ReadAllText(Path.Combine(path, "sync-settings.json")); Assert.DoesNotContain("geheimes-token-123", raw); } [Fact] public void Logout_EntferntTokenBehaeltAberServerUrlUndUsername() { var service = new SyncSettingsService(BuildTempPath()); service.SetServerUrl("https://sync.example.com"); service.SetCredentialsAndToken("sebastian", "token-abc"); service.Logout(); Assert.False(service.IsLoggedIn); Assert.Null(service.GetToken()); Assert.Equal("https://sync.example.com", service.ServerUrl); Assert.Equal("sebastian", service.Username); } }