Entry implements json.Unmarshaler

This commit is contained in:
Dan Jones 2024-01-29 22:07:18 -06:00
commit 0da5efcafe
2 changed files with 53 additions and 6 deletions

View file

@ -233,7 +233,7 @@ func getEntryJsonMarshalTestRunner(title string, date time.Time, fields []Meta,
}
func TestEntryJsonUnmarshal(t *testing.T) {
when := time.Now()
when := time.Now().Truncate(time.Second)
whens := when.Format(time.RFC3339)
simple := []Meta{}
tests := []struct {
@ -250,6 +250,7 @@ func TestEntryJsonUnmarshal(t *testing.T) {
{"empty-title", `{"title":"","date":"` + whens + `"}`, "", when, simple, ErrorMissingTitle},
{"empty-date", `{"title":"A Title","date":""}`, "", when, simple, ErrorMissingDate},
{"bad-date", `{"title":"A Title","date":"bad"}`, "", when, simple, ErrorParsing},
{"bad-json", `{"title":"A Title","date":"`, "", when, simple, ErrorParsing},
{
"single-field",
`{"title":"A Title","date":"` + whens + `","hello":"Hi"}`,
@ -260,10 +261,10 @@ func TestEntryJsonUnmarshal(t *testing.T) {
},
{
"many-fields",
`{"title":"A Title","date":"` + whens + `","hello":"Hi","bye":42,"b":true}`,
`{"title":"A Title","date":"` + whens + `","hello":"Hi","bye":42,"b":true,"fl":42.13}`,
"A Title",
when,
[]Meta{{"hello", "Hi"}, {"bye", 42}, {"b", true}},
[]Meta{{"hello", "Hi"}, {"bye", int64(42)}, {"b", true}, {"fl", float64(42.13)}},
nil,
},
{
@ -284,14 +285,16 @@ func TestEntryJsonUnmarshal(t *testing.T) {
func getEntryJsonUnmarshalTestRunner(in, title string, date time.Time, fields []Meta, err error) func(t *testing.T) {
return func(t *testing.T) {
e := new(Entry)
er := json.Unmarshal([]byte(in), e)
er := e.UnmarshalJSON([]byte(in))
if err != nil {
assert.ErrorIs(t, er, err)
return
}
assert.Nil(t, er)
assert.Equal(t, title, e.Title)
assert.WithinRange(t, e.Date, date.Add(-time.Second), date.Add(time.Second))
assert.Len(t, e.Fields, len(fields))
for _, f := range fields {
got := false
for _, m := range e.Fields {
@ -308,7 +311,7 @@ func getEntryJsonUnmarshalTestRunner(in, title string, date time.Time, fields []
break
}
}
assert.Truef(t, got, "Couldn't find field %+v", f)
assert.Truef(t, got, "Couldn't find field %+v. We have %+v", f, e.Fields)
}
}
}