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