public void NodeWithName_Should_Add_Node_To_Graph_And_Return_Configuration_Options()
        {
            var fromNode = MockRepository.GenerateMock<IGraphNode>();
            var toNode = MockRepository.GenerateMock<IGraphNode>();

            var graph = MockRepository.GenerateMock<IGraph>();
            var nodeLookup = MockRepository.GenerateMock<INodeTracker>();
            

            graph.Expect(x => x.NodeLookup).Return(nodeLookup);
            nodeLookup.Expect(x => x.GetNodeByName("b")).Return(toNode);

            IEdge edge = null;

            graph.Expect(x => x.AddEdge(null))
                .IgnoreArguments()
                .WhenCalled(x => edge = (IEdge) x.Arguments[0]);

            var edgeExpression = new EdgeDestinationSelectionExpression(new NodeTarget(fromNode), graph).ToNodeWithName("b");

            graph.VerifyAllExpectations();
            nodeLookup.VerifyAllExpectations();

            Assert.IsNotNull(edge);
            Assert.IsNotNull(edgeExpression);

            Assert.AreSame(edge.From.Node, fromNode);
            Assert.AreSame(edge.To.Node, toNode);

            Assert.AreEqual(edge.Attributes.CurrentAttributes.Count, 0);
            edgeExpression.WithLabel("b");
            Assert.AreEqual(edge.Attributes.CurrentAttributes.Count, 1);
        }
        public void NewNode_Should_Add_NewNode_To_Graph_And_Return_Configuration_Options()
        {
            var fromNode = MockRepository.GenerateMock<IGraphNode>();

            var graph = MockRepository.GenerateMock<IGraph>();
            var nodeLookup = MockRepository.GenerateMock<ILookupNodes>();

            IEdge edge = null;

            graph.Expect(x => x.AddEdge(null))
                .IgnoreArguments()
                .WhenCalled(x => edge = (IEdge)x.Arguments[0]);

            var edgeExpression = new EdgeDestinationSelectionExpression(new NodeTarget(fromNode), graph)
                .ToNewNode("a");

            graph.VerifyAllExpectations();
            nodeLookup.VerifyAllExpectations();

            Assert.IsNotNull(edge);
            Assert.IsNotNull(edgeExpression);

            Assert.AreSame(edge.From.Node, fromNode);
            Assert.AreSame(edge.To.Node.Name, "a");
        }
        public void NewNode_Should_Add_NewNode_To_Graph_And_Apply_Node_Configuraiton()
        {
            var fromNode = MockRepository.GenerateMock<IGraphNode>();

            var graph = MockRepository.GenerateMock<IGraph>();
            var nodeLookup = MockRepository.GenerateMock<ILookupNodes>();

            IEdge edge = null;

            graph.Expect(x => x.AddEdge(null))
                .IgnoreArguments()
                .WhenCalled(x => edge = (IEdge)x.Arguments[0]);

            var edgeExpression = new EdgeDestinationSelectionExpression(new NodeTarget(fromNode), graph)
                .ToNewNode("a", x => x.WithLabel("aa"));

            graph.VerifyAllExpectations();
            nodeLookup.VerifyAllExpectations();

            Assert.IsNotNull(edge);
            Assert.IsNotNull(edgeExpression);

            Assert.AreSame(edge.From.Node, fromNode);
            Assert.AreSame(edge.To.Node.Name, "a");

            Assert.AreEqual(edge.To.Node.Attributes.CurrentAttributes.Count, 1);
            Assert.IsAssignableFrom(typeof(LabelAttribute), edge.To.Node.Attributes.CurrentAttributes[0]);
        }
        public void RecordWithTag_Should_Add_Node_To_Graph_And_Return_Configuration_Options() {
            var fromNode = MockRepository.GenerateMock<IRecordNode>();
            var toNode = MockRepository.GenerateMock<IRecordNode>();

            var graph = MockRepository.GenerateMock<IGraph>();
            var nodeLookup = MockRepository.GenerateMock<INodeTracker>();
            var elementTracker = MockRepository.GenerateMock<IElementTracker>();

            graph.Expect(x => x.NodeLookup).Return(nodeLookup);
            nodeLookup.Expect(x => x.GetNodeByTag("tag")).Return(toNode);

            IEdge edge = null;

            graph.Expect(x => x.AddEdge(null))
                .IgnoreArguments()
                .WhenCalled(x => edge = (IEdge)x.Arguments[0]);

            toNode.Expect(x => x.ElementTracker).Return(elementTracker);
            elementTracker.Expect(x => x.ContainsElement("c")).Return(true);

            var edgeExpression = new EdgeDestinationSelectionExpression(new NodeTarget(fromNode), graph).ToRecordWithTag("tag", "c");

            graph.VerifyAllExpectations();
            nodeLookup.VerifyAllExpectations();
            elementTracker.VerifyAllExpectations();

            Assert.IsNotNull(edge);
            Assert.IsNotNull(edgeExpression);

            Assert.AreSame(edge.From.Node, fromNode);
            Assert.AreSame(edge.To.Node, toNode);
        }