ledger-ui/ledger_test.go

112 lines
2.5 KiB
Go

package main
import (
"fmt"
"io"
"os"
"path"
"testing"
"github.com/google/uuid"
)
func TestLedgerTransactionsBalances(t *testing.T) {
ledger, err := NewLedger("./testdata/ledger.dat")
if err != nil {
t.Fatal(err)
}
transactions, err := ledger.Transactions()
if err != nil {
t.Fatal(err)
}
if len(transactions) != 2 {
t.Fatal(transactions)
}
if want := (Transaction{
Date: "2021-07-29",
Description: "Qt needs pizza n kodiak",
Payee: "Withdrawal:Home:Grocery+Resturaunt:Target",
Payer: "Debts:Credit:ChaseAarpChaseVisa",
Amount: 37.86,
}); transactions[0] != want {
t.Fatalf("want \n\t%+v, got \n\t%+v", want, transactions[0])
}
if want := (Transaction{
Date: "2021-07-30",
Description: "Testing detecting deposits via email alerts 5421705162",
Payee: "Debts:Credit:ChaseAarpChaseVisa",
Payer: "AssetAccount:Cash:Uccu",
Amount: 100.00,
}); transactions[1] != want {
t.Fatalf("want \n\t%+v, got \n\t%+v", want, transactions[1])
}
for i := range transactions {
t.Logf("%+v => \n%s", transactions[i], transactions[i].Marshal())
}
balances, err := ledger.Balances()
if err != nil {
t.Fatal(err)
}
wantBalances := map[string]float32{
transactions[0].Payee: 37.86,
transactions[0].Payer: 62.14,
transactions[1].Payer: -100,
}
if fmt.Sprint(balances) != fmt.Sprint(wantBalances) {
t.Fatalf("want \n%+v, got \n%+v", wantBalances, balances)
}
}
func TestLedgerSetTransaction(t *testing.T) {
aTransaction := func() Transaction {
return Transaction{
Date: "2021-07-20",
Description: uuid.New().String(),
Payee: "payee",
Payer: "payer",
Amount: 1.23,
}
}
path := path.Join(t.TempDir(), "ledger.dat")
a, err := os.Open("./testdata/ledger.dat")
if err != nil {
t.Fatal(err)
}
b, err := os.Create(path)
if err != nil {
t.Fatal(err)
}
if _, err := io.Copy(b, a); err != nil {
t.Fatal(err)
}
a.Close()
b.Close()
ledger, err := NewLedger(path)
if err != nil {
t.Fatal(err)
}
transactions, err := ledger.Transactions()
if err != nil {
t.Fatal(err)
}
was := fmt.Sprintf("%+v", transactions)
transactions[0] = aTransaction()
want := fmt.Sprintf("%+v", transactions)
if err := ledger.SetTransaction(0, transactions[0]); err != nil {
t.Fatal(err)
}
transactions, err = ledger.Transactions()
if err != nil {
t.Fatal(err)
}
got := fmt.Sprintf("%+v", transactions)
if got == was {
t.Fatal(got)
}
if got != want {
t.Fatal(want, got)
}
}