Adds TransactionDataset.GetValue(bool, string accountId), which negates the value when the given account is the transaction's origin (paying out) so the account's own transaction list and charts show a minus sign for outgoing money, regardless of account class. Removes the old Activa-only sign flip baked into ViewService.GetTransactionViewListAsync(accountId), which would have double-negated Activa bookings against the new accountId-aware GetValue. ChartService's booking-text totals now sum through the same accountId-aware GetValue instead of filtering to inbound transactions only, so a booking text nets its in/out transactions correctly.
54 lines
1.8 KiB
C#
54 lines
1.8 KiB
C#
using Schaad.Accounting.Datasets;
|
|
using Schaad.Accounting.Models;
|
|
using Shouldly;
|
|
|
|
namespace Schaad.Accounting.Tests;
|
|
|
|
public class TransactionDatasetTestShould
|
|
{
|
|
private static Account MakeAccount(string id) => new() { Id = id, Name = id, Currency = "CHF" };
|
|
|
|
private static TransactionDataset MakeTransaction(Account origin, Account target, decimal value, decimal? fxRate = null) =>
|
|
new(
|
|
new Transaction
|
|
{
|
|
Id = Guid.NewGuid().ToString(),
|
|
OriginAccountId = origin.Id,
|
|
TargetAccountId = target.Id,
|
|
Value = value,
|
|
FxRate = fxRate,
|
|
ValueDate = DateTime.Now,
|
|
BookingDate = DateTime.Now
|
|
},
|
|
origin, target);
|
|
|
|
[Fact]
|
|
public void ReturnNegativeValueWhenAccountIsOrigin()
|
|
{
|
|
var checking = MakeAccount("chk");
|
|
var groceries = MakeAccount("groc");
|
|
var transaction = MakeTransaction(checking, groceries, value: 50m);
|
|
|
|
transaction.GetValue(withFxRate: false, accountId: "chk").ShouldBe(-50m);
|
|
}
|
|
|
|
[Fact]
|
|
public void ReturnPositiveValueWhenAccountIsTarget()
|
|
{
|
|
var checking = MakeAccount("chk");
|
|
var groceries = MakeAccount("groc");
|
|
var transaction = MakeTransaction(groceries, checking, value: 50m);
|
|
|
|
transaction.GetValue(withFxRate: false, accountId: "chk").ShouldBe(50m);
|
|
}
|
|
|
|
[Fact]
|
|
public void ApplyFxConversionBeforeApplyingSignWhenAccountIsOrigin()
|
|
{
|
|
var checking = MakeAccount("chk");
|
|
var groceries = MakeAccount("groc");
|
|
var transaction = MakeTransaction(checking, groceries, value: 100m, fxRate: 0.5m);
|
|
|
|
transaction.GetValue(withFxRate: true, accountId: "chk").ShouldBe(-200m);
|
|
}
|
|
}
|