/// <summary>https://github.com/couchbase/couchbase-lite-java-core/issues/164</summary>
        /// <exception cref="System.Exception"></exception>
        public virtual void TestRevisionIdEquivalentRevisions()
        {
            // two revisions with the same content and the same json
            // should have the exact same revision id, because their content
            // will have an identical hash
            IDictionary <string, object> properties = new Dictionary <string, object>();

            properties.Put("testName", "testCreateRevisions");
            properties.Put("tag", 1337);
            IDictionary <string, object> properties2 = new Dictionary <string, object>();

            properties2.Put("testName", "testCreateRevisions");
            properties2.Put("tag", 1338);
            Document        doc    = database.CreateDocument();
            UnsavedRevision newRev = doc.CreateRevision();

            newRev.SetUserProperties(properties);
            SavedRevision   rev1     = newRev.Save();
            UnsavedRevision newRev2a = rev1.CreateRevision();

            newRev2a.SetUserProperties(properties2);
            SavedRevision   rev2a    = newRev2a.Save();
            UnsavedRevision newRev2b = rev1.CreateRevision();

            newRev2b.SetUserProperties(properties2);
            SavedRevision rev2b = newRev2b.Save(true);

            NUnit.Framework.Assert.AreEqual(rev2a.GetId(), rev2b.GetId());
        }
        /// <exception cref="System.Exception"></exception>
        public virtual void TestWinningRevIDOfDoc()
        {
            IDictionary <string, object> properties = new Dictionary <string, object>();

            properties.Put("testName", "testCreateRevisions");
            properties.Put("tag", 1337);
            IDictionary <string, object> properties2a = new Dictionary <string, object>();

            properties2a.Put("testName", "testCreateRevisions");
            properties2a.Put("tag", 1338);
            IDictionary <string, object> properties2b = new Dictionary <string, object>();

            properties2b.Put("testName", "testCreateRevisions");
            properties2b.Put("tag", 1339);
            IList <bool> outIsDeleted  = new AList <bool>();
            IList <bool> outIsConflict = new AList <bool>();
            // Create a conflict on purpose
            Document        doc     = database.CreateDocument();
            UnsavedRevision newRev1 = doc.CreateRevision();

            newRev1.SetUserProperties(properties);
            SavedRevision rev1         = newRev1.Save();
            long          docNumericId = database.GetDocNumericID(doc.GetId());

            NUnit.Framework.Assert.IsTrue(docNumericId != 0);
            NUnit.Framework.Assert.AreEqual(rev1.GetId(), database.WinningRevIDOfDoc(docNumericId
                                                                                     , outIsDeleted, outIsConflict));
            NUnit.Framework.Assert.IsTrue(outIsConflict.Count == 0);
            outIsDeleted  = new AList <bool>();
            outIsConflict = new AList <bool>();
            UnsavedRevision newRev2a = rev1.CreateRevision();

            newRev2a.SetUserProperties(properties2a);
            SavedRevision rev2a = newRev2a.Save();

            NUnit.Framework.Assert.AreEqual(rev2a.GetId(), database.WinningRevIDOfDoc(docNumericId
                                                                                      , outIsDeleted, outIsConflict));
            NUnit.Framework.Assert.IsTrue(outIsConflict.Count == 0);
            outIsDeleted  = new AList <bool>();
            outIsConflict = new AList <bool>();
            UnsavedRevision newRev2b = rev1.CreateRevision();

            newRev2b.SetUserProperties(properties2b);
            SavedRevision rev2b = newRev2b.Save(true);

            database.WinningRevIDOfDoc(docNumericId, outIsDeleted, outIsConflict);
            NUnit.Framework.Assert.IsTrue(outIsConflict.Count > 0);
        }
Beispiel #3
0
        /// <exception cref="System.Exception"></exception>
        public virtual void TestPruneRevsToMaxDepth()
        {
            IDictionary <string, object> properties = new Dictionary <string, object>();

            properties.Put("testName", "testDatabaseCompaction");
            properties.Put("tag", 1337);
            Document      doc = CreateDocumentWithProperties(database, properties);
            SavedRevision rev = doc.GetCurrentRevision();

            database.SetMaxRevTreeDepth(1);
            for (int i = 0; i < 10; i++)
            {
                IDictionary <string, object> properties2 = new Dictionary <string, object>(properties
                                                                                           );
                properties2.Put("tag", i);
                rev = rev.CreateRevision(properties2);
            }
            int numPruned = database.PruneRevsToMaxDepth(1);

            NUnit.Framework.Assert.AreEqual(9, numPruned);
            Document fetchedDoc             = database.GetDocument(doc.GetId());
            IList <SavedRevision> revisions = fetchedDoc.GetRevisionHistory();

            NUnit.Framework.Assert.AreEqual(1, revisions.Count);
            numPruned = database.PruneRevsToMaxDepth(1);
            NUnit.Framework.Assert.AreEqual(0, numPruned);
        }
        private static SavedRevision CreateRevisionWithRandomProps(SavedRevision parentRev, Boolean allowConflict)
        {
            var properties = new Dictionary <string, object>();

            properties["val"] = Misc.CreateGUID();
            var unsavedRevision = parentRev.CreateRevision();

            unsavedRevision.SetUserProperties(properties);
            return(unsavedRevision.Save(allowConflict));
        }
