|
5 | 5 | from neo4j_viz.gql_create import from_gql_create |
6 | 6 |
|
7 | 7 |
|
8 | | -def test_from_gql_create() -> None: |
| 8 | +def test_from_gql_create_syntax() -> None: |
9 | 9 | query = """ |
10 | 10 | CREATE |
11 | 11 | (a:User {name: 'Alice', age: 23, labels: ['Happy'], "id": 42}), |
@@ -47,7 +47,7 @@ def test_from_gql_create() -> None: |
47 | 47 | {"top_level": {}, "properties": {"name": "Fawad", "age": 78, "labels": ["Person", "User"]}}, |
48 | 48 | ] |
49 | 49 |
|
50 | | - VG = from_gql_create(query) |
| 50 | + VG = from_gql_create(query, node_caption=None, relationship_caption=None) |
51 | 51 |
|
52 | 52 | assert len(VG.nodes) == len(expected_node_dicts) |
53 | 53 | for i, exp_node in enumerate(expected_node_dicts): |
@@ -80,6 +80,81 @@ def test_from_gql_create() -> None: |
80 | 80 | assert created_rel.properties == exp_rel["properties"] |
81 | 81 |
|
82 | 82 |
|
| 83 | +def test_from_gql_create_captions() -> None: |
| 84 | + query = """ |
| 85 | + CREATE |
| 86 | + (a:User {name: 'Alice', age: 23}), |
| 87 | + (b:User:person {name: "Bridget", age: 34, "caption": "Bridget"}), |
| 88 | + (a)-[:LINK {weight: 0.5}]->(b); |
| 89 | + """ |
| 90 | + expected_node_dicts: list[dict[str, dict[str, Any]]] = [ |
| 91 | + { |
| 92 | + "top_level": {"caption": "User"}, |
| 93 | + "properties": {"name": "Alice", "age": 23, "labels": ["User"]}, |
| 94 | + }, |
| 95 | + { |
| 96 | + "top_level": {"caption": "User:person"}, |
| 97 | + "properties": {"name": "Bridget", "age": 34, "labels": ["User", "person"]}, |
| 98 | + }, |
| 99 | + ] |
| 100 | + |
| 101 | + VG = from_gql_create(query) |
| 102 | + |
| 103 | + assert len(VG.nodes) == len(expected_node_dicts) |
| 104 | + for i, exp_node in enumerate(expected_node_dicts): |
| 105 | + created_node = VG.nodes[i] |
| 106 | + |
| 107 | + assert created_node.model_dump(exclude_none=True, exclude={"properties", "id"}) == exp_node["top_level"] |
| 108 | + assert created_node.properties == exp_node["properties"] |
| 109 | + |
| 110 | + expected_relationships_dicts: list[dict[str, Any]] = [ |
| 111 | + { |
| 112 | + "source_idx": 0, |
| 113 | + "target_idx": 1, |
| 114 | + "top_level": {"caption": "LINK"}, |
| 115 | + "properties": {"weight": 0.5, "type": "LINK"}, |
| 116 | + }, |
| 117 | + ] |
| 118 | + |
| 119 | + assert len(VG.relationships) == len(expected_relationships_dicts) |
| 120 | + for i, exp_rel in enumerate(expected_relationships_dicts): |
| 121 | + created_rel = VG.relationships[i] |
| 122 | + assert created_rel.source == VG.nodes[exp_rel["source_idx"]].id |
| 123 | + assert created_rel.target == VG.nodes[exp_rel["target_idx"]].id |
| 124 | + assert ( |
| 125 | + created_rel.model_dump(exclude_none=True, exclude={"properties", "id", "source", "target"}) |
| 126 | + == exp_rel["top_level"] |
| 127 | + ) |
| 128 | + assert created_rel.properties == exp_rel["properties"] |
| 129 | + |
| 130 | + |
| 131 | +def test_from_gql_create_sizes() -> None: |
| 132 | + query = """ |
| 133 | + CREATE |
| 134 | + (a:User {name: 'Alice', age: 23}), |
| 135 | + (b:User:person {name: "Bridget", age: 34, "caption": "Bridget"}); |
| 136 | + """ |
| 137 | + expected_node_dicts: list[dict[str, dict[str, Any]]] = [ |
| 138 | + { |
| 139 | + "top_level": {"size": 3.0}, |
| 140 | + "properties": {"name": "Alice", "age": 23, "labels": ["User"]}, |
| 141 | + }, |
| 142 | + { |
| 143 | + "top_level": {"caption": "Bridget", "size": 60.0}, |
| 144 | + "properties": {"name": "Bridget", "age": 34, "labels": ["User", "person"]}, |
| 145 | + }, |
| 146 | + ] |
| 147 | + |
| 148 | + VG = from_gql_create(query, size_property="age", node_caption=None, relationship_caption=None) |
| 149 | + |
| 150 | + assert len(VG.nodes) == len(expected_node_dicts) |
| 151 | + for i, exp_node in enumerate(expected_node_dicts): |
| 152 | + created_node = VG.nodes[i] |
| 153 | + |
| 154 | + assert created_node.model_dump(exclude_none=True, exclude={"properties", "id"}) == exp_node["top_level"] |
| 155 | + assert created_node.properties == exp_node["properties"] |
| 156 | + |
| 157 | + |
83 | 158 | def test_unbalanced_parentheses_snippet() -> None: |
84 | 159 | query = "CREATE (a:User, (b:User })" |
85 | 160 | with pytest.raises(ValueError, match=r"Unbalanced parentheses near: `.*\(b:User.*"): |
|
0 commit comments