feat(ui): persist deleted entry visibility across accounts

This commit is contained in:
2026-11-02 21:30:25 +01:00
parent b445702ee9
commit c069699f16
10 changed files with 88 additions and 7 deletions
@@ -174,6 +174,8 @@ public class DashboardPdfStatementServiceTests : IDisposable
private sealed class FixedSettingsService : ISettingsService
{
public Task<bool> GetShowDeletedEntriesAsync() => Task.FromResult(false);
public Task SetShowDeletedEntriesAsync(bool show) => Task.CompletedTask;
private readonly string? _clubName;
public FixedSettingsService(string? clubName)
@@ -20,7 +20,8 @@ public class EntryPresentationTests
[Fact]
public void Actions_AreDirectIconButtonsWithTitlesAndBookingSpecificNames()
{
using var context = new BunitContext();
using var fixture = new LedgerUiFixture();
var context = fixture.Context;
var entry = new EntryDto(1, 1, "2026-001", EntryType.Expense, DateTime.Today, "Porto", 4.20m, false, false, null, null, null);
var edited = 0;
var table = context.Render<EntryTable>(p => p.Add(x => x.Entries, [entry]).Add(x => x.OnEditEntry, id => edited = id));
+2 -1
View File
@@ -12,7 +12,8 @@ public class EntrySearchTests
[Fact]
public void Search_FindsKnownBookingInLargeList_AndResetsWithoutChangingAmounts()
{
using var context = new BunitContext();
using var fixture = new LedgerUiFixture();
var context = fixture.Context;
var entries = Enumerable.Range(1, 400).Select(i => new EntryDto(i, 1, $"2026-{i:D3}", EntryType.Income,
new(2026, 1, 1), i == 321 ? "Älteres Jubiläum" : $"Beitrag {i}", i == 321 ? 12.50m : i, false, false, null, null, null)).ToList();
var original = entries.Sum(e => e.Amount);
@@ -0,0 +1,53 @@
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<EntryDto> 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<EntryTable>(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<ISettingsService>().GetShowDeletedEntriesAsync());
first.Find(".filter-reset").Click();
Assert.Single(first.FindAll("tbody tr"));
var second = f.Context.Render<EntryTable>(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<ISettingsService>().GetShowDeletedEntriesAsync());
var returning = f.Context.Render<EntryTable>(p => p.Add(x => x.Entries, Rows(1)));
returning.WaitForAssertion(() => Assert.Empty(returning.FindAll("tbody tr")));
}
}
@@ -34,11 +34,11 @@ public class YearNavigationTests
context.Services.GetRequiredService<ReportingPeriod>().Year = 2025;
var page = context.Render<Routes>();
page.WaitForAssertion(() => Assert.Contains("Jahr: 2025", page.Markup));
page.Find(".account-card").Click();
page.WaitForElement(".account-card").Click();
page.WaitForAssertion(() => Assert.Contains("Vorjahr", page.Markup));
page.FindAll("button").Single(b => b.TextContent.Contains("Zurück")).Click();
page.WaitForAssertion(() => Assert.Contains("Jahr: 2025", page.Markup));
page.Find(".account-card").Click();
page.WaitForElement(".account-card").Click();
page.WaitForElement(".summary-section");
page.FindAll("button").Single(b => b.TextContent.Contains("Einnahme oder Ausgabe erfassen")).Click();
var dialog = page.FindComponent<AddEntryDialog>();
@@ -60,7 +60,7 @@ public class YearNavigationTests
page.FindAll("button").Single(b => b.TextContent.Trim() == "Alle Buchungen").Click();
page.FindAll("button").Single(b => b.TextContent.Contains("Zurück")).Click();
page.WaitForAssertion(() => Assert.Contains("Alle Jahre", page.Markup));
page.Find(".account-card").Click();
page.WaitForElement(".account-card").Click();
page.WaitForAssertion(() => Assert.Contains("Vorjahr", page.Markup));
Assert.Null(context.Services.GetRequiredService<ReportingPeriod>().Year);
}