示例#1
0
        public void LiteDbMutableNode_fails_on_replacing_unknown_child()
        {
            // ARRANGE

            var child = new LiteDbMutableNode <int>(this.nodes, new BsonDocument(), "a");

            child.SetValue(1);
            var node        = new LiteDbMutableNode <int>(this.nodes, this.rootDocument).AddChild(child);
            var secondChild = new LiteDbMutableNode <int>(this.nodes, new BsonDocument(), "a");

            secondChild.SetValue(2);
            var thirdChild = new LiteDbMutableNode <int>(this.nodes, new BsonDocument(), "a");

            thirdChild.SetValue(3);

            // ACT

            var result = Assert.Throws <InvalidOperationException>(() => node.ReplaceChild(thirdChild, secondChild));

            // ASSERT

            Assert.Equal("The node (id='a') doesn't replace any of the existing child nodes", result.Message);
            Assert.True(node.HasChildNodes);
            var(found, addedChild) = node.TryGetChildNode("a");
            Assert.True(found);
            Assert.Equal(child, addedChild);
            Assert.Equal(child, node.ChildNodes.Single());

            // check db

            var rootDoc = this.nodes.Find(Query.EQ("key", null)).Single();

            Assert.NotNull(rootDoc);
            Assert.True(rootDoc.TryGetValue("cn", out var childNodesDoc));
            Assert.Equal(1, childNodesDoc.AsDocument.Count);
            Assert.True(childNodesDoc.AsDocument.TryGetValue("a", out var childDocId));

            var childDoc = this.nodes.FindById(childDocId);

            Assert.NotNull(childDoc);
            Assert.True(childDoc.TryGetValue("key", out var childKey));
            Assert.Equal("a", childKey.AsString);
            Assert.True(childDoc.TryGetValue("value", out var childValue));
            Assert.Equal(1, childValue.AsInt32);
            Assert.Equal(child.BsonDocument.Get("_id").AsObjectId, childDoc.Get("_id").AsObjectId);
            Assert.NotEqual(secondChild.BsonDocument.Get("_id").AsObjectId, childDoc.Get("_id").AsObjectId);
            Assert.NotEqual(thirdChild.BsonDocument.Get("_id").AsObjectId, childDoc.Get("_id").AsObjectId);
        }
示例#2
0
        public void LiteDbMutableNode_fails_on_Replace_if_keys_are_different()
        {
            // ARRANGE

            var child = new LiteDbMutableNode <int>(this.nodes, new BsonDocument(), "a");

            child.SetValue(1);
            var node        = new LiteDbMutableNode <int>(this.nodes, this.rootDocument).AddChild(child);
            var secondChild = new LiteDbMutableNode <int>(this.nodes, new BsonDocument(), "b");

            secondChild.SetValue(2);

            // ACT

            var result = Assert.Throws <InvalidOperationException>(() => node.ReplaceChild(child, secondChild));

            // ASSERT

            Assert.Equal("Key of child to replace (key='a') and new child (key='b') must be equal", result.Message);
            Assert.True(node.HasChildNodes);
            var(found, addedChild) = node.TryGetChildNode("a");
            Assert.True(found);
            Assert.Equal(child, addedChild);
            Assert.Equal(child, node.ChildNodes.Single());

            // check db

            var rootDoc = this.nodes.Find(Query.EQ("key", null)).Single();

            Assert.NotNull(rootDoc);
            Assert.True(rootDoc.TryGetValue("cn", out var childNodesDoc));
            Assert.Equal(1, childNodesDoc.AsDocument.Count);
            Assert.True(childNodesDoc.AsDocument.TryGetValue("a", out var childDocId));

            var childDoc = this.nodes.FindById(childDocId);

            Assert.NotNull(childDoc);
            Assert.True(childDoc.TryGetValue("key", out var childKey));
            Assert.Equal("a", childKey.AsString);
            Assert.True(childDoc.TryGetValue("value", out var childValue));
            Assert.Equal(1, childValue.AsInt32);
            Assert.Equal(child.BsonDocument.Get("_id").AsObjectId, childDoc.Get("_id").AsObjectId);
            Assert.NotEqual(secondChild.BsonDocument.Get("_id").AsObjectId, childDoc.Get("_id").AsObjectId);
        }
示例#3
0
        public void LiteDbMutableNode_replaces_child_from_current_instance()
        {
            // ARRANGE

            var child = new LiteDbMutableNode <int>(this.nodes, new BsonDocument(), "a");

            child.SetValue(1);
            var node        = new LiteDbMutableNode <int>(this.nodes, this.rootDocument).AddChild(child);
            var secondChild = new LiteDbMutableNode <int>(this.nodes, new BsonDocument(), "a");

            secondChild.SetValue(2);

            // ACT

            var result = node.ReplaceChild(child, secondChild);

            // ASSERT

            Assert.NotNull(result);
            Assert.True(result.HasChildNodes);
            var(found, addedChild) = result.TryGetChildNode("a");
            Assert.True(found);
            Assert.Equal(secondChild, addedChild);
            Assert.Equal(secondChild, result.ChildNodes.Single());

            // check db

            var rootDoc = this.nodes.Find(Query.EQ("key", null)).Single();

            Assert.NotNull(rootDoc);
            Assert.True(rootDoc.TryGetValue("cn", out var childNodesDoc));
            Assert.Equal(1, childNodesDoc.AsDocument.Count);
            Assert.True(childNodesDoc.AsDocument.TryGetValue("a", out var childDocId));

            var childDoc = this.nodes.FindById(childDocId);

            Assert.NotNull(childDoc);
            Assert.True(childDoc.TryGetValue("key", out var childKey));
            Assert.Equal("a", childKey.AsString);
            Assert.True(childDoc.TryGetValue("value", out var childValue));
            Assert.Equal(2, childValue.AsInt32);
            Assert.NotEqual(child.BsonDocument.Get("_id").AsObjectId, childDoc.Get("_id").AsObjectId);
            Assert.Equal(secondChild.BsonDocument.Get("_id").AsObjectId, childDoc.Get("_id").AsObjectId);
        }