1package couchdb 2 3import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/flimzy/diff" 8 "github.com/flimzy/testy" 9 10 "github.com/go-kivik/kivik" 11) 12 13func TestDeJSONify(t *testing.T) { 14 tests := []struct { 15 name string 16 input interface{} 17 expected interface{} 18 status int 19 err string 20 }{ 21 { 22 name: "string", 23 input: `{"foo":"bar"}`, 24 expected: map[string]interface{}{"foo": "bar"}, 25 }, 26 { 27 name: "[]byte", 28 input: []byte(`{"foo":"bar"}`), 29 expected: map[string]interface{}{"foo": "bar"}, 30 }, 31 { 32 name: "json.RawMessage", 33 input: json.RawMessage(`{"foo":"bar"}`), 34 expected: map[string]interface{}{"foo": "bar"}, 35 }, 36 { 37 name: "map", 38 input: map[string]string{"foo": "bar"}, 39 expected: map[string]string{"foo": "bar"}, 40 }, 41 { 42 name: "invalid JSON sring", 43 input: `{"foo":"\C"}`, 44 status: kivik.StatusBadRequest, 45 err: "invalid character 'C' in string escape code", 46 }, 47 } 48 for _, test := range tests { 49 t.Run(test.name, func(t *testing.T) { 50 result, err := deJSONify(test.input) 51 testy.StatusError(t, test.err, test.status, err) 52 if d := diff.Interface(test.expected, result); d != nil { 53 t.Error(d) 54 } 55 }) 56 } 57} 58