18
18
# See the License for the specific language governing permissions and
19
19
# limitations under the License.
20
20
21
+ from itertools import product
21
22
22
- from unittest import TestCase
23
+ import pytest
23
24
24
25
from neo4j .data import DataHydrator
25
26
from neo4j .graph import (
39
40
def test_can_create_node ():
40
41
g = Graph ()
41
42
gh = Graph .Hydrator (g )
42
- alice = gh .hydrate_node (1 , {"Person" }, {"name" : "Alice" , "age" : 33 })
43
+ alice = gh .hydrate_node (123 , {"Person" }, {"name" : "Alice" , "age" : 33 })
43
44
assert isinstance (alice , Node )
45
+ assert alice .id == 123
44
46
assert alice .labels == {"Person" }
45
47
assert set (alice .keys ()) == {"name" , "age" }
46
48
assert set (alice .values ()) == {"Alice" , 33 }
47
49
assert set (alice .items ()) == {("name" , "Alice" ), ("age" , 33 )}
50
+ assert dict (alice ) == {"name" : "Alice" , "age" : 33 }
48
51
assert alice .get ("name" ) == "Alice"
49
52
assert alice .get ("age" ) == 33
53
+ assert alice .get ("unknown" ) is None
54
+ assert alice .get ("unknown" , None ) is None
55
+ assert alice .get ("unknown" , False ) is False
56
+ assert alice .get ("unknown" , "default" ) == "default"
50
57
assert len (alice ) == 2
51
58
assert alice ["name" ] == "Alice"
52
59
assert alice ["age" ] == 33
@@ -55,10 +62,11 @@ def test_can_create_node():
55
62
assert set (iter (alice )) == {"name" , "age" }
56
63
57
64
58
- def test_null_properties ():
65
+ def test_node_with_null_properties ():
59
66
g = Graph ()
60
67
gh = Graph .Hydrator (g )
61
- stuff = gh .hydrate_node (1 , (), {"good" : ["puppies" , "kittens" ], "bad" : None })
68
+ stuff = gh .hydrate_node (1 , (), {"good" : ["puppies" , "kittens" ],
69
+ "bad" : None })
62
70
assert isinstance (stuff , Node )
63
71
assert set (stuff .keys ()) == {"good" }
64
72
assert stuff .get ("good" ) == ["puppies" , "kittens" ]
@@ -70,13 +78,26 @@ def test_null_properties():
70
78
assert "bad" not in stuff
71
79
72
80
73
- def test_node_equality ():
74
- g = Graph ()
75
- node_1 = Node (g , 1234 )
76
- node_2 = Node (g , 1234 )
77
- node_3 = Node (g , 5678 )
78
- assert node_1 == node_2
79
- assert node_1 != node_3
81
+ @pytest .mark .parametrize (("g1" , "id1" , "props1" , "g2" , "id2" , "props2" ), (
82
+ (* n1 , * n2 )
83
+ for n1 , n2 in product (
84
+ (
85
+ (g , id_ , props )
86
+ for g in (0 , 1 )
87
+ for id_ in (1 , 1234 )
88
+ for props in (None , {}, {"a" : 1 })
89
+ ),
90
+ repeat = 2
91
+ )
92
+ ))
93
+ def test_node_equality (g1 , id1 , props1 , g2 , id2 , props2 ):
94
+ graphs = (Graph (), Graph ())
95
+ node_1 = Node (graphs [g1 ], id1 , props1 )
96
+ node_2 = Node (graphs [g2 ], id2 , props2 )
97
+ if g1 == g2 and id1 == id2 :
98
+ assert node_1 == node_2
99
+ else :
100
+ assert node_1 != node_2
80
101
assert node_1 != "this is not a node"
81
102
82
103
@@ -109,6 +130,7 @@ def test_can_create_relationship():
109
130
assert alice_knows_bob .start_node == alice
110
131
assert alice_knows_bob .type == "KNOWS"
111
132
assert alice_knows_bob .end_node == bob
133
+ assert dict (alice_knows_bob ) == {"since" : 1999 }
112
134
assert set (alice_knows_bob .keys ()) == {"since" }
113
135
assert set (alice_knows_bob .values ()) == {1999 }
114
136
assert set (alice_knows_bob .items ()) == {("since" , 1999 )}
@@ -133,32 +155,41 @@ def test_can_create_path():
133
155
alice = gh .hydrate_node (1 , {"Person" }, {"name" : "Alice" , "age" : 33 })
134
156
bob = gh .hydrate_node (2 , {"Person" }, {"name" : "Bob" , "age" : 44 })
135
157
carol = gh .hydrate_node (3 , {"Person" }, {"name" : "Carol" , "age" : 55 })
136
- alice_knows_bob = gh .hydrate_relationship (1 , alice .id , bob .id , "KNOWS" , {"since" : 1999 })
137
- carol_dislikes_bob = gh .hydrate_relationship (2 , carol .id , bob .id , "DISLIKES" , {})
158
+ alice_knows_bob = gh .hydrate_relationship (1 , alice .id , bob .id , "KNOWS" ,
159
+ {"since" : 1999 })
160
+ carol_dislikes_bob = gh .hydrate_relationship (2 , carol .id , bob .id ,
161
+ "DISLIKES" , {})
138
162
path = Path (alice , alice_knows_bob , carol_dislikes_bob )
139
163
assert isinstance (path , Path )
140
- assert path .start_node == alice
141
- assert path .end_node == carol
164
+ assert path .start_node is alice
165
+ assert path .end_node is carol
142
166
assert path .nodes == (alice , bob , carol )
143
167
assert path .relationships == (alice_knows_bob , carol_dislikes_bob )
144
168
assert list (path ) == [alice_knows_bob , carol_dislikes_bob ]
145
169
146
170
147
- def test_can_hydrate_path ():
171
+ @pytest .mark .parametrize ("cyclic" , (True , False ))
172
+ def test_can_hydrate_path (cyclic ):
148
173
g = Graph ()
149
174
gh = Graph .Hydrator (g )
150
175
alice = gh .hydrate_node (1 , {"Person" }, {"name" : "Alice" , "age" : 33 })
151
176
bob = gh .hydrate_node (2 , {"Person" }, {"name" : "Bob" , "age" : 44 })
152
- carol = gh .hydrate_node (3 , {"Person" }, {"name" : "Carol" , "age" : 55 })
177
+ if cyclic :
178
+ carol = alice
179
+ else :
180
+ carol = gh .hydrate_node (3 , {"Person" }, {"name" : "Carol" , "age" : 55 })
153
181
r = [gh .hydrate_unbound_relationship (1 , "KNOWS" , {"since" : 1999 }),
154
182
gh .hydrate_unbound_relationship (2 , "DISLIKES" , {})]
155
183
path = gh .hydrate_path ([alice , bob , carol ], r , [1 , 1 , - 2 , 2 ])
156
- assert path .start_node == alice
157
- assert path .end_node == carol
184
+ assert path .start_node is alice
185
+ assert path .end_node is carol
158
186
assert path .nodes == (alice , bob , carol )
159
- expected_alice_knows_bob = gh .hydrate_relationship (1 , alice .id , bob .id , "KNOWS" , {"since" : 1999 })
160
- expected_carol_dislikes_bob = gh .hydrate_relationship (2 , carol .id , bob .id , "DISLIKES" , {})
161
- assert path .relationships == (expected_alice_knows_bob , expected_carol_dislikes_bob )
187
+ expected_alice_knows_bob = gh .hydrate_relationship (1 , alice .id , bob .id ,
188
+ "KNOWS" , {"since" : 1999 })
189
+ expected_carol_dislikes_bob = gh .hydrate_relationship (2 , carol .id , bob .id ,
190
+ "DISLIKES" , {})
191
+ assert path .relationships == (expected_alice_knows_bob ,
192
+ expected_carol_dislikes_bob )
162
193
assert list (path ) == [expected_alice_knows_bob , expected_carol_dislikes_bob ]
163
194
164
195
0 commit comments