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); } }