(t *testing.T)
| 228 | } |
| 229 | |
| 230 | func 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", |
nothing calls this directly
no test coverage detected