clean tdd
parent
9f8614d032
commit
e7a1626bba
|
|
@ -1,6 +1,12 @@
|
|||
package ledger
|
||||
|
||||
import "io"
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
)
|
||||
|
||||
var filesAppendDelim = "\t"
|
||||
|
||||
type Files []string
|
||||
|
||||
|
|
@ -11,7 +17,42 @@ func NewFiles(p string, q ...string) (Files, error) {
|
|||
}
|
||||
|
||||
func (files Files) Add(payee string, delta Delta) error {
|
||||
// TODO
|
||||
currencyValue := fmt.Sprintf("%s%.2f", delta.Currency, delta.Value)
|
||||
if delta.Currency != USD {
|
||||
currencyValue = fmt.Sprintf("%.2f %s", delta.Value, delta.Currency)
|
||||
}
|
||||
return files.append(fmt.Sprintf("%s %s\n%s%s%s%s\n%s%s",
|
||||
delta.Date, delta.Description,
|
||||
filesAppendDelim, delta.Name, filesAppendDelim+filesAppendDelim+filesAppendDelim, currencyValue,
|
||||
filesAppendDelim, payee,
|
||||
))
|
||||
}
|
||||
|
||||
func (files Files) append(s string) error {
|
||||
if err := files.trimTrainlingWhitespace(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f, err := os.OpenFile(string(files[0]), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
fmt.Fprintf(f, "\n%s", s)
|
||||
return f.Close()
|
||||
}
|
||||
|
||||
func (files Files) trimTrainlingWhitespace() error {
|
||||
f, err := os.Open(string(files[0]))
|
||||
if os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
return io.EOF
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
)
|
||||
|
||||
func TestFileAdd(t *testing.T) {
|
||||
filesAppendDelim = " "
|
||||
payee := "name:3"
|
||||
delta := Delta{
|
||||
Date: "2999-88-77",
|
||||
|
|
@ -22,15 +23,17 @@ func TestFileAdd(t *testing.T) {
|
|||
}{
|
||||
"no file": {
|
||||
given: nil,
|
||||
want: `2999-88-77 66
|
||||
name:1 $2.00
|
||||
name:3`,
|
||||
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`,
|
||||
want: `
|
||||
2999-88-77 66
|
||||
name:1 $2.00
|
||||
name:3`,
|
||||
},
|
||||
"happy without trailing whitespace": {
|
||||
given: []byte(`
|
||||
|
|
@ -41,9 +44,9 @@ func TestFileAdd(t *testing.T) {
|
|||
2000-01-02 desc
|
||||
name:1 $1.00
|
||||
name:2 $-1.00
|
||||
2999-88-77 66
|
||||
name:1 $2.00
|
||||
name:3`,
|
||||
2999-88-77 66
|
||||
name:1 $2.00
|
||||
name:3`,
|
||||
},
|
||||
"happy with trailing newline": {
|
||||
given: []byte(`
|
||||
|
|
@ -55,9 +58,9 @@ func TestFileAdd(t *testing.T) {
|
|||
2000-01-02 desc
|
||||
name:1 $1.00
|
||||
name:2 $-1.00
|
||||
2999-88-77 66
|
||||
name:1 $2.00
|
||||
name:3`,
|
||||
2999-88-77 66
|
||||
name:1 $2.00
|
||||
name:3`,
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue