my-log/formatters/plain_test.go
2024-03-07 10:10:54 -06:00

109 lines
2.1 KiB
Go

package formatters
import (
"bufio"
"bytes"
"fmt"
"testing"
"time"
"codeberg.org/danjones000/my-log/models"
"codeberg.org/danjones000/my-log/tools"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestPlainLog(t *testing.T) {
m := []models.Meta{
{"foo", "bar"},
{"baz", 42},
}
e := []models.Entry{
{Title: "one", Date: time.Now(), Fields: m},
{Title: "small", Date: time.Now()},
}
l := models.Log{"stuff", e}
f, err := New("plain")
require.NoError(t, err)
out, err := f.Log(l)
require.NoError(t, err)
read := bytes.NewReader(out)
scan := bufio.NewScanner(read)
scan.Scan()
line := scan.Text()
assert.Equal(t, l.Name, line)
scan.Scan()
line = scan.Text()
assert.Equal(t, "#######", line)
scan.Scan()
scan.Scan()
line = scan.Text()
assert.Equal(t, "Title: "+e[0].Title, line)
scan.Scan()
line = scan.Text()
assert.Equal(t, "Date: "+e[0].Date.Format(tools.DateFormat), line)
scan.Scan()
line = scan.Text()
assert.Equal(t, "foo: bar", line)
scan.Scan()
line = scan.Text()
assert.Equal(t, "baz: 42", line)
scan.Scan()
scan.Scan()
line = scan.Text()
assert.Equal(t, "Title: "+e[1].Title, line)
scan.Scan()
line = scan.Text()
assert.Equal(t, "Date: "+e[1].Date.Format(tools.DateFormat), line)
more := scan.Scan()
assert.False(t, more)
}
func TestPlainName(t *testing.T) {
f, _ := New("plain")
assert.Equal(t, "plain", f.Name())
}
func TestPlainLogNoEntries(t *testing.T) {
f, _ := New("plain")
out, err := f.Log(models.Log{Name: "foo"})
assert.NoError(t, err)
assert.Len(t, out, 0)
}
func TestPlainMetaEmpty(t *testing.T) {
f, _ := New("plain")
out, err := f.Meta(models.Meta{"foo", ""})
assert.NoError(t, err)
assert.Len(t, out, 0)
}
func TestPlainMetaError(t *testing.T) {
f, _ := New("plain")
out, err := f.Meta(models.Meta{"foo", make(chan bool)})
assert.Error(t, err)
assert.Len(t, out, 0)
}
func TestPlainEntry(t *testing.T) {
f, _ := New("plain")
now := time.Now()
out, err := f.Entry(models.Entry{
Title: "foo",
Date: now,
})
assert.NoError(t, err)
assert.Equal(t, fmt.Sprintf("Title: foo\nDate: %s", now.Format(tools.DateFormat)), string(out))
}