diff --git a/ledger/file.go b/ledger/file.go index c9d060a..cdc3d99 100644 --- a/ledger/file.go +++ b/ledger/file.go @@ -10,7 +10,7 @@ func NewFiles(p string, q ...string) (Files, error) { return f, err } -func (files Files) Add(delta Delta) error { +func (files Files) Add(payee string, delta Delta) error { // TODO return io.EOF } diff --git a/ledger/file_test.go b/ledger/file_test.go index 7348b7d..f32f797 100644 --- a/ledger/file_test.go +++ b/ledger/file_test.go @@ -1,10 +1,94 @@ package ledger import ( + "os" + "path" "path/filepath" "testing" ) +func TestFileAdd(t *testing.T) { + payee := "name:3" + delta := Delta{ + Date: "2999-88-77", + Description: "66", + Name: "name:1", + Value: 2.00, + Currency: USD, + } + cases := map[string]struct { + given []byte + want string + }{ + "no file": { + given: nil, + want: `2999-88-77 66 + name:1 $2.00 + name:3`, + }, + "empty file": { + given: []byte{}, + want: `2999-88-77 66 + name:1 $2.00 + name:3`, + }, + "happy without trailing whitespace": { + given: []byte(` +2000-01-02 desc + name:1 $1.00 + name:2 $-1.00`), + want: ` +2000-01-02 desc + name:1 $1.00 + name:2 $-1.00 +2999-88-77 66 + name:1 $2.00 + name:3`, + }, + "happy with trailing newline": { + given: []byte(` +2000-01-02 desc + name:1 $1.00 + name:2 $-1.00 + `), + want: ` +2000-01-02 desc + name:1 $1.00 + name:2 $-1.00 +2999-88-77 66 + name:1 $2.00 + name:3`, + }, + } + + for name, d := range cases { + c := d + t.Run(name, func(t *testing.T) { + p := path.Join(t.TempDir(), "input") + if c.given != nil { + if err := os.WriteFile(p, []byte(c.given), os.ModePerm); err != nil { + t.Fatal(err) + } + } + + f, err := NewFiles(p) + if err != nil { + t.Fatal(err) + } + + if err := f.Add(payee, delta); err != nil { + t.Fatal(err) + } + + if got, err := os.ReadFile(p); err != nil { + t.Fatal(err) + } else if string(got) != c.want { + t.Errorf("wanted\n\t%s, got\n\t%s", c.want, got) + } + }) + } +} + func TestFileTestdata(t *testing.T) { t.Run("macro.d", func(t *testing.T) { paths, err := filepath.Glob("./testdata/macro.d/*")