Beispiel #5
0
        /// <exception cref="System.Exception"></exception>
        public static SavedRevision CreateRevisionWithRandomProps(SavedRevision createRevFrom
                                                                  , bool allowConflict)
        {
            IDictionary <string, object> properties = new Dictionary <string, object>();

            properties.Put(UUID.RandomUUID().ToString(), "val");
            UnsavedRevision unsavedRevision = createRevFrom.CreateRevision();

            unsavedRevision.SetUserProperties(properties);
            return(unsavedRevision.Save(allowConflict));
        }
        /// <exception cref="System.Exception"></exception>
        public static SavedRevision CreateRevisionWithRandomProps(SavedRevision createRevFrom, bool allowConflict)
        {
            var properties = new Dictionary <string, object>();

            properties.Put(Misc.CreateGUID(), "val");

            var unsavedRevision = createRevFrom.CreateRevision();

            unsavedRevision.SetUserProperties(properties);

            return(unsavedRevision.Save(allowConflict));
        }
        /// <exception cref="System.Exception"></exception>
        public static SavedRevision CreateRevisionWithRandomProps(SavedRevision createRevFrom, bool allowConflict)
        {
            var properties = new Dictionary<string, object>();
            properties.Put(Misc.CreateGUID(), "val");

            var unsavedRevision = createRevFrom.CreateRevision();
            unsavedRevision.SetUserProperties(properties);

            return unsavedRevision.Save(allowConflict);
        }
        public void TestCreateRevisions()
        {
            var properties = new Dictionary <String, Object>();

            properties["testName"] = "testCreateRevisions";
            properties["tag"]      = 1337;
            var db = database;

            var doc = CreateDocumentWithProperties(db, properties);

            Assert.IsFalse(doc.Deleted);
            var rev1 = doc.CurrentRevision;

            Assert.IsTrue(rev1.Id.StartsWith("1-"));
            Assert.AreEqual(1, rev1.Sequence);
            Assert.AreEqual(0, rev1.Attachments.Count());

            // Test -createRevisionWithProperties:
            var properties2 = new Dictionary <String, Object>(properties);

            properties2["tag"] = 4567;
            SavedRevision rev2 = null;

            try
            {
                rev2 = rev1.CreateRevision(properties2);
            }
            catch
            {
                Assert.Fail("Couldn't create revision");
            }
            Assert.IsNotNull(rev2, "Put failed");
            Assert.IsTrue(doc.CurrentRevisionId.StartsWith("2-"), "Document revision ID is still " + doc.CurrentRevisionId);
            Assert.AreEqual(rev2.Id, doc.CurrentRevisionId);
            Assert.IsNotNull(rev2.PropertiesAvailable);
            Assert.AreEqual(rev2.UserProperties, properties2);
            Assert.AreEqual(rev2.Document, doc);
            Assert.AreEqual(rev2.GetProperty("_id"), doc.Id);
            Assert.AreEqual(rev2.GetProperty("_rev"), rev2.Id);

            // Test -createRevision:
            var newRev = rev2.CreateRevision();

            Assert.IsNull(newRev.Id);
            Assert.AreEqual(newRev.Parent, rev2);
            Assert.AreEqual(newRev.ParentId, rev2.Id);
            Assert.AreEqual(doc.CurrentRevision, rev2);
            Assert.IsFalse(doc.Deleted);

            var listRevs = new List <SavedRevision>();

            listRevs.Add(rev1);
            listRevs.Add(rev2);
            Assert.AreEqual(newRev.RevisionHistory, listRevs);
            Assert.AreEqual(newRev.Properties, rev2.Properties);
            Assert.AreEqual(newRev.UserProperties, rev2.UserProperties);

            var userProperties = new Dictionary <String, Object>();

            userProperties["because"] = "NoSQL";
            newRev.SetUserProperties(userProperties);
            Assert.AreEqual(newRev.UserProperties, userProperties);

            var expectProperties = new Dictionary <String, Object>();

            expectProperties["because"] = "NoSQL";
            expectProperties["_id"]     = doc.Id;
            expectProperties["_rev"]    = rev2.Id;
            Assert.AreEqual(newRev.Properties, expectProperties);

            var rev3 = newRev.Save();

            Assert.IsNotNull(rev3);
            Assert.AreEqual(rev3.UserProperties, newRev.UserProperties);
        }