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)
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()
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()
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()