public void Add_Gets_Applied_To_Graph() {
            var graph = new DirectedGraph();

            var a = new GraphNode("a");
            var b = new GraphNode("b");
            var c = new GraphNode("c");
            var d = new GraphNode("d");

            graph.AddNode(a);
            graph.AddNode(b);
            graph.AddNode(c);
            graph.AddNode(d);

            var graphExpression = new GraphExpression<IDirectedGraph>(graph);
            var expression = new EdgeCollectionModifiersExpression<IGraphExpression>(graph, graphExpression);

            expression.Add(
                edges =>
                    {
                        edges.FromNodeWithName("a").ToNodeWithName("b");
                        edges.FromNodeWithName("c").ToNodeWithName("d");
                    }
                );

            Assert.AreEqual(graph.Edges.Count(), 2);

            var edge1 = graph.Edges.First();
            Assert.AreEqual(edge1.From.Node, a);
            Assert.AreEqual(edge1.To.Node, b);

            var edge2 = graph.Edges.Skip(1).First();
            Assert.AreEqual(edge2.From.Node, c);
            Assert.AreEqual(edge2.To.Node, d);
        }
        public void Add_Returns_Parent_Expression() {
            var graph = new UndirectedGraph();

            var a = new GraphNode("a");
            var b = new GraphNode("b");

            graph.AddNode(a);
            graph.AddNode(b);

            var graphExpression = new GraphExpression<IUndirectedGraph>(graph);
            var expression = new EdgeCollectionModifiersExpression<IGraphExpression>(graph, graphExpression);
            
            var instance = expression.Add(edges => edges.FromNodeWithName("a").ToNodeWithName("b"));
            Assert.AreSame(instance, graphExpression);
        }