// Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. package kivik import ( "encoding/json" "os" "testing" "gitlab.com/flimzy/testy" ) func TestDocumentMarshalJSON(t *testing.T) { tests := testy.NewTable() tests.Add("no attachments", &document{ ID: "foo", Rev: "1-xxx", Data: map[string]interface{}{ "foo": "bar", }, }) tests.Add("attachment", func(t *testing.T) interface{} { f, err := os.Open("testdata/foo.txt") if err != nil { t.Fatal(err) } return &document{ ID: "foo", Rev: "1-xxx", Attachments: &Attachments{ "foo.txt": &Attachment{ ContentType: "text/plain", Content: f, }, }, } }) tests.Run(t, func(t *testing.T, doc *document) { result, err := json.Marshal(doc) if err != nil { t.Fatal(err) } if d := testy.DiffAsJSON(&testy.File{Path: "testdata/" + testy.Stub(t)}, result); d != nil { t.Error(d) } }) } func TestNormalDocUnmarshalJSON(t *testing.T) { tests := testy.NewTable() tests.Add("no extra fields", `{ "_id":"foo" }`) tests.Add("extra fields", `{ "_id":"foo", "foo":"bar" }`) tests.Add("attachment stub", `{ "_id":"foo", "foo":"bar", "_attachments":{ "foo.txt":{ "content_type":"text/plain", "stub":true } } }`) tests.Add("attachment", `{ "_id":"foo", "foo":"bar", "_attachments":{ "foo.txt":{ "content_type":"text/plain", "data":"VGVzdGluZwo=" } } }`) tests.Run(t, func(t *testing.T, in string) { result := new(document) if err := json.Unmarshal([]byte(in), &result); err != nil { t.Fatal(err) } if d := testy.DiffAsJSON(&testy.File{Path: "testdata/" + testy.Stub(t)}, result); d != nil { t.Error(d) } }) }