🧪 Test json.Marshaler implementation for Entry
This commit is contained in:
parent
c45acd57c4
commit
7e1c51d698
2 changed files with 46 additions and 0 deletions
|
|
@ -155,3 +155,7 @@ func (e *Entry) getFieldUnarshalChan(in []byte) chan Meta {
|
|||
}()
|
||||
return ch
|
||||
}
|
||||
|
||||
func (e Entry) MarshalJSON() ([]byte, error) {
|
||||
return []byte(`{}`), nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue