133 lines
3.0 KiB
Go
Executable File
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)
|
|
}
|
|
}
|