package formatters import ( "fmt" "testing" "time" "codeberg.org/danjones000/my-log/internal/testutil/bep" "codeberg.org/danjones000/my-log/models" "github.com/nalgeon/be" ) func TestJsonName(t *testing.T) { f, _ := New("json") be.Equal(t, f.Name(), "json") } func TestJsonMeta(t *testing.T) { f, _ := New("json") m := models.Meta{"foo", 42} exp := `{"foo":42}` o, err := f.Meta(m) be.Err(t, err, nil) bep.JSON(t, o, []byte(exp)) } func TestJsonEntry(t *testing.T) { when := time.Now() f, _ := New("json") m := models.Meta{"foo", 42} e := models.Entry{ Title: "Homer", Date: when, Fields: []models.Meta{m}, } exp := fmt.Sprintf(`{"title":"%s","date":"%s","foo":42}`, e.Title, when.Format(time.RFC3339)) o, err := f.Entry(e) be.Err(t, err, nil) bep.JSON(t, o, []byte(exp)) } func TestJsonLog(t *testing.T) { when := time.Now() f, _ := New("json") m := models.Meta{"foo", 42} e := models.Entry{ Title: "Homer", Date: when, Fields: []models.Meta{m}, } l := models.Log{"stuff", []models.Entry{e}} exp := fmt.Sprintf(`{"%s":[{"title":"%s","date":"%s","foo":42}]}`, l.Name, e.Title, when.Format(time.RFC3339)) o, err := f.Log(l) be.Err(t, err, nil) bep.JSON(t, o, []byte(exp)) } func TestJsonNoLogs(t *testing.T) { f, _ := New("json") o, err := f.Logs([]models.Log{}) var exp []byte be.Err(t, err, nil) be.Equal(t, o, exp) } func TestJsonErr(t *testing.T) { f, _ := New("json") o, err := f.Meta(models.Meta{"foo", make(chan bool)}) var exp []byte be.Err(t, err) be.Equal(t, o, exp) } func TestJsonPretty(t *testing.T) { f := Json{true} o, err := f.Meta(models.Meta{"foo", 42}) exp := `{ "foo": 42 }` be.Err(t, err, nil) be.Equal(t, string(o), exp) }