ledger.newtransaction
parent
8a7f97d230
commit
03ec3247f9
16
ledger.go
16
ledger.go
|
|
@ -8,6 +8,7 @@ import (
|
|||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Ledger struct {
|
||||
|
|
@ -24,6 +25,21 @@ func NewLedger(path string) (Ledger, error) {
|
|||
}, err
|
||||
}
|
||||
|
||||
func (ledger Ledger) NewTransaction() error {
|
||||
transactions, err := ledger.Transactions()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
transactions = append(transactions, Transaction{
|
||||
Date: time.Now().Format("2006-01-02"),
|
||||
Description: "?",
|
||||
Payer: "?",
|
||||
Payee: "?",
|
||||
Amount: 0,
|
||||
})
|
||||
return ledger.SetTransactions(transactions)
|
||||
}
|
||||
|
||||
func (ledger Ledger) SetTransaction(i int, transaction Transaction) error {
|
||||
transactions, err := ledger.Transactions()
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"testing"
|
||||
|
|
@ -10,8 +10,19 @@ import (
|
|||
"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) {
|
||||
ledger, err := NewLedger("./testdata/ledger.dat")
|
||||
path := testLedgerFile(t)
|
||||
ledger, err := NewLedger(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -67,21 +78,7 @@ func TestLedgerSetTransaction(t *testing.T) {
|
|||
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()
|
||||
|
||||
path := testLedgerFile(t)
|
||||
ledger, err := NewLedger(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -109,3 +106,27 @@ func TestLedgerSetTransaction(t *testing.T) {
|
|||
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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Transaction struct {
|
||||
|
|
@ -18,6 +19,20 @@ type Transaction struct {
|
|||
Amount float32
|
||||
}
|
||||
|
||||
const (
|
||||
UnknownAccount = "?"
|
||||
)
|
||||
|
||||
func newStubTransaction() Transaction {
|
||||
return Transaction{
|
||||
Date: time.Now().Format("2006-01-02"),
|
||||
Description: UnknownAccount,
|
||||
Payer: UnknownAccount,
|
||||
Payee: UnknownAccount,
|
||||
Amount: 0,
|
||||
}
|
||||
}
|
||||
|
||||
func readTransaction(r io.Reader) (Transaction, error) {
|
||||
lines := make([][]byte, 3)
|
||||
for i := range lines {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,24 @@ import (
|
|||
"testing"
|
||||
)
|
||||
|
||||
func TestNewStubTransaction(t *testing.T) {
|
||||
want := Transaction{
|
||||
Date: "1",
|
||||
Amount: 0,
|
||||
Payer: UnknownAccount,
|
||||
Payee: UnknownAccount,
|
||||
Description: UnknownAccount,
|
||||
}
|
||||
got := newStubTransaction()
|
||||
if got.Date == "" {
|
||||
t.Fatal(got.Date)
|
||||
}
|
||||
got.Date = want.Date
|
||||
if want != got {
|
||||
t.Fatal(want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWords(t *testing.T) {
|
||||
input := `
|
||||
hello world
|
||||
|
|
|
|||
Loading…
Reference in New Issue