MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestBulkGetWithCV

Function TestBulkGetWithCV

rest/doc_api_test.go:230–318  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

228}
229
230func TestBulkGetWithCV(t *testing.T) {
231 rt := NewRestTesterPersistentConfig(t)
232 defer rt.Close()
233
234 doc1ID := "doc1"
235 doc1Version := rt.PutDoc(doc1ID, `{"foo": "bar"}`)
236 doc1Version = rt.UpdateDoc(doc1ID, doc1Version, `{"foo": "bar", "updates": 1}`)
237 doc1Version = rt.UpdateDoc(doc1ID, doc1Version, `{"foo": "bar", "updated": 2}`)
238 doc1Version = rt.UpdateDoc(doc1ID, doc1Version, `{"foo": "bar", "updated": 3}`)
239 doc1RevTreeGen, _ := db.ParseRevID(base.TestCtx(t), doc1Version.RevTreeID)
240 doc1Raw := rt.GetRawDoc(doc1ID)
241 // build newest to oldest list of revtree digests (required for validating _revisions response)
242 var doc1HistoryDigests = make([]string, 0, doc1RevTreeGen)
243 for _, v := range slices.Backward(slices.Sorted(maps.Keys(doc1Raw.Xattrs.Sync.History))) {
244 _, digest := db.ParseRevID(base.TestCtx(t), v)
245 doc1HistoryDigests = append(doc1HistoryDigests, digest)
246 }
247
248 doc2ID := "doc2"
249 doc2Version := rt.PutDoc(doc2ID, `{"foo": "baz"}`)
250 doc2RevTreeGen, doc2RevTreeDigest := db.ParseRevID(base.TestCtx(t), doc2Version.RevTreeID)
251
252 testCases := []struct {
253 name string
254 url string
255 showRevs bool
256 input string
257 output []string
258 }{
259 {
260 name: "get multipart",
261 url: "/{{.keyspace}}/_bulk_get",
262 input: fmt.Sprintf(`{"docs":[{"id":"%s"},{"id":"%s"}]}`, doc1ID, doc2ID),
263 output: []string{
264 fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar","updated":3}`, doc1ID, doc1Version.RevTreeID, doc1Version.CV.String()),
265 fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"baz"}`, doc2ID, doc2Version.RevTreeID, doc2Version.CV.String()),
266 },
267 },
268 {
269 name: "get by rev",
270 url: "/{{.keyspace}}/_bulk_get",
271 input: fmt.Sprintf(`{"docs":[{"id":"%s","rev":"%s"},{"id":"%s","rev":"%s"}]}`, doc1ID, doc1Version.RevTreeID, doc2ID, doc2Version.RevTreeID),
272 output: []string{
273 fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar","updated":3}`, doc1ID, doc1Version.RevTreeID, doc1Version.CV.String()),
274 fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"baz"}`, doc2ID, doc2Version.RevTreeID, doc2Version.CV.String()),
275 },
276 },
277 {
278 name: "get by cv",
279 url: "/{{.keyspace}}/_bulk_get",
280 input: fmt.Sprintf(`{"docs":[{"id":"%s","rev":"%s"},{"id":"%s","rev":"%s"}]}`, doc1ID, doc1Version.CV.String(), doc2ID, doc2Version.CV.String()),
281 output: []string{
282 fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar","updated":3}`, doc1ID, doc1Version.RevTreeID, doc1Version.CV.String()),
283 fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"baz"}`, doc2ID, doc2Version.RevTreeID, doc2Version.CV.String()),
284 },
285 },
286 {
287 name: "get by cv show_revs",

Callers

nothing calls this directly

Calls 13

ParseRevIDFunction · 0.92
TestCtxFunction · 0.92
RequireStatusFunction · 0.85
readMultiPartBodyFunction · 0.85
PutDocMethod · 0.80
UpdateDocMethod · 0.80
SendAdminRequestMethod · 0.80
CloseMethod · 0.65
StringMethod · 0.65
RunMethod · 0.65
LenMethod · 0.65

Tested by

no test coverage detected