...
1
2
3
4
5
6
7
8
9
10
11
12
13 package mockdb
14
15 import (
16 "bytes"
17 "encoding/json"
18 "io/ioutil"
19 "testing"
20
21 "github.com/go-kivik/kivik/v4/driver"
22 )
23
24
25 func DocumentT(t *testing.T, i interface{}) *driver.Document {
26 t.Helper()
27 doc, err := Document(i)
28 if err != nil {
29 t.Fatal(err)
30 }
31 return doc
32 }
33
34
35
36
37
38
39
40
41
42
43 func Document(i interface{}) (*driver.Document, error) {
44 buf, err := toJSON(i)
45 if err != nil {
46 return nil, err
47 }
48 var meta struct {
49 Rev string `json:"_rev"`
50 }
51 if err := json.Unmarshal(buf, &meta); err != nil {
52 return nil, err
53 }
54 return &driver.Document{
55 Rev: meta.Rev,
56 Body: ioutil.NopCloser(bytes.NewReader(buf)),
57 Attachments: nil,
58 }, nil
59 }
60
61 func toJSON(i interface{}) ([]byte, error) {
62 switch t := i.(type) {
63 case string:
64 return []byte(t), nil
65 case []byte:
66 return t, nil
67 case json.RawMessage:
68 return t, nil
69 }
70 buf := &bytes.Buffer{}
71 err := json.NewEncoder(buf).Encode(i)
72 return buf.Bytes(), err
73 }
74
View as plain text