Add Formatter.Logs

This commit is contained in:
Dan Jones 2024-03-10 11:31:07 -05:00
commit d1b3604e1e
3 changed files with 54 additions and 2 deletions

View file

@ -4,6 +4,7 @@ import "codeberg.org/danjones000/my-log/models"
type Formatter interface { type Formatter interface {
Name() string Name() string
Logs([]models.Log) (out []byte, err error)
Log(models.Log) (out []byte, err error) Log(models.Log) (out []byte, err error)
Entry(models.Entry) (out []byte, err error) Entry(models.Entry) (out []byte, err error)
Meta(models.Meta) (out []byte, err error) Meta(models.Meta) (out []byte, err error)

View file

@ -20,6 +20,26 @@ func (pt *PlainText) Name() string {
return "plain" return "plain"
} }
func (pt *PlainText) Logs(logs []models.Log) (out []byte, err error) {
if len(logs) == 0 {
return
}
buff := &bytes.Buffer{}
first := true
for _, log := range logs {
o, _ := pt.Log(log)
if !first {
buff.WriteByte(10)
buff.WriteByte(10)
}
first = false
buff.Write(o)
}
out = buff.Bytes()
return
}
func (pt *PlainText) Log(log models.Log) (out []byte, err error) { func (pt *PlainText) Log(log models.Log) (out []byte, err error) {
if len(log.Entries) == 0 { if len(log.Entries) == 0 {
return return

View file

@ -13,7 +13,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestPlainLog(t *testing.T) { func TestPlainLogs(t *testing.T) {
m := []models.Meta{ m := []models.Meta{
{"foo", "bar"}, {"foo", "bar"},
{"baz", 42}, {"baz", 42},
@ -23,11 +23,17 @@ func TestPlainLog(t *testing.T) {
{Title: "small", Date: time.Now()}, {Title: "small", Date: time.Now()},
} }
l := models.Log{"stuff", e} l := models.Log{"stuff", e}
e2 := models.Entry{
Title: "three",
Date: time.Now(),
}
l2 := models.Log{"more-stuff", []models.Entry{e2}}
logs := []models.Log{l, l2}
f, err := New("plain") f, err := New("plain")
require.NoError(t, err) require.NoError(t, err)
out, err := f.Log(l) out, err := f.Logs(logs)
require.NoError(t, err) require.NoError(t, err)
read := bytes.NewReader(out) read := bytes.NewReader(out)
@ -67,6 +73,24 @@ func TestPlainLog(t *testing.T) {
line = scan.Text() line = scan.Text()
assert.Equal(t, "Date: "+e[1].Date.Format(tools.DateFormat), line) assert.Equal(t, "Date: "+e[1].Date.Format(tools.DateFormat), line)
scan.Scan()
scan.Scan()
line = scan.Text()
assert.Equal(t, l2.Name, line)
scan.Scan()
line = scan.Text()
assert.Equal(t, "#######", line)
scan.Scan()
scan.Scan()
line = scan.Text()
assert.Equal(t, "Title: "+e2.Title, line)
scan.Scan()
line = scan.Text()
assert.Equal(t, "Date: "+e2.Date.Format(tools.DateFormat), line)
more := scan.Scan() more := scan.Scan()
assert.False(t, more) assert.False(t, more)
} }
@ -76,6 +100,13 @@ func TestPlainName(t *testing.T) {
assert.Equal(t, "plain", f.Name()) assert.Equal(t, "plain", f.Name())
} }
func TestPlainLogNone(t *testing.T) {
f, _ := New("plain")
out, err := f.Logs([]models.Log{})
assert.NoError(t, err)
assert.Len(t, out, 0)
}
func TestPlainLogNoEntries(t *testing.T) { func TestPlainLogNoEntries(t *testing.T) {
f, _ := New("plain") f, _ := New("plain")
out, err := f.Log(models.Log{Name: "foo"}) out, err := f.Log(models.Log{Name: "foo"})