public void TestStubOutAttachmentsInRevBeforeRevPos()
        {
            var hello = new JObject();

            hello["revpos"]  = 1;
            hello["follows"] = true;

            var goodbye = new JObject();

            goodbye["revpos"] = 2;
            goodbye["data"]   = "squeee";

            var attachments = new JObject();

            attachments["hello"]   = hello;
            attachments["goodbye"] = goodbye;

            var properties = new Dictionary <string, object>();

            properties["_attachments"] = attachments;

            IDictionary <string, object> expected = null;

            var rev = new RevisionInternal(properties);

            Database.StubOutAttachmentsInRevBeforeRevPos(rev, 3, false);
            var checkAttachments = rev.GetProperties()["_attachments"].AsDictionary <string, object>();
            var result           = (IDictionary <string, object>)checkAttachments["hello"];

            expected           = new Dictionary <string, object>();
            expected["revpos"] = 1;
            expected["stub"]   = true;
            AssertPropertiesAreEqual(expected, result);
            result             = (IDictionary <string, object>)checkAttachments["goodbye"];
            expected           = new Dictionary <string, object>();
            expected["revpos"] = 2;
            expected["stub"]   = true;
            AssertPropertiesAreEqual(expected, result);

            rev = new RevisionInternal(properties);
            Database.StubOutAttachmentsInRevBeforeRevPos(rev, 2, false);
            checkAttachments   = rev.GetProperties()["_attachments"].AsDictionary <string, object>();
            result             = checkAttachments["hello"].AsDictionary <string, object>();
            expected           = new Dictionary <string, object>();
            expected["revpos"] = 1;
            expected["stub"]   = true;
            AssertPropertiesAreEqual(expected, result);
            result   = checkAttachments["goodbye"].AsDictionary <string, object>();
            expected = goodbye.AsDictionary <string, object>();
            AssertPropertiesAreEqual(expected, result);

            rev = new RevisionInternal(properties);
            Database.StubOutAttachmentsInRevBeforeRevPos(rev, 1, false);
            checkAttachments = rev.GetProperties()["_attachments"].AsDictionary <string, object>();
            result           = checkAttachments["hello"].AsDictionary <string, object>();
            expected         = hello.AsDictionary <string, object>();
            AssertPropertiesAreEqual(expected, result);
            result   = checkAttachments["goodbye"].AsDictionary <string, object>();
            expected = goodbye.AsDictionary <string, object>();
            AssertPropertiesAreEqual(expected, result);

            //Test the follows mode
            rev = new RevisionInternal(properties);
            Database.StubOutAttachmentsInRevBeforeRevPos(rev, 3, true);
            checkAttachments   = rev.GetProperties()["_attachments"].AsDictionary <string, object>();
            result             = checkAttachments["hello"].AsDictionary <string, object>();
            expected           = new Dictionary <string, object>();
            expected["revpos"] = 1;
            expected["stub"]   = true;
            AssertPropertiesAreEqual(expected, result);
            result             = checkAttachments["goodbye"].AsDictionary <string, object>();
            expected           = new Dictionary <string, object>();
            expected["revpos"] = 2;
            expected["stub"]   = true;
            AssertPropertiesAreEqual(expected, result);

            rev = new RevisionInternal(properties);
            Database.StubOutAttachmentsInRevBeforeRevPos(rev, 2, true);
            checkAttachments   = rev.GetProperties()["_attachments"].AsDictionary <string, object>();
            result             = checkAttachments["hello"].AsDictionary <string, object>();
            expected           = new Dictionary <string, object>();
            expected["revpos"] = 1;
            expected["stub"]   = true;
            AssertPropertiesAreEqual(expected, result);
            result              = checkAttachments["goodbye"].AsDictionary <string, object>();
            expected            = new Dictionary <string, object>();
            expected["revpos"]  = 2;
            expected["follows"] = true;
            AssertPropertiesAreEqual(expected, result);

            rev = new RevisionInternal(properties);
            Database.StubOutAttachmentsInRevBeforeRevPos(rev, 1, true);
            checkAttachments    = rev.GetProperties()["_attachments"].AsDictionary <string, object>();
            result              = checkAttachments["hello"].AsDictionary <string, object>();
            expected            = new Dictionary <string, object>();
            expected["revpos"]  = 1;
            expected["follows"] = true;
            AssertPropertiesAreEqual(expected, result);
            result              = checkAttachments["goodbye"].AsDictionary <string, object>();
            expected            = new Dictionary <string, object>();
            expected["revpos"]  = 2;
            expected["follows"] = true;
            AssertPropertiesAreEqual(expected, result);
        }