fix(infra): update transaction amount handling to use CanonicalAmount and ensure negative values in transaction tests

This commit is contained in:
Stevan Freeborn
2026-03-11 20:01:23 -05:00
parent e3acb2166d
commit 559908a150
5 changed files with 7 additions and 2 deletions
@@ -89,7 +89,7 @@ internal sealed class PlaidAddedTransactionHandler : IPlaidAddedTransactionHandl
account.Id, account.Id,
addedTransaction.Merchant, addedTransaction.Merchant,
addedTransaction.Description, addedTransaction.Description,
addedTransaction.Amount, addedTransaction.CanonicalAmount,
addedTransaction.PostedDate, addedTransaction.PostedDate,
transactionMetadata transactionMetadata
); );
@@ -7,6 +7,7 @@ public static class PlaidExtensions
{ {
public string Merchant => transaction.MerchantName ?? "Unknown merchant"; public string Merchant => transaction.MerchantName ?? "Unknown merchant";
public string Description => transaction.OriginalDescription ?? ""; public string Description => transaction.OriginalDescription ?? "";
public decimal? CanonicalAmount => transaction.Amount is decimal amount ? -amount : null;
public DateTimeOffset PostedDate => transaction.Datetime ?? ( public DateTimeOffset PostedDate => transaction.Datetime ?? (
transaction.Date.HasValue transaction.Date.HasValue
? new DateTimeOffset( ? new DateTimeOffset(
@@ -84,7 +84,7 @@ internal sealed class PlaidModifiedTransactionHandler : IPlaidModifiedTransactio
existing.AccountId, existing.AccountId,
plaidModifiedTransaction.Merchant, plaidModifiedTransaction.Merchant,
plaidModifiedTransaction.Description, plaidModifiedTransaction.Description,
plaidModifiedTransaction.Amount, plaidModifiedTransaction.CanonicalAmount,
plaidModifiedTransaction.PostedDate, plaidModifiedTransaction.PostedDate,
plaidMetadata plaidMetadata
); );
@@ -30,6 +30,9 @@ public class PlaidAddedTransactionHandlerTests : IntegrationTest
result.Should().Be(1); result.Should().Be(1);
account.Transactions.Should().HaveCount(2); account.Transactions.Should().HaveCount(2);
account.Transactions
.Single(t => t.Metadata is PlaidTransactionMetadata m && m.PlaidId == transaction.TransactionId)
.Amount.Should().Be(-transaction.Amount);
} }
[Fact] [Fact]
@@ -31,5 +31,6 @@ public class PlaidModifiedTransactionHandlerTests : IntegrationTest
result.Should().Be(1); result.Should().Be(1);
existingTransaction.MerchantName.Should().Be(transaction.MerchantName); existingTransaction.MerchantName.Should().Be(transaction.MerchantName);
existingTransaction.Amount.Should().Be(-transaction.Amount);
} }
} }