(t *testing.T)
| 3391 | } |
| 3392 | |
| 3393 | func TestDocCRUDWithCV(t *testing.T) { |
| 3394 | rt := NewRestTester(t, nil) |
| 3395 | defer rt.Close() |
| 3396 | |
| 3397 | const docID = "doc1" |
| 3398 | createVersion := rt.PutDoc(docID, `{"create":true}`) |
| 3399 | |
| 3400 | getDocVersion, _ := rt.GetDoc(docID) |
| 3401 | require.Equal(t, createVersion, getDocVersion) |
| 3402 | |
| 3403 | revIDGen := func(v DocVersion) int { |
| 3404 | gen, _ := db.ParseRevID(base.TestCtx(t), v.RevTreeID) |
| 3405 | return gen |
| 3406 | } |
| 3407 | |
| 3408 | updateVersion := rt.UpdateDoc(docID, createVersion, `{"update":true}`) |
| 3409 | require.NotEqual(t, createVersion, updateVersion) |
| 3410 | assert.Greaterf(t, updateVersion.CV.Value, createVersion.CV.Value, "Expected CV Value to be bumped on update") |
| 3411 | assert.Greaterf(t, revIDGen(updateVersion), revIDGen(createVersion), "Expected revision generation to be bumped on update") |
| 3412 | |
| 3413 | getDocVersion, _ = rt.GetDoc(docID) |
| 3414 | require.Equal(t, updateVersion, getDocVersion) |
| 3415 | |
| 3416 | // fetch by CV (using the first create version to test cache retrieval) |
| 3417 | resp := rt.SendAdminRequest(http.MethodGet, fmt.Sprintf("/{{.keyspace}}/%s?rev=%s", docID, url.QueryEscape(createVersion.CV.String())), "") |
| 3418 | RequireStatus(t, resp, http.StatusOK) |
| 3419 | assert.NotContains(t, resp.BodyString(), `"update":true`) |
| 3420 | assert.Contains(t, resp.BodyString(), `"create":true`) |
| 3421 | assert.Contains(t, resp.BodyString(), `"_cv":"`+createVersion.CV.String()+`"`) |
| 3422 | assert.Contains(t, resp.BodyString(), `"_rev":"`+createVersion.RevTreeID+`"`) |
| 3423 | |
| 3424 | // fetch by CV - updated version |
| 3425 | resp = rt.SendAdminRequest(http.MethodGet, fmt.Sprintf("/{{.keyspace}}/%s?rev=%s", docID, url.QueryEscape(updateVersion.CV.String())), "") |
| 3426 | RequireStatus(t, resp, http.StatusOK) |
| 3427 | assert.NotContains(t, resp.BodyString(), `"create":true`) |
| 3428 | assert.Contains(t, resp.BodyString(), `"update":true`) |
| 3429 | assert.Contains(t, resp.BodyString(), `"_cv":"`+updateVersion.CV.String()+`"`) |
| 3430 | assert.Contains(t, resp.BodyString(), `"_rev":"`+updateVersion.RevTreeID+`"`) |
| 3431 | |
| 3432 | deleteVersion := rt.DeleteDoc(docID, updateVersion) |
| 3433 | require.NotEqual(t, updateVersion, deleteVersion) |
| 3434 | assert.Greaterf(t, deleteVersion.CV.Value, updateVersion.CV.Value, "Expected CV Value to be bumped on delete") |
| 3435 | assert.Greaterf(t, revIDGen(deleteVersion), revIDGen(updateVersion), "Expected revision generation to be bumped on delete") |
| 3436 | } |
| 3437 | |
| 3438 | func TestFetchBackupWhenOppositeRevIsDeleted(t *testing.T) { |
| 3439 | rt := NewRestTester(t, &RestTesterConfig{ |
nothing calls this directly
no test coverage detected