From 80ca2ea61e24da7e5135cafdd15bb6510cbe9092 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Sat, 20 Jul 2024 11:29:10 -0600 Subject: [PATCH] make ledger.Deltas.Transactions() --- src/ledger/transaction.go | 26 ++++++++++++++++++++++++++ src/ledger/transaction_test.go | 19 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/ledger/transaction.go b/src/ledger/transaction.go index 271ebc9..0d67d38 100644 --- a/src/ledger/transaction.go +++ b/src/ledger/transaction.go @@ -10,9 +10,35 @@ import ( "regexp" "slices" "strconv" + "strings" "unicode" ) +type Transaction Deltas + +type Transactions []Transaction + +func (deltas Deltas) Transactions() Transactions { + m := make(map[string]Transaction) + for _, d := range deltas { + m[d.Transaction] = append(m[d.Transaction], d) + } + + result := make(Transactions, 0, len(m)) + for _, v := range m { + result = append(result, v) + } + + slices.SortFunc(result, func(a, b Transaction) int { + if a[0].Date == b[0].Date { + return strings.Compare(a[0].Transaction, b[0].Transaction) + } + return strings.Compare(a[0].Date, b[0].Date) + }) + + return result +} + type transaction struct { date string description string diff --git a/src/ledger/transaction_test.go b/src/ledger/transaction_test.go index 99d8f6f..6ba09ed 100644 --- a/src/ledger/transaction_test.go +++ b/src/ledger/transaction_test.go @@ -8,6 +8,25 @@ import ( "testing" ) +func TestDeltasTransactions(t *testing.T) { + given := Deltas{ + Delta{Date: "2", Name: "x", Transaction: "a"}, + Delta{Date: "2", Name: "y", Transaction: "a"}, + Delta{Date: "1", Name: "z", Transaction: "b"}, + } + + got := given.Transactions() + if len(got) != 2 { + t.Error(len(got)) + } + if len(got[0]) != 1 { + t.Error("first xaction is not earliest date", len(got[0])) + } + if len(got[1]) != 2 { + t.Error("second xaction is not latest date", len(got[1])) + } +} + func TestReadTransaction(t *testing.T) { cases := map[string]struct { input string