🧪 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
|
return ch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e Entry) MarshalJSON() ([]byte, error) {
|
||||||
|
return []byte(`{}`), nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import (
|
||||||
// Type assertions
|
// Type assertions
|
||||||
var _ encoding.TextMarshaler = Entry{}
|
var _ encoding.TextMarshaler = Entry{}
|
||||||
var _ encoding.TextUnmarshaler = new(Entry)
|
var _ encoding.TextUnmarshaler = new(Entry)
|
||||||
|
var _ json.Marshaler = Entry{}
|
||||||
|
|
||||||
func TestEntryMarshal(t *testing.T) {
|
func TestEntryMarshal(t *testing.T) {
|
||||||
when := time.Now()
|
when := time.Now()
|
||||||
|
|
@ -187,3 +188,44 @@ func TestScan(t *testing.T) {
|
||||||
assert.Equal(t, "@bar 42@nobody", scan.Text())
|
assert.Equal(t, "@bar 42@nobody", scan.Text())
|
||||||
assert.False(t, scan.Scan())
|
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