Example #1
0
def test_add_node_and_edge():
    g = Graph()
    g.add_node(Node(id="a", label="node A", metadata={"w": 1.3}))
    g.add_node(Node(id="b", label="node B", metadata={"w": 0.3}))
    g.add_edge(Edge("a", "b"))

    assert g.to_dict() == {
        'graph': {
            'directed': True,
            'edges': [{'directed': True, 'source': 'a', 'target': 'b'}],
            'nodes': [{'id': 'a', 'label': 'node A', 'metadata': {'w': 1.3}},
                      {'id': 'b', 'label': 'node B', 'metadata': {'w': 0.3}}]
        }
    }

    with pytest.raises(TypeError) as excinfo:
        g.add_node(Edge("a", "b"))
    assert 'Type Node expected' in repr(excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        g.add_edge(Edge("a", "b", directed=False))
    assert 'Adding undirected edge to directed graph' in repr(excinfo.value)

    with pytest.raises(ValueError) as excinfo:
        g.add_edge(Edge("a", "nosuch"))
    assert 'No such nodes' in repr(excinfo.value)
Example #2
0
def test_graph_round_trip():
    g = Graph(
        nodes=[Node(id="a"), Node(id="b")],
        edges=[Edge(source="a", target="b")])
    d = g.to_dict()
    assert d == {
        'graph': {
            'directed': True,
            'edges': [{'source': 'a', 'target': 'b'}],
            'nodes': [{'id': 'a'}, {'id': 'b'}]}}

    g1 = Graph.from_dict(d)
    assert g1.to_dict() == g.to_dict()
Example #3
0
def test_graph_with_metadata():
    node1 = Node(id="a", label="node A", metadata={"w": 1.3})
    node2 = Node(id="b", label="node B", metadata={"w": 0.3})
    edge = Edge(node1, node2, id="ab", relation="edge AB", directed=True, metadata={"w": 3})
    g = Graph(
        nodes=[node1, node2],
        edges=[edge],
        directed=True,
        type="graph type",
        label="G",
        metadata={"tags": ["g"]}
    )
    d = g.to_dict()
    assert d == GRAPH1B_FIXTURE
    d_json = str(g)
    g1 = Graph.from_json(d_json)
    assert g1.to_dict() == g.to_dict()
Example #4
0
def test_graph_round_trip_int_ids():
    g = Graph(
        nodes=[Node(id=1), Node(id=2)],
        edges=[Edge(source=1, target=2, id=1)])
    d = g.to_dict()
    assert d == {
        'graph': {
            'directed': True,
            'edges': [{'source': 1, 'target': 2, 'id': 1}],
            'nodes': [{'id': 1}, {'id': 2}]}}

    d_json = json.dumps(d)
    d1 = json.loads(d_json)
    g1 = Graph.from_dict(d1)
    assert g1.to_dict() == g.to_dict()

    d_json2 = str(g)
    g2 = Graph.from_json(d_json2)
    assert g2.to_dict() == g.to_dict()