🧪 Test json.Marshaler implementation for Entry

This commit is contained in:
Dan Jones 2024-01-28 19:23:51 -06:00
commit 7e1c51d698
2 changed files with 46 additions and 0 deletions

View file

@ -155,3 +155,7 @@ func (e *Entry) getFieldUnarshalChan(in []byte) chan Meta {
}()
return ch
}
func (e Entry) MarshalJSON() ([]byte, error) {
return []byte(`{}`), nil
}

View file

@ -14,6 +14,7 @@ import (
// Type assertions
var _ encoding.TextMarshaler = Entry{}
var _ encoding.TextUnmarshaler = new(Entry)
var _ json.Marshaler = Entry{}
func TestEntryMarshal(t *testing.T) {
when := time.Now()
@ -187,3 +188,44 @@ func TestScan(t *testing.T) {
assert.Equal(t, "@bar 42@nobody", scan.Text())
assert.False(t, scan.Scan())
}
func TestEntryJsonMarshal(t *testing.T) {
when := time.Now()
whens := when.Format(DateFormat)
simple := []Meta{}
tests := []struct {
name string
title string
date time.Time
fields []Meta
out string
err error
}{
{"simple", "A Title", when, simple, `{"title":"A Title","date":"` + whens + `"}`, nil},
{"one-field", "A Title 2", when, []Meta{{"age", 41}}, `{"title":"A Title 2","date":"` + whens + `","age":41}`, nil},
{"skip-title-field", "A Title", when, []Meta{{"title", "Different title"}}, `{"title":"A Title","date":"` + whens + `"}`, nil},
{"skip-date-field", "A Title", when, []Meta{{"date", when.Add(time.Hour)}}, `{"title":"A Title","date":"` + whens + `"}`, nil},
{"skip-dupe-field", "A Title", when, []Meta{{"foo", "bar"}, {"foo", "baz"}}, `{"title":"A Title","date":"` + whens + `","foo": "bar"}`, nil},
{"two-fields", "A Title", when, []Meta{{"foo", "bar"}, {"baz", 42}}, `{"title":"A Title","date":"` + whens + `","foo": "bar","baz":42}`, nil},
{"empty-title", "", when, simple, "", ErrorMissingTitle},
{"empty-date", "A Title", time.Time{}, simple, "", ErrorMissingDate},
{"obj-field", "A Title", when, []Meta{{"obj", json.RawMessage(`{"foo":"bar","title":"Sub-title"}`)}}, `{"title":"A Title","date":"` + whens + `","obj":{"foo":"bar","title":"Sub-title"}}`, nil},
}
for _, tt := range tests {
t.Run(tt.name, getEntryJsonMarshalTestRunner(tt.title, tt.date, tt.fields, tt.out, tt.err))
}
}
func getEntryJsonMarshalTestRunner(title string, date time.Time, fields []Meta, out string, err error) func(t *testing.T) {
return func(t *testing.T) {
e := Entry{title, date, fields}
o, er := json.Marshal(e)
if err == nil {
assert.JSONEq(t, out, string(o))
} else {
assert.ErrorIs(t, er, err)
}
}
}