package formatters import ( "bufio" "bytes" "fmt" "testing" "time" "codeberg.org/danjones000/my-log/models" "codeberg.org/danjones000/my-log/tools" "github.com/nalgeon/be" ) func TestPlainLogs(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} 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") be.Err(t, err, nil) out, err := f.Logs(logs) be.Err(t, err, nil) read := bytes.NewReader(out) scan := bufio.NewScanner(read) scan.Scan() line := scan.Text() be.Equal(t, line, l.Name) scan.Scan() line = scan.Text() be.Equal(t, line, "#######") scan.Scan() scan.Scan() line = scan.Text() be.Equal(t, line, "Title: "+e[0].Title) scan.Scan() line = scan.Text() be.Equal(t, line, "Date: "+e[0].Date.Format(tools.DateFormat)) scan.Scan() line = scan.Text() be.Equal(t, line, "foo: bar") scan.Scan() line = scan.Text() be.Equal(t, line, "baz: 42") scan.Scan() scan.Scan() line = scan.Text() be.Equal(t, line, "Title: "+e[1].Title) scan.Scan() line = scan.Text() be.Equal(t, line, "Date: "+e[1].Date.Format(tools.DateFormat)) scan.Scan() scan.Scan() line = scan.Text() be.Equal(t, line, l2.Name) scan.Scan() line = scan.Text() be.Equal(t, line, "#######") scan.Scan() scan.Scan() line = scan.Text() be.Equal(t, line, "Title: "+e2.Title) scan.Scan() line = scan.Text() be.Equal(t, line, "Date: "+e2.Date.Format(tools.DateFormat)) more := scan.Scan() be.True(t, !more) } func TestPlainName(t *testing.T) { f, _ := New("plain") be.Equal(t, f.Name(), "plain") } func TestPlainLogNone(t *testing.T) { f, _ := New("plain") out, err := f.Logs([]models.Log{}) be.Err(t, err, nil) be.Equal(t, len(out), 0) } func TestPlainLogNoEntries(t *testing.T) { f, _ := New("plain") out, err := f.Log(models.Log{Name: "foo"}) be.Err(t, err, nil) be.Equal(t, len(out), 0) } func TestPlainMetaEmpty(t *testing.T) { f, _ := New("plain") out, err := f.Meta(models.Meta{"foo", ""}) be.Err(t, err, nil) be.Equal(t, len(out), 0) } func TestPlainMetaError(t *testing.T) { f, _ := New("plain") out, err := f.Meta(models.Meta{"foo", make(chan bool)}) be.Err(t, err) be.Equal(t, len(out), 0) } func TestPlainEntry(t *testing.T) { f, _ := New("plain") now := time.Now() out, err := f.Entry(models.Entry{ Title: "foo", Date: now, }) be.Err(t, err, nil) be.Equal(t, string(out), fmt.Sprintf("Title: foo\nDate: %s", now.Format(tools.DateFormat))) }