public void TestLocalDocs() { //create a document var documentProperties = new Dictionary <string, object>(); documentProperties["_id"] = "_local/doc1"; documentProperties["foo"] = 1; documentProperties["bar"] = false; var body = new Body(documentProperties); var rev1 = new RevisionInternal(body); rev1 = database.PutLocalRevision(rev1, null); Log.V(Tag, "Created " + rev1); Assert.AreEqual("_local/doc1", rev1.GetDocId()); Assert.IsTrue(rev1.GetRevId().StartsWith("1-")); //read it back var readRev = database.GetLocalDocument(rev1.GetDocId(), null); Assert.IsNotNull(readRev); var readRevProps = readRev.GetProperties(); Assert.AreEqual(rev1.GetDocId(), readRevProps.Get("_id")); Assert.AreEqual(rev1.GetRevId(), readRevProps.Get("_rev")); AssertPropertiesAreEqual(UserProperties(readRevProps), UserProperties(body.GetProperties())); //now update it documentProperties = (Dictionary <string, object>)readRev.GetProperties(); documentProperties["status"] = "updated!"; body = new Body(documentProperties); var rev2 = new RevisionInternal(body); var rev2input = rev2; rev2 = database.PutLocalRevision(rev2, rev1.GetRevId()); Log.V(Tag, "Updated " + rev1); Assert.AreEqual(rev1.GetDocId(), rev2.GetDocId()); Assert.IsTrue(rev2.GetRevId().StartsWith("2-")); //read it back readRev = database.GetLocalDocument(rev2.GetDocId(), null); Assert.IsNotNull(readRev); AssertPropertiesAreEqual(UserProperties(readRev.GetProperties()), UserProperties(body.GetProperties())); // Try to update the first rev, which should fail: var gotException = false; try { database.PutLocalRevision(rev2input, rev1.GetRevId()); } catch (CouchbaseLiteException e) { Assert.AreEqual(StatusCode.Conflict, e.GetCBLStatus().GetCode()); gotException = true; } Assert.IsTrue(gotException); // Delete it: var revD = new RevisionInternal(rev2.GetDocId(), null, true); gotException = false; try { var revResult = database.PutLocalRevision(revD, null); Assert.IsNull(revResult); } catch (CouchbaseLiteException e) { Assert.AreEqual(StatusCode.Conflict, e.GetCBLStatus().GetCode()); gotException = true; } Assert.IsTrue(gotException); revD = database.PutLocalRevision(revD, rev2.GetRevId()); // Delete nonexistent doc: gotException = false; var revFake = new RevisionInternal("_local/fake", null, true); try { database.PutLocalRevision(revFake, null); } catch (CouchbaseLiteException e) { Assert.AreEqual(StatusCode.NotFound, e.GetCBLStatus().GetCode()); gotException = true; } Assert.IsTrue(gotException); // Read it back (should fail): readRev = database.GetLocalDocument(revD.GetDocId(), null); Assert.IsNull(readRev); }
public void TestCRUDOperations() { database.Changed += (sender, e) => { var changes = e.Changes.ToList(); foreach (DocumentChange change in changes) { var rev = change.AddedRevision; Assert.IsNotNull(rev); Assert.IsNotNull(rev.DocID); Assert.IsNotNull(rev.RevID); Assert.AreEqual(rev.DocID, rev.GetProperties()["_id"]); Assert.AreEqual(rev.RevID, rev.GetProperties()["_rev"]); } }; var privateUUID = database.PrivateUUID(); var publicUUID = database.PublicUUID(); Console.WriteLine("DB private UUID = '{0}', public UUID = '{1}'", privateUUID, publicUUID); Assert.IsTrue(privateUUID.Length >= 20); Assert.IsTrue(publicUUID.Length >= 20); //create a document var documentProperties = new Dictionary <string, object>(); documentProperties["foo"] = 1; documentProperties["bar"] = false; documentProperties["baz"] = "touch"; var body = new Body(documentProperties); var rev1 = new RevisionInternal(body); rev1 = database.PutRevision(rev1, null, false); Console.WriteLine("Created {0}", rev1); Assert.IsTrue(rev1.DocID.Length >= 10); Assert.IsTrue(rev1.RevID.StartsWith("1-")); //read it back var readRev = database.GetDocument(rev1.DocID, null, true); Assert.IsNotNull(readRev); var userReadRevProps = UserProperties(readRev.GetProperties()); var userBodyProps = UserProperties(body.GetProperties()); Assert.AreEqual(userReadRevProps.Count, userBodyProps.Count); foreach (var key in userReadRevProps.Keys) { Assert.AreEqual(userReadRevProps[key], userBodyProps[key]); } //now update it documentProperties = (Dictionary <string, object>)readRev.GetProperties(); documentProperties["status"] = "updated!"; body = new Body(documentProperties); var rev2 = new RevisionInternal(body); var rev2input = rev2; rev2 = database.PutRevision(rev2, rev1.RevID, false); Console.WriteLine("Updated {0}", rev1); Assert.AreEqual(rev1.DocID, rev2.DocID); Assert.IsTrue(rev2.RevID.StartsWith("2-")); //read it back readRev = database.GetDocument(rev2.DocID, null, true); Assert.IsNotNull(readRev); Assert.AreEqual(UserProperties(readRev.GetProperties()), UserProperties (body.GetProperties())); // Try to update the first rev, which should fail: var ex = Assert.Throws <CouchbaseLiteException>(() => database.PutRevision(rev2input, rev1.RevID, false)); Assert.AreEqual(StatusCode.Conflict, ex.Code); // Check the changes feed, with and without filters: var changeRevisions = database.ChangesSince(0, ChangesOptions.Default, null, null); Console.WriteLine("Changes = {0}", changeRevisions); Assert.AreEqual(1, changeRevisions.Count); changeRevisions = database.ChangesSince(0, ChangesOptions.Default, (revision, items) => "updated!".Equals(revision.Properties.Get("status")), null); Assert.AreEqual(1, changeRevisions.Count); changeRevisions = database.ChangesSince(0, ChangesOptions.Default, (revision, items) => "not updated!".Equals(revision.Properties.Get("status")), null); Assert.AreEqual(0, changeRevisions.Count); // Delete it: var revD = new RevisionInternal(rev2.DocID, null, true); ex = Assert.Throws <CouchbaseLiteException>(() => database.PutRevision(revD, null, false)); Assert.AreEqual(StatusCode.Conflict, ex.Code); revD = database.PutRevision(revD, rev2.RevID, false); Assert.AreEqual(revD.DocID, rev2.DocID); Assert.IsTrue(revD.RevID.StartsWith("3-")); // Delete nonexistent doc: var revFake = new RevisionInternal("fake", null, true); ex = Assert.Throws <CouchbaseLiteException>(() => database.PutRevision(revFake, null, false)); Assert.AreEqual(StatusCode.NotFound, ex.Code); // Read it back (should fail): readRev = database.GetDocument(revD.DocID, null, true); Assert.IsNull(readRev); // Get Changes feed: changeRevisions = database.ChangesSince(0, ChangesOptions.Default, null, null); Assert.IsTrue(changeRevisions.Count == 1); // Get Revision History: IList <RevisionInternal> history = database.Storage.GetRevisionHistory(revD, null); Assert.AreEqual(revD, history[0]); Assert.AreEqual(rev2, history[1]); Assert.AreEqual(rev1, history[2]); }
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception> public virtual void TestLocalDocs() { //create a document IDictionary <string, object> documentProperties = new Dictionary <string, object>(); documentProperties.Put("_id", "_local/doc1"); documentProperties.Put("foo", 1); documentProperties.Put("bar", false); Body body = new Body(documentProperties); RevisionInternal rev1 = new RevisionInternal(body, database); Status status = new Status(); rev1 = database.PutLocalRevision(rev1, null); Log.V(Tag, "Created " + rev1); NUnit.Framework.Assert.AreEqual("_local/doc1", rev1.GetDocId()); NUnit.Framework.Assert.IsTrue(rev1.GetRevId().StartsWith("1-")); //read it back RevisionInternal readRev = database.GetLocalDocument(rev1.GetDocId(), null); NUnit.Framework.Assert.IsNotNull(readRev); IDictionary <string, object> readRevProps = readRev.GetProperties(); NUnit.Framework.Assert.AreEqual(rev1.GetDocId(), readRev.GetProperties().Get("_id" )); NUnit.Framework.Assert.AreEqual(rev1.GetRevId(), readRev.GetProperties().Get("_rev" )); NUnit.Framework.Assert.AreEqual(UserProperties(readRevProps), UserProperties(body .GetProperties())); //now update it documentProperties = readRev.GetProperties(); documentProperties.Put("status", "updated!"); body = new Body(documentProperties); RevisionInternal rev2 = new RevisionInternal(body, database); RevisionInternal rev2input = rev2; rev2 = database.PutLocalRevision(rev2, rev1.GetRevId()); Log.V(Tag, "Updated " + rev1); NUnit.Framework.Assert.AreEqual(rev1.GetDocId(), rev2.GetDocId()); NUnit.Framework.Assert.IsTrue(rev2.GetRevId().StartsWith("2-")); //read it back readRev = database.GetLocalDocument(rev2.GetDocId(), null); NUnit.Framework.Assert.IsNotNull(readRev); NUnit.Framework.Assert.AreEqual(UserProperties(readRev.GetProperties()), UserProperties (body.GetProperties())); // Try to update the first rev, which should fail: bool gotException = false; try { database.PutLocalRevision(rev2input, rev1.GetRevId()); } catch (CouchbaseLiteException e) { NUnit.Framework.Assert.AreEqual(Status.Conflict, e.GetCBLStatus().GetCode()); gotException = true; } NUnit.Framework.Assert.IsTrue(gotException); // Delete it: RevisionInternal revD = new RevisionInternal(rev2.GetDocId(), null, true, database ); gotException = false; try { RevisionInternal revResult = database.PutLocalRevision(revD, null); NUnit.Framework.Assert.IsNull(revResult); } catch (CouchbaseLiteException e) { NUnit.Framework.Assert.AreEqual(Status.Conflict, e.GetCBLStatus().GetCode()); gotException = true; } NUnit.Framework.Assert.IsTrue(gotException); revD = database.PutLocalRevision(revD, rev2.GetRevId()); // Delete nonexistent doc: gotException = false; RevisionInternal revFake = new RevisionInternal("_local/fake", null, true, database ); try { database.PutLocalRevision(revFake, null); } catch (CouchbaseLiteException e) { NUnit.Framework.Assert.AreEqual(Status.NotFound, e.GetCBLStatus().GetCode()); gotException = true; } NUnit.Framework.Assert.IsTrue(gotException); // Read it back (should fail): readRev = database.GetLocalDocument(revD.GetDocId(), null); NUnit.Framework.Assert.IsNull(readRev); }
public void TestCRUDOperations() { database.Changed += (sender, e) => { var changes = e.Changes.ToList(); foreach (DocumentChange change in changes) { var rev = change.AddedRevision; Assert.IsNotNull(rev); Assert.IsNotNull(rev.GetDocId()); Assert.IsNotNull(rev.GetRevId()); Assert.AreEqual(rev.GetDocId(), rev.GetProperties()["_id"]); Assert.AreEqual(rev.GetRevId(), rev.GetProperties()["_rev"]); } }; var privateUUID = database.PrivateUUID(); var publicUUID = database.PublicUUID(); Log.V(Tag, "DB private UUID = '" + privateUUID + "', public UUID = '" + publicUUID + "'"); Assert.IsTrue(privateUUID.Length >= 20); Assert.IsTrue(publicUUID.Length >= 20); //create a document var documentProperties = new Dictionary <string, object>(); documentProperties["foo"] = 1; documentProperties["bar"] = false; documentProperties["baz"] = "touch"; var body = new Body(documentProperties); var rev1 = new RevisionInternal(body); var status = new Status(); rev1 = database.PutRevision(rev1, null, false, status); Log.V(Tag, "Created " + rev1); Assert.IsTrue(rev1.GetDocId().Length >= 10); Assert.IsTrue(rev1.GetRevId().StartsWith("1-")); //read it back var readRev = database.GetDocument(rev1.GetDocId(), null, true); Assert.IsNotNull(readRev); var userReadRevProps = UserProperties(readRev.GetProperties()); var userBodyProps = UserProperties(body.GetProperties()); Assert.AreEqual(userReadRevProps.Count, userBodyProps.Count); foreach (var key in userReadRevProps.Keys) { Assert.AreEqual(userReadRevProps[key], userBodyProps[key]); } //now update it documentProperties = (Dictionary <string, object>)readRev.GetProperties(); documentProperties["status"] = "updated!"; body = new Body(documentProperties); var rev2 = new RevisionInternal(body); var rev2input = rev2; rev2 = database.PutRevision(rev2, rev1.GetRevId(), false, status); Log.V(Tag, "Updated " + rev1); Assert.AreEqual(rev1.GetDocId(), rev2.GetDocId()); Assert.IsTrue(rev2.GetRevId().StartsWith("2-")); //read it back readRev = database.GetDocument(rev2.GetDocId(), null, true); Assert.IsNotNull(readRev); Assert.AreEqual(UserProperties(readRev.GetProperties()), UserProperties (body.GetProperties())); // Try to update the first rev, which should fail: database.PutRevision(rev2input, rev1.GetRevId(), false, status); Assert.AreEqual(StatusCode.Conflict, status.Code); // Check the changes feed, with and without filters: var changeRevisions = database.ChangesSince(0, null, null, null); Log.V(Tag, "Changes = " + changeRevisions); Assert.AreEqual(1, changeRevisions.Count); changeRevisions = database.ChangesSince(0, null, (revision, items) => "updated!".Equals(revision.Properties.Get("status")), null); Assert.AreEqual(1, changeRevisions.Count); changeRevisions = database.ChangesSince(0, null, (revision, items) => "not updated!".Equals(revision.Properties.Get("status")), null); Assert.AreEqual(0, changeRevisions.Count); // Delete it: var revD = new RevisionInternal(rev2.GetDocId(), null, true); RevisionInternal revResult = null; revResult = database.PutRevision(revD, null, false, status); Assert.AreEqual(StatusCode.Conflict, status.Code); Assert.IsNull(revResult); revD = database.PutRevision(revD, rev2.GetRevId(), false, status); Assert.AreEqual(StatusCode.Ok, status.Code); Assert.AreEqual(revD.GetDocId(), rev2.GetDocId()); Assert.IsTrue(revD.GetRevId().StartsWith("3-")); // Delete nonexistent doc: var revFake = new RevisionInternal("fake", null, true); database.PutRevision(revFake, null, false, status); Assert.AreEqual(StatusCode.NotFound, status.Code); // Read it back (should fail): readRev = database.GetDocument(revD.GetDocId(), null, true); Assert.IsNull(readRev); // Get Changes feed: changeRevisions = database.ChangesSince(0, null, null, null); Assert.IsTrue(changeRevisions.Count == 1); // Get Revision History: IList <RevisionInternal> history = database.Storage.GetRevisionHistory(revD, null); Assert.AreEqual(revD, history[0]); Assert.AreEqual(rev2, history[1]); Assert.AreEqual(rev1, history[2]); }
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception> public virtual void TestCRUDOperations() { database.AddChangeListener(this); string privateUUID = database.PrivateUUID(); string publicUUID = database.PublicUUID(); Log.V(Tag, "DB private UUID = '" + privateUUID + "', public UUID = '" + publicUUID + "'"); NUnit.Framework.Assert.IsTrue(privateUUID.Length >= 20); NUnit.Framework.Assert.IsTrue(publicUUID.Length >= 20); //create a document IDictionary <string, object> documentProperties = new Dictionary <string, object>(); documentProperties.Put("foo", 1); documentProperties.Put("bar", false); documentProperties.Put("baz", "touch"); Body body = new Body(documentProperties); RevisionInternal rev1 = new RevisionInternal(body, database); Status status = new Status(); rev1 = database.PutRevision(rev1, null, false, status); Log.V(Tag, "Created " + rev1); NUnit.Framework.Assert.IsTrue(rev1.GetDocId().Length >= 10); NUnit.Framework.Assert.IsTrue(rev1.GetRevId().StartsWith("1-")); //read it back RevisionInternal readRev = database.GetDocumentWithIDAndRev(rev1.GetDocId(), null , EnumSet.NoneOf <Database.TDContentOptions>()); NUnit.Framework.Assert.IsNotNull(readRev); IDictionary <string, object> readRevProps = readRev.GetProperties(); NUnit.Framework.Assert.AreEqual(UserProperties(readRevProps), UserProperties(body .GetProperties())); //now update it documentProperties = readRev.GetProperties(); documentProperties.Put("status", "updated!"); body = new Body(documentProperties); RevisionInternal rev2 = new RevisionInternal(body, database); RevisionInternal rev2input = rev2; rev2 = database.PutRevision(rev2, rev1.GetRevId(), false, status); Log.V(Tag, "Updated " + rev1); NUnit.Framework.Assert.AreEqual(rev1.GetDocId(), rev2.GetDocId()); NUnit.Framework.Assert.IsTrue(rev2.GetRevId().StartsWith("2-")); //read it back readRev = database.GetDocumentWithIDAndRev(rev2.GetDocId(), null, EnumSet.NoneOf < Database.TDContentOptions>()); NUnit.Framework.Assert.IsNotNull(readRev); NUnit.Framework.Assert.AreEqual(UserProperties(readRev.GetProperties()), UserProperties (body.GetProperties())); // Try to update the first rev, which should fail: bool gotExpectedError = false; try { database.PutRevision(rev2input, rev1.GetRevId(), false, status); } catch (CouchbaseLiteException e) { gotExpectedError = e.GetCBLStatus().GetCode() == Status.Conflict; } NUnit.Framework.Assert.IsTrue(gotExpectedError); // Check the changes feed, with and without filters: RevisionList changes = database.ChangesSince(0, null, null); Log.V(Tag, "Changes = " + changes); NUnit.Framework.Assert.AreEqual(1, changes.Count); changes = database.ChangesSince(0, null, new _ReplicationFilter_95()); NUnit.Framework.Assert.AreEqual(1, changes.Count); changes = database.ChangesSince(0, null, new _ReplicationFilter_105()); NUnit.Framework.Assert.AreEqual(0, changes.Count); // Delete it: RevisionInternal revD = new RevisionInternal(rev2.GetDocId(), null, true, database ); RevisionInternal revResult = null; gotExpectedError = false; try { revResult = database.PutRevision(revD, null, false, status); } catch (CouchbaseLiteException e) { gotExpectedError = e.GetCBLStatus().GetCode() == Status.Conflict; } NUnit.Framework.Assert.IsTrue(gotExpectedError); NUnit.Framework.Assert.IsNull(revResult); revD = database.PutRevision(revD, rev2.GetRevId(), false, status); NUnit.Framework.Assert.AreEqual(Status.Ok, status.GetCode()); NUnit.Framework.Assert.AreEqual(revD.GetDocId(), rev2.GetDocId()); NUnit.Framework.Assert.IsTrue(revD.GetRevId().StartsWith("3-")); // Delete nonexistent doc: RevisionInternal revFake = new RevisionInternal("fake", null, true, database); gotExpectedError = false; try { database.PutRevision(revFake, null, false, status); } catch (CouchbaseLiteException e) { gotExpectedError = e.GetCBLStatus().GetCode() == Status.NotFound; } NUnit.Framework.Assert.IsTrue(gotExpectedError); // Read it back (should fail): readRev = database.GetDocumentWithIDAndRev(revD.GetDocId(), null, EnumSet.NoneOf < Database.TDContentOptions>()); NUnit.Framework.Assert.IsNull(readRev); // Get Changes feed changes = database.ChangesSince(0, null, null); NUnit.Framework.Assert.IsTrue(changes.Count == 1); // Get Revision History IList <RevisionInternal> history = database.GetRevisionHistory(revD); NUnit.Framework.Assert.AreEqual(revD, history[0]); NUnit.Framework.Assert.AreEqual(rev2, history[1]); NUnit.Framework.Assert.AreEqual(rev1, history[2]); }