🧪 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