using LehrerApp.Core.Services; using Xunit; namespace LehrerApp.Tests; public sealed class AppLockServiceTests { [Fact] public void NeueKonfiguration_IstStandardmaessigDeaktiviert() { using var temp = new TempAppData(); var service = new AppLockService(temp.Path); Assert.False(service.IsEnabled); Assert.False(service.HasPassword); } [Fact] public void SetPassword_VerifyPassword_KorrektesPasswortWirdAkzeptiert() { using var temp = new TempAppData(); var service = new AppLockService(temp.Path); service.SetPassword("geheim123"); Assert.True(service.HasPassword); Assert.True(service.VerifyPassword("geheim123")); Assert.False(service.VerifyPassword("falsch")); } [Fact] public void Configure_WirdUeberNeueInstanzHinwegPersistiert() { using var temp = new TempAppData(); var first = new AppLockService(temp.Path); first.SetPassword("geheim123"); first.Configure(enabled: true, timeoutMinutes: 15); var second = new AppLockService(temp.Path); Assert.True(second.IsEnabled); Assert.Equal(15, second.TimeoutMinutes); Assert.True(second.VerifyPassword("geheim123")); } [Fact] public void VerifyPassword_OhneGesetztesPasswort_GibtFalseZurueck() { using var temp = new TempAppData(); var service = new AppLockService(temp.Path); Assert.False(service.VerifyPassword("irgendwas")); } [Fact] public void Configure_TimeoutUnterEinerMinute_WirdAufEineMinuteBegrenzt() { using var temp = new TempAppData(); var service = new AppLockService(temp.Path); service.Configure(enabled: true, timeoutMinutes: 0); Assert.Equal(1, service.TimeoutMinutes); } private sealed class TempAppData : IDisposable { public string Path { get; } = System.IO.Path.Combine( System.IO.Path.GetTempPath(), $"lehrerapp-applock-tests-{Guid.NewGuid():N}"); public TempAppData() => Directory.CreateDirectory(Path); public void Dispose() { if (Directory.Exists(Path)) Directory.Delete(Path, recursive: true); } } }