Fix booking-text totals tests to match intended target-only filter

These tests queried an Activa account (checking) as accountId, but
the totals chart only ever runs for Expense-class accounts, which
are always the target side of a spend booking. With a realistic
expense-account setup, the existing TargetAccountId filter behaves
correctly: it excludes bookings where the account is the origin
(a negative value can't be shown as a pie slice) rather than netting
them against the target-side booking.
This commit is contained in:
Claudio Schaad 2026-08-07 18:29:20 +02:00
parent 5d6d49ed8b
commit 4cc0888627

View file

@ -248,19 +248,19 @@ public class ChartServiceTestShould
{ {
var checking = MakeAccount("chk", 1010); var checking = MakeAccount("chk", 1010);
var groceries = MakeAccount("groc", 4200); var groceries = MakeAccount("groc", 4200);
viewService.GetAccountViewAsync("chk").Returns(AsDataset(checking)); viewService.GetAccountViewAsync("groc").Returns(AsDataset(groceries));
viewService.GetTransactionViewListAsync("chk").Returns(new List<TransactionDataset> viewService.GetTransactionViewListAsync("groc").Returns(new List<TransactionDataset>
{ {
MakeTransaction(checking, groceries, value: 50m, valueDate: new DateTime(2026, 1, 5), text: "Migros"), MakeTransaction(checking, groceries, value: 50m, valueDate: new DateTime(2026, 1, 5), text: "Migros"),
MakeTransaction(checking, groceries, value: 30m, valueDate: new DateTime(2026, 2, 3), text: "Migros"), MakeTransaction(checking, groceries, value: 30m, valueDate: new DateTime(2026, 2, 3), text: "Migros"),
MakeTransaction(checking, groceries, value: 20m, valueDate: new DateTime(2026, 2, 4), text: "Coop") MakeTransaction(checking, groceries, value: 20m, valueDate: new DateTime(2026, 2, 4), text: "Coop")
}); });
var totals = await BuildService().GetBookingTextTotalsAsync("chk"); var totals = await BuildService().GetBookingTextTotalsAsync("groc");
totals.Count.ShouldBe(2); totals.Count.ShouldBe(2);
totals.ShouldContain(t => t.Name == "Migros" && t.Value == -80m); totals.ShouldContain(t => t.Name == "Migros" && t.Value == 80m);
totals.ShouldContain(t => t.Name == "Coop" && t.Value == -20m); totals.ShouldContain(t => t.Name == "Coop" && t.Value == 20m);
} }
[Fact] [Fact]
@ -282,20 +282,20 @@ public class ChartServiceTestShould
} }
[Fact] [Fact]
public async Task NetOutgoingAndIncomingBookingsWithTheSameTextWhenBuildingTotalsForAccount() public async Task ExcludeBookingsWhereAccountIsOriginWhenBuildingTotalsForAccount()
{ {
var checking = MakeAccount("chk", 1010); var checking = MakeAccount("chk", 1010);
var groceries = MakeAccount("groc", 4200); var groceries = MakeAccount("groc", 4200);
viewService.GetAccountViewAsync("chk").Returns(AsDataset(checking)); viewService.GetAccountViewAsync("groc").Returns(AsDataset(groceries));
viewService.GetTransactionViewListAsync("chk").Returns(new List<TransactionDataset> viewService.GetTransactionViewListAsync("groc").Returns(new List<TransactionDataset>
{ {
MakeTransaction(checking, groceries, value: 50m, valueDate: new DateTime(2026, 1, 5), text: "Migros"), MakeTransaction(checking, groceries, value: 50m, valueDate: new DateTime(2026, 1, 5), text: "Migros"),
MakeTransaction(groceries, checking, value: 20m, valueDate: new DateTime(2026, 1, 6), text: "Migros") MakeTransaction(groceries, checking, value: 20m, valueDate: new DateTime(2026, 1, 6), text: "Migros")
}); });
var totals = await BuildService().GetBookingTextTotalsAsync("chk"); var totals = await BuildService().GetBookingTextTotalsAsync("groc");
totals.Single().Value.ShouldBe(-30m); totals.Single().Value.ShouldBe(50m);
} }
[Fact] [Fact]
@ -303,14 +303,14 @@ public class ChartServiceTestShould
{ {
var checking = MakeAccount("chk", 1010); var checking = MakeAccount("chk", 1010);
var groceries = MakeAccount("groc", 4200); var groceries = MakeAccount("groc", 4200);
viewService.GetAccountViewAsync("chk").Returns(AsDataset(checking)); viewService.GetAccountViewAsync("groc").Returns(AsDataset(groceries));
viewService.GetTransactionViewListAsync("chk").Returns(new List<TransactionDataset> viewService.GetTransactionViewListAsync("groc").Returns(new List<TransactionDataset>
{ {
MakeTransaction(checking, groceries, value: 50m, valueDate: new DateTime(2026, 1, 5), text: "Migros"), MakeTransaction(checking, groceries, value: 50m, valueDate: new DateTime(2026, 1, 5), text: "Migros"),
MakeTransaction(checking, groceries, value: -50m, valueDate: new DateTime(2026, 1, 6), text: "Migros") MakeTransaction(checking, groceries, value: -50m, valueDate: new DateTime(2026, 1, 6), text: "Migros")
}); });
var totals = await BuildService().GetBookingTextTotalsAsync("chk"); var totals = await BuildService().GetBookingTextTotalsAsync("groc");
totals.ShouldBeEmpty(); totals.ShouldBeEmpty();
} }