using Bunit; using Duempelkas.App.Components.Accounts; using Duempelkas.App.Services; using Duempelkas.App.Services.Models; using Duempelkas.Domain.Enums; using Duempelkas.Infrastructure.Services; using Xunit; namespace Duempelkas.Tests; public class HistoryPreferenceTests { [Fact] public async Task PreferenceSurvivesRestart_AndPreservesOtherSettings() { var folder = Path.Combine(Path.GetTempPath(), "duempelkas-history-" + Guid.NewGuid().ToString("N")); try { var settings = new SettingsService(folder); Assert.False(await settings.GetShowDeletedEntriesAsync()); await settings.SetClubNameAsync("Testverein"); await settings.SetShowDeletedEntriesAsync(true); var restarted = new SettingsService(folder); Assert.True(await restarted.GetShowDeletedEntriesAsync()); Assert.Equal("Testverein", await restarted.GetClubNameAsync()); await restarted.SetSetupStepAsync(2); Assert.True(await new SettingsService(folder).GetShowDeletedEntriesAsync()); await restarted.SetShowDeletedEntriesAsync(false); Assert.False(await new SettingsService(folder).GetShowDeletedEntriesAsync()); } finally { if (Directory.Exists(folder)) Directory.Delete(folder, true); } } [Fact] public async Task HistoryStaysEnabledAcrossAccountsAndFilterReset_UntilSwitchedOff() { using var f = new LedgerUiFixture(); List Rows(int account) => [new(account, account, "2026-001", EntryType.Income, DateTime.Today, "Deleted test", 10m, true, false, null, null, null)]; var first = f.Context.Render(p => p.Add(x => x.Entries, Rows(1))); Assert.Empty(first.FindAll("tbody tr")); await first.Find("#show-deleted").ChangeAsync(new() { Value = true }); Assert.True(await f.Service().GetShowDeletedEntriesAsync()); first.Find(".filter-reset").Click(); Assert.Single(first.FindAll("tbody tr")); var second = f.Context.Render(p => p.Add(x => x.Entries, Rows(2))); second.WaitForAssertion(() => Assert.Single(second.FindAll("tbody tr"))); await second.Find("#show-deleted").ChangeAsync(new() { Value = false }); Assert.False(await f.Service().GetShowDeletedEntriesAsync()); var returning = f.Context.Render(p => p.Add(x => x.Entries, Rows(1))); returning.WaitForAssertion(() => Assert.Empty(returning.FindAll("tbody tr"))); } }