From 559908a150f2169bd8602ae8ba1c33c217ce56df Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:01:23 -0500 Subject: [PATCH] fix(infra): update transaction amount handling to use CanonicalAmount and ensure negative values in transaction tests --- .../Transactions/Plaid/PlaidAddedTransactionHandler.cs | 2 +- src/FiscalOS.Infra/Transactions/Plaid/PlaidExtensions.cs | 1 + .../Transactions/Plaid/PlaidModifiedTransactionHandler.cs | 2 +- .../Integration/PlaidAddedTransactionHandlerTests.cs | 3 +++ .../Integration/PlaidModifiedTransactionHandlerTests.cs | 1 + 5 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/FiscalOS.Infra/Transactions/Plaid/PlaidAddedTransactionHandler.cs b/src/FiscalOS.Infra/Transactions/Plaid/PlaidAddedTransactionHandler.cs index 7b960aa..8f8ccfb 100644 --- a/src/FiscalOS.Infra/Transactions/Plaid/PlaidAddedTransactionHandler.cs +++ b/src/FiscalOS.Infra/Transactions/Plaid/PlaidAddedTransactionHandler.cs @@ -89,7 +89,7 @@ internal sealed class PlaidAddedTransactionHandler : IPlaidAddedTransactionHandl account.Id, addedTransaction.Merchant, addedTransaction.Description, - addedTransaction.Amount, + addedTransaction.CanonicalAmount, addedTransaction.PostedDate, transactionMetadata ); diff --git a/src/FiscalOS.Infra/Transactions/Plaid/PlaidExtensions.cs b/src/FiscalOS.Infra/Transactions/Plaid/PlaidExtensions.cs index 66619aa..b2b1744 100644 --- a/src/FiscalOS.Infra/Transactions/Plaid/PlaidExtensions.cs +++ b/src/FiscalOS.Infra/Transactions/Plaid/PlaidExtensions.cs @@ -7,6 +7,7 @@ public static class PlaidExtensions { public string Merchant => transaction.MerchantName ?? "Unknown merchant"; public string Description => transaction.OriginalDescription ?? ""; + public decimal? CanonicalAmount => transaction.Amount is decimal amount ? -amount : null; public DateTimeOffset PostedDate => transaction.Datetime ?? ( transaction.Date.HasValue ? new DateTimeOffset( diff --git a/src/FiscalOS.Infra/Transactions/Plaid/PlaidModifiedTransactionHandler.cs b/src/FiscalOS.Infra/Transactions/Plaid/PlaidModifiedTransactionHandler.cs index c523e54..f9ab09a 100644 --- a/src/FiscalOS.Infra/Transactions/Plaid/PlaidModifiedTransactionHandler.cs +++ b/src/FiscalOS.Infra/Transactions/Plaid/PlaidModifiedTransactionHandler.cs @@ -84,7 +84,7 @@ internal sealed class PlaidModifiedTransactionHandler : IPlaidModifiedTransactio existing.AccountId, plaidModifiedTransaction.Merchant, plaidModifiedTransaction.Description, - plaidModifiedTransaction.Amount, + plaidModifiedTransaction.CanonicalAmount, plaidModifiedTransaction.PostedDate, plaidMetadata ); diff --git a/tests/FiscalOS.Infra.Tests/Integration/PlaidAddedTransactionHandlerTests.cs b/tests/FiscalOS.Infra.Tests/Integration/PlaidAddedTransactionHandlerTests.cs index c136a09..9e781d2 100644 --- a/tests/FiscalOS.Infra.Tests/Integration/PlaidAddedTransactionHandlerTests.cs +++ b/tests/FiscalOS.Infra.Tests/Integration/PlaidAddedTransactionHandlerTests.cs @@ -30,6 +30,9 @@ public class PlaidAddedTransactionHandlerTests : IntegrationTest result.Should().Be(1); account.Transactions.Should().HaveCount(2); + account.Transactions + .Single(t => t.Metadata is PlaidTransactionMetadata m && m.PlaidId == transaction.TransactionId) + .Amount.Should().Be(-transaction.Amount); } [Fact] diff --git a/tests/FiscalOS.Infra.Tests/Integration/PlaidModifiedTransactionHandlerTests.cs b/tests/FiscalOS.Infra.Tests/Integration/PlaidModifiedTransactionHandlerTests.cs index 7023198..4de1413 100644 --- a/tests/FiscalOS.Infra.Tests/Integration/PlaidModifiedTransactionHandlerTests.cs +++ b/tests/FiscalOS.Infra.Tests/Integration/PlaidModifiedTransactionHandlerTests.cs @@ -31,5 +31,6 @@ public class PlaidModifiedTransactionHandlerTests : IntegrationTest result.Should().Be(1); existingTransaction.MerchantName.Should().Be(transaction.MerchantName); + existingTransaction.Amount.Should().Be(-transaction.Amount); } } \ No newline at end of file