ledger-ui/ledger_test.go

133 lines
3.0 KiB
Go
Executable File

package main
import (
"fmt"
"io/ioutil"
"os"
"path"
"testing"
"github.com/google/uuid"
)
func testLedgerFile(t *testing.T) string {
path := path.Join(t.TempDir(), t.Name()+".dat")
if b, err := ioutil.ReadFile("./testdata/ledger.dat"); err != nil {
t.Fatal(err)
} else if err := ioutil.WriteFile(path, b, os.ModePerm); err != nil {
t.Fatal(err)
}
return path
}
func TestLedgerTransactionsBalances(t *testing.T) {
path := testLedgerFile(t)
ledger, err := NewLedger(path)
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 := testLedgerFile(t)
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)
}
}
func TestLedgerNewTransaction(t *testing.T) {
path := testLedgerFile(t)
ledger, err := NewLedger(path)
if err != nil {
t.Fatal(err)
}
transactions, err := ledger.Transactions()
if err != nil {
t.Fatal(err)
}
wantTransactions := append(transactions, newStubTransaction())
ledger.NewTransaction()
if err != nil {
t.Fatal(err)
}
gotTransactions, err := ledger.Transactions()
if err != nil {
t.Fatal(err)
}
if fmt.Sprint(wantTransactions) != fmt.Sprint(gotTransactions) {
t.Fatal(wantTransactions, gotTransactions)
}
}