Bookings like "Narbonne Car" and "Narbonne Food" should roll up into one series/slice instead of staying separate, so grouping now uses the text up to the first space via TransactionDataset.GetTextGroup().
85 lines
2.7 KiB
C#
85 lines
2.7 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, string text = "") =>
|
|
new(
|
|
new Transaction
|
|
{
|
|
Id = Guid.NewGuid().ToString(),
|
|
OriginAccountId = origin.Id,
|
|
TargetAccountId = target.Id,
|
|
Value = value,
|
|
FxRate = fxRate,
|
|
Text = text,
|
|
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);
|
|
}
|
|
|
|
[Fact]
|
|
public void ReturnFirstWordWhenTextHasMultipleWords()
|
|
{
|
|
var checking = MakeAccount("chk");
|
|
var groceries = MakeAccount("groc");
|
|
var transaction = MakeTransaction(checking, groceries, value: 50m, text: "Narbonne Car");
|
|
|
|
transaction.GetTextGroup().ShouldBe("Narbonne");
|
|
}
|
|
|
|
[Fact]
|
|
public void ReturnWholeTextWhenTextHasNoSpace()
|
|
{
|
|
var checking = MakeAccount("chk");
|
|
var groceries = MakeAccount("groc");
|
|
var transaction = MakeTransaction(checking, groceries, value: 50m, text: "Migros");
|
|
|
|
transaction.GetTextGroup().ShouldBe("Migros");
|
|
}
|
|
|
|
[Fact]
|
|
public void ReturnEmptyStringWhenTextIsEmpty()
|
|
{
|
|
var checking = MakeAccount("chk");
|
|
var groceries = MakeAccount("groc");
|
|
var transaction = MakeTransaction(checking, groceries, value: 50m, text: "");
|
|
|
|
transaction.GetTextGroup().ShouldBe("");
|
|
}
|
|
}
|