neography 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/CHANGELOG.md +939 -0
- data/Guardfile +14 -0
- data/README.md +16 -14
- data/lib/neography/connection.rb +1 -0
- data/lib/neography/errors.rb +3 -0
- data/lib/neography/node.rb +21 -25
- data/lib/neography/property.rb +60 -11
- data/lib/neography/property_container.rb +5 -6
- data/lib/neography/rest/batch.rb +10 -0
- data/lib/neography/rest/node_properties.rb +1 -1
- data/lib/neography/version.rb +1 -1
- data/neography.gemspec +4 -2
- data/spec/integration/authorization_spec.rb +4 -4
- data/spec/integration/broken_spatial_spec.rb +6 -6
- data/spec/integration/index_spec.rb +6 -6
- data/spec/integration/neography_spec.rb +1 -1
- data/spec/integration/node_encoding_spec.rb +19 -19
- data/spec/integration/node_path_spec.rb +36 -36
- data/spec/integration/node_relationship_spec.rb +84 -84
- data/spec/integration/node_spec.rb +50 -50
- data/spec/integration/parsing_spec.rb +2 -2
- data/spec/integration/relationship_spec.rb +10 -10
- data/spec/integration/rest_batch_no_streaming_spec.rb +6 -6
- data/spec/integration/rest_batch_spec.rb +209 -188
- data/spec/integration/rest_batch_streaming_spec.rb +8 -8
- data/spec/integration/rest_bulk_spec.rb +23 -23
- data/spec/integration/rest_constraints_spec.rb +17 -17
- data/spec/integration/rest_experimental_spec.rb +2 -2
- data/spec/integration/rest_gremlin_fail_spec.rb +4 -4
- data/spec/integration/rest_header_spec.rb +3 -2
- data/spec/integration/rest_index_spec.rb +76 -76
- data/spec/integration/rest_labels_spec.rb +13 -13
- data/spec/integration/rest_node_spec.rb +50 -50
- data/spec/integration/rest_other_node_relationship_spec.rb +50 -50
- data/spec/integration/rest_path_spec.rb +55 -55
- data/spec/integration/rest_plugin_spec.rb +59 -59
- data/spec/integration/rest_relationship_spec.rb +77 -77
- data/spec/integration/rest_relationship_types_spec.rb +2 -2
- data/spec/integration/rest_schema_index_spec.rb +6 -6
- data/spec/integration/rest_spatial_spec.rb +50 -50
- data/spec/integration/rest_transaction_spec.rb +67 -67
- data/spec/integration/rest_traverse_spec.rb +40 -40
- data/spec/integration/unmanaged_spec.rb +3 -3
- data/spec/matchers.rb +2 -2
- data/spec/neography_spec.rb +3 -3
- data/spec/spec_helper.rb +2 -2
- data/spec/unit/config_spec.rb +95 -20
- data/spec/unit/connection_spec.rb +40 -40
- data/spec/unit/node_spec.rb +12 -12
- data/spec/unit/properties_spec.rb +174 -29
- data/spec/unit/relationship_spec.rb +16 -16
- data/spec/unit/rest/batch_spec.rb +23 -23
- data/spec/unit/rest/clean_spec.rb +1 -1
- data/spec/unit/rest/constraints_spec.rb +6 -6
- data/spec/unit/rest/cypher_spec.rb +1 -1
- data/spec/unit/rest/extensions_spec.rb +2 -2
- data/spec/unit/rest/gremlin_spec.rb +3 -3
- data/spec/unit/rest/helpers_spec.rb +19 -19
- data/spec/unit/rest/labels_spec.rb +10 -10
- data/spec/unit/rest/node_auto_indexes_spec.rb +13 -13
- data/spec/unit/rest/node_indexes_spec.rb +22 -22
- data/spec/unit/rest/node_paths_spec.rb +7 -7
- data/spec/unit/rest/node_properties_spec.rb +15 -15
- data/spec/unit/rest/node_relationships_spec.rb +10 -10
- data/spec/unit/rest/node_traversal_spec.rb +1 -1
- data/spec/unit/rest/nodes_spec.rb +32 -32
- data/spec/unit/rest/relationship_auto_indexes_spec.rb +12 -12
- data/spec/unit/rest/relationship_indexes_spec.rb +21 -21
- data/spec/unit/rest/relationship_properties_spec.rb +15 -15
- data/spec/unit/rest/relationship_types_spec.rb +1 -1
- data/spec/unit/rest/relationships_spec.rb +2 -2
- data/spec/unit/rest/schema_index_spec.rb +3 -3
- data/spec/unit/rest/transactions_spec.rb +4 -4
- metadata +32 -3
- data/ChangeLog +0 -658
@@ -5,25 +5,25 @@ describe Neography::Node do
|
|
5
5
|
describe "create and new" do
|
6
6
|
it "can create an empty node" do
|
7
7
|
new_node = Neography::Node.create
|
8
|
-
new_node.
|
8
|
+
expect(new_node).not_to be_nil
|
9
9
|
end
|
10
10
|
|
11
11
|
it "can create a node with one property" do
|
12
12
|
new_node = Neography::Node.create("name" => "Max")
|
13
|
-
new_node.name.
|
13
|
+
expect(new_node.name).to eq("Max")
|
14
14
|
end
|
15
15
|
|
16
16
|
it "can create a node with more than one property" do
|
17
17
|
new_node = Neography::Node.create("age" => 31, "name" => "Max")
|
18
|
-
new_node.name.
|
19
|
-
new_node.age.
|
18
|
+
expect(new_node.name).to eq("Max")
|
19
|
+
expect(new_node.age).to eq(31)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "can create a node with more than one property not on the default rest server" do
|
23
23
|
@neo = Neography::Rest.new
|
24
24
|
new_node = Neography::Node.create({"age" => 31, "name" => "Max"}, @neo)
|
25
|
-
new_node.name.
|
26
|
-
new_node.age.
|
25
|
+
expect(new_node.name).to eq("Max")
|
26
|
+
expect(new_node.age).to eq(31)
|
27
27
|
end
|
28
28
|
|
29
29
|
it "cannot create a node with more than one property not on the default rest server the other way" do
|
@@ -39,9 +39,9 @@ describe Neography::Node do
|
|
39
39
|
it "can get a node that exists" do
|
40
40
|
new_node = Neography::Node.create
|
41
41
|
existing_node = Neography::Node.load(new_node)
|
42
|
-
existing_node.
|
43
|
-
existing_node.neo_id.
|
44
|
-
existing_node.neo_id.
|
42
|
+
expect(existing_node).not_to be_nil
|
43
|
+
expect(existing_node.neo_id).not_to be_nil
|
44
|
+
expect(existing_node.neo_id).to eq(new_node.neo_id)
|
45
45
|
end
|
46
46
|
|
47
47
|
it "raises an error if it tries to load a node that does not exist" do
|
@@ -56,9 +56,9 @@ describe Neography::Node do
|
|
56
56
|
@neo = Neography::Rest.new
|
57
57
|
new_node = Neography::Node.create({}, @neo)
|
58
58
|
existing_node = Neography::Node.load(new_node, @neo)
|
59
|
-
existing_node.
|
60
|
-
existing_node.neo_id.
|
61
|
-
existing_node.neo_id.
|
59
|
+
expect(existing_node).not_to be_nil
|
60
|
+
expect(existing_node.neo_id).not_to be_nil
|
61
|
+
expect(existing_node.neo_id).to eq(new_node.neo_id)
|
62
62
|
end
|
63
63
|
|
64
64
|
it "cannot load a node that exists not on the default rest server the other way" do
|
@@ -77,9 +77,9 @@ describe Neography::Node do
|
|
77
77
|
@neo.add_node_to_index("test_node_index", key, value, new_node)
|
78
78
|
node_from_index = @neo.get_node_index("test_node_index", key, value)
|
79
79
|
existing_node = Neography::Node.load(node_from_index)
|
80
|
-
existing_node.
|
81
|
-
existing_node.neo_id.
|
82
|
-
existing_node.neo_id.
|
80
|
+
expect(existing_node).not_to be_nil
|
81
|
+
expect(existing_node.neo_id).not_to be_nil
|
82
|
+
expect(existing_node.neo_id).to eq(new_node.neo_id)
|
83
83
|
end
|
84
84
|
|
85
85
|
it "can get a node that exists via cypher" do
|
@@ -88,9 +88,9 @@ describe Neography::Node do
|
|
88
88
|
@neo = Neography::Rest.new
|
89
89
|
results = @neo.execute_query(cypher, {:id => new_node.neo_id.to_i})
|
90
90
|
existing_node = Neography::Node.load(results)
|
91
|
-
existing_node.
|
92
|
-
existing_node.neo_id.
|
93
|
-
existing_node.neo_id.
|
91
|
+
expect(existing_node).not_to be_nil
|
92
|
+
expect(existing_node.neo_id).not_to be_nil
|
93
|
+
expect(existing_node.neo_id).to eq(new_node.neo_id)
|
94
94
|
end
|
95
95
|
|
96
96
|
|
@@ -110,13 +110,13 @@ describe Neography::Node do
|
|
110
110
|
describe "exists?" do
|
111
111
|
it "can tell if it exists" do
|
112
112
|
new_node = Neography::Node.create
|
113
|
-
new_node.exist
|
113
|
+
expect(new_node.exist?).to be true
|
114
114
|
end
|
115
115
|
|
116
116
|
it "can tell if does not exists" do
|
117
117
|
new_node = Neography::Node.create
|
118
118
|
new_node.del
|
119
|
-
new_node.exist
|
119
|
+
expect(new_node.exist?).to be false
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -124,19 +124,19 @@ describe Neography::Node do
|
|
124
124
|
it "can tell two nodes are the same with equal?" do
|
125
125
|
new_node = Neography::Node.create
|
126
126
|
another_node = Neography::Node.load(new_node)
|
127
|
-
new_node.equal?(another_node).
|
127
|
+
expect(new_node.equal?(another_node)).to be true
|
128
128
|
end
|
129
129
|
|
130
130
|
it "can tell two nodes are the same with eql?" do
|
131
131
|
new_node = Neography::Node.create
|
132
132
|
another_node = Neography::Node.load(new_node)
|
133
|
-
new_node.eql?(another_node).
|
133
|
+
expect(new_node.eql?(another_node)).to be true
|
134
134
|
end
|
135
135
|
|
136
136
|
it "can tell two nodes are the same with ==" do
|
137
137
|
new_node = Neography::Node.create
|
138
138
|
another_node = Neography::Node.load(new_node)
|
139
|
-
(new_node == another_node).
|
139
|
+
expect(new_node == another_node).to be true
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
@@ -148,8 +148,8 @@ describe Neography::Node do
|
|
148
148
|
new_node[:eyes] = "brown"
|
149
149
|
|
150
150
|
existing_node = Neography::Node.load(new_node)
|
151
|
-
existing_node.weight.
|
152
|
-
existing_node.eyes.
|
151
|
+
expect(existing_node.weight).to eq(200)
|
152
|
+
expect(existing_node.eyes).to eq("brown")
|
153
153
|
end
|
154
154
|
|
155
155
|
it "can change a node's properties that already exist" do
|
@@ -159,8 +159,8 @@ describe Neography::Node do
|
|
159
159
|
new_node.eyes = "brown"
|
160
160
|
|
161
161
|
existing_node = Neography::Node.load(new_node)
|
162
|
-
existing_node.weight.
|
163
|
-
existing_node.eyes.
|
162
|
+
expect(existing_node.weight).to eq(200)
|
163
|
+
expect(existing_node.eyes).to eq("brown")
|
164
164
|
end
|
165
165
|
|
166
166
|
it "can change a node's properties that does not already exist using []=" do
|
@@ -171,9 +171,9 @@ describe Neography::Node do
|
|
171
171
|
new_node[:hair] = "black"
|
172
172
|
|
173
173
|
existing_node = Neography::Node.load(new_node)
|
174
|
-
existing_node.weight.
|
175
|
-
existing_node.eyes.
|
176
|
-
existing_node.hair.
|
174
|
+
expect(existing_node.weight).to eq(200)
|
175
|
+
expect(existing_node.eyes).to eq("brown")
|
176
|
+
expect(existing_node.hair).to eq("black")
|
177
177
|
end
|
178
178
|
|
179
179
|
it "can change a node's properties that does not already exist" do
|
@@ -182,23 +182,23 @@ describe Neography::Node do
|
|
182
182
|
new_node.hair = "black"
|
183
183
|
|
184
184
|
existing_node = Neography::Node.load(new_node)
|
185
|
-
existing_node.hair.
|
185
|
+
expect(existing_node.hair).to eq("black")
|
186
186
|
end
|
187
187
|
|
188
188
|
it "can pass issue 18" do
|
189
189
|
n = Neography::Node.create("name" => "Test")
|
190
190
|
n.prop = 1
|
191
|
-
n.prop.
|
191
|
+
expect(n.prop).to eq(1)
|
192
192
|
n.prop = 1
|
193
|
-
n.prop.
|
194
|
-
n[:prop].
|
193
|
+
expect(n.prop).to eq(1)
|
194
|
+
expect(n[:prop]).to eq(1)
|
195
195
|
n[:prop2] = 2
|
196
|
-
n[:prop2].
|
196
|
+
expect(n[:prop2]).to eq(2)
|
197
197
|
n[:prop2] = 2
|
198
|
-
n[:prop2].
|
198
|
+
expect(n[:prop2]).to eq(2)
|
199
199
|
n.name
|
200
200
|
n.name = "New Name"
|
201
|
-
n.name.
|
201
|
+
expect(n.name).to eq("New Name")
|
202
202
|
end
|
203
203
|
|
204
204
|
end
|
@@ -206,14 +206,14 @@ describe Neography::Node do
|
|
206
206
|
describe "get node properties" do
|
207
207
|
it "can get node properties using []" do
|
208
208
|
new_node = Neography::Node.create("weight" => 150, "eyes" => "green")
|
209
|
-
new_node[:weight].
|
210
|
-
new_node[:eyes].
|
209
|
+
expect(new_node[:weight]).to eq(150)
|
210
|
+
expect(new_node[:eyes]).to eq("green")
|
211
211
|
end
|
212
212
|
|
213
213
|
it "can get node properties" do
|
214
214
|
new_node = Neography::Node.create("weight" => 150, "eyes" => "green")
|
215
|
-
new_node.weight.
|
216
|
-
new_node.eyes.
|
215
|
+
expect(new_node.weight).to eq(150)
|
216
|
+
expect(new_node.eyes).to eq("green")
|
217
217
|
end
|
218
218
|
end
|
219
219
|
|
@@ -224,12 +224,12 @@ describe Neography::Node do
|
|
224
224
|
new_node[:weight] = nil
|
225
225
|
new_node[:eyes] = nil
|
226
226
|
|
227
|
-
new_node[:weight].
|
228
|
-
new_node[:eyes].
|
227
|
+
expect(new_node[:weight]).to be_nil
|
228
|
+
expect(new_node[:eyes]).to be_nil
|
229
229
|
|
230
230
|
existing_node = Neography::Node.load(new_node)
|
231
|
-
existing_node.weight.
|
232
|
-
existing_node.eyes.
|
231
|
+
expect(existing_node.weight).to be_nil
|
232
|
+
expect(existing_node.eyes).to be_nil
|
233
233
|
end
|
234
234
|
|
235
235
|
it "can delete node properties" do
|
@@ -238,12 +238,12 @@ describe Neography::Node do
|
|
238
238
|
new_node.weight = nil
|
239
239
|
new_node.eyes = nil
|
240
240
|
|
241
|
-
new_node.weight.
|
242
|
-
new_node.eyes.
|
241
|
+
expect(new_node.weight).to be_nil
|
242
|
+
expect(new_node.eyes).to be_nil
|
243
243
|
|
244
244
|
existing_node = Neography::Node.load(new_node)
|
245
|
-
existing_node.weight.
|
246
|
-
existing_node.eyes.
|
245
|
+
expect(existing_node.weight).to be_nil
|
246
|
+
expect(existing_node.eyes).to be_nil
|
247
247
|
end
|
248
248
|
end
|
249
249
|
|
@@ -255,6 +255,6 @@ describe Neography::Node do
|
|
255
255
|
node
|
256
256
|
}
|
257
257
|
|
258
|
-
it { subject.labels.
|
258
|
+
it { expect(subject.labels).to eq(%w(Label Label2)) }
|
259
259
|
end
|
260
260
|
end
|
@@ -6,8 +6,8 @@ describe Neography do
|
|
6
6
|
it 'should not convert strings to symbol' do
|
7
7
|
node = subject.create_node({:text => ':1456'})
|
8
8
|
|
9
|
-
node['data']['text'].class.
|
10
|
-
node['data']['text'].
|
9
|
+
expect(node['data']['text'].class).to eq(String) # fails! expected: String got: Symbol (using ==)
|
10
|
+
expect(node['data']['text']).to eq(':1456')
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -7,8 +7,8 @@ describe Neography::Relationship do
|
|
7
7
|
p2 = Neography::Node.create
|
8
8
|
|
9
9
|
Neography::Relationship.create(:family, p1, p2)
|
10
|
-
p1.outgoing(:family).
|
11
|
-
p2.incoming(:family).
|
10
|
+
expect(p1.outgoing(:family)).to include(p2)
|
11
|
+
expect(p2.incoming(:family)).to include(p1)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "#new(:family, p1, p2, :since => '1998', :colour => 'blue') creates relationship and sets its properties" do
|
@@ -16,10 +16,10 @@ describe Neography::Relationship do
|
|
16
16
|
p2 = Neography::Node.create
|
17
17
|
rel = Neography::Relationship.create(:family, p1, p2, :since => 1998, :colour => 'blue')
|
18
18
|
|
19
|
-
rel[:since].
|
20
|
-
rel[:colour].
|
21
|
-
rel.since.
|
22
|
-
rel.colour.
|
19
|
+
expect(rel[:since]).to eq(1998)
|
20
|
+
expect(rel[:colour]).to eq('blue')
|
21
|
+
expect(rel.since).to eq(1998)
|
22
|
+
expect(rel.colour).to eq('blue')
|
23
23
|
end
|
24
24
|
|
25
25
|
it "#outgoing(:friends).create(other) creates a new relationship between self and other node" do
|
@@ -27,10 +27,10 @@ describe Neography::Relationship do
|
|
27
27
|
p2 = Neography::Node.create
|
28
28
|
rel = p1.outgoing(:foo).create(p2)
|
29
29
|
|
30
|
-
rel.
|
31
|
-
p1.outgoing(:foo).first.
|
32
|
-
p1.outgoing(:foo).
|
33
|
-
p2.incoming(:foo).
|
30
|
+
expect(rel).to be_kind_of(Neography::Relationship)
|
31
|
+
expect(p1.outgoing(:foo).first).to eq(p2)
|
32
|
+
expect(p1.outgoing(:foo)).to include(p2)
|
33
|
+
expect(p2.incoming(:foo)).to include(p1)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -13,8 +13,8 @@ describe Neography::Rest do
|
|
13
13
|
commands << [:create_node, {"name" => "Max " + x.to_s}]
|
14
14
|
end
|
15
15
|
batch_result = @neo.batch_no_streaming *commands
|
16
|
-
batch_result.first["body"]["data"]["name"].
|
17
|
-
batch_result.last["body"]["data"]["name"].
|
16
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max 0")
|
17
|
+
expect(batch_result.last["body"]["data"]["name"]).to eq("Max 999")
|
18
18
|
end
|
19
19
|
|
20
20
|
it "can send a 5000 item batch" do
|
@@ -23,8 +23,8 @@ describe Neography::Rest do
|
|
23
23
|
commands << [:get_node, 0]
|
24
24
|
end
|
25
25
|
batch_result = @neo.batch_no_streaming *commands
|
26
|
-
batch_result.first["body"]["self"].split('/').last.
|
27
|
-
batch_result.last["body"]["self"].split('/').last.
|
26
|
+
expect(batch_result.first["body"]["self"].split('/').last).to eq("0")
|
27
|
+
expect(batch_result.last["body"]["self"].split('/').last).to eq("0")
|
28
28
|
end
|
29
29
|
|
30
30
|
it "can send a 20000 item batch" do
|
@@ -33,8 +33,8 @@ describe Neography::Rest do
|
|
33
33
|
commands << [:create_node, {"name" => "Max " + x.to_s}]
|
34
34
|
end
|
35
35
|
batch_result = @neo.batch_no_streaming *commands
|
36
|
-
batch_result.first["body"]["data"]["name"].
|
37
|
-
batch_result.last["body"]["data"]["name"].
|
36
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max 0")
|
37
|
+
expect(batch_result.last["body"]["data"]["name"]).to eq("Max 19999")
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -10,11 +10,11 @@ describe Neography::Rest do
|
|
10
10
|
new_node = @neo.create_node
|
11
11
|
new_node[:id] = new_node["self"].split('/').last
|
12
12
|
batch_result = @neo.batch [:get_node, new_node]
|
13
|
-
batch_result.first.
|
14
|
-
batch_result.first.
|
15
|
-
batch_result.first.
|
16
|
-
batch_result.first.
|
17
|
-
batch_result.first["body"]["self"].split('/').last.
|
13
|
+
expect(batch_result.first).not_to be_nil
|
14
|
+
expect(batch_result.first).to have_key("id")
|
15
|
+
expect(batch_result.first).to have_key("body")
|
16
|
+
expect(batch_result.first).to have_key("from")
|
17
|
+
expect(batch_result.first["body"]["self"].split('/').last).to eq(new_node[:id])
|
18
18
|
end
|
19
19
|
|
20
20
|
it "can get multiple nodes" do
|
@@ -24,33 +24,33 @@ describe Neography::Rest do
|
|
24
24
|
node2[:id] = node2["self"].split('/').last
|
25
25
|
|
26
26
|
batch_result = @neo.batch [:get_node, node1], [:get_node, node2]
|
27
|
-
batch_result.first.
|
28
|
-
batch_result.first.
|
29
|
-
batch_result.first.
|
30
|
-
batch_result.first.
|
31
|
-
batch_result.first["body"]["self"].split('/').last.
|
32
|
-
batch_result.last.
|
33
|
-
batch_result.last.
|
34
|
-
batch_result.last.
|
35
|
-
batch_result.last["body"]["self"].split('/').last.
|
27
|
+
expect(batch_result.first).not_to be_nil
|
28
|
+
expect(batch_result.first).to have_key("id")
|
29
|
+
expect(batch_result.first).to have_key("body")
|
30
|
+
expect(batch_result.first).to have_key("from")
|
31
|
+
expect(batch_result.first["body"]["self"].split('/').last).to eq(node1[:id])
|
32
|
+
expect(batch_result.last).to have_key("id")
|
33
|
+
expect(batch_result.last).to have_key("body")
|
34
|
+
expect(batch_result.last).to have_key("from")
|
35
|
+
expect(batch_result.last["body"]["self"].split('/').last).to eq(node2[:id])
|
36
36
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it "can create a single node" do
|
40
40
|
batch_result = @neo.batch [:create_node, {"name" => "Max"}]
|
41
|
-
batch_result.first["body"]["data"]["name"].
|
41
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max")
|
42
42
|
end
|
43
43
|
|
44
44
|
it "can create multiple nodes" do
|
45
45
|
batch_result = @neo.batch [:create_node, {"name" => "Max"}], [:create_node, {"name" => "Marc"}]
|
46
|
-
batch_result.first["body"]["data"]["name"].
|
47
|
-
batch_result.last["body"]["data"]["name"].
|
46
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max")
|
47
|
+
expect(batch_result.last["body"]["data"]["name"]).to eq("Marc")
|
48
48
|
end
|
49
49
|
|
50
50
|
it "can create multiple nodes given an *array" do
|
51
51
|
batch_result = @neo.batch *[[:create_node, {"name" => "Max"}], [:create_node, {"name" => "Marc"}]]
|
52
|
-
batch_result.first["body"]["data"]["name"].
|
53
|
-
batch_result.last["body"]["data"]["name"].
|
52
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max")
|
53
|
+
expect(batch_result.last["body"]["data"]["name"]).to eq("Marc")
|
54
54
|
end
|
55
55
|
|
56
56
|
it "can create a unique node" do
|
@@ -59,94 +59,108 @@ describe Neography::Rest do
|
|
59
59
|
value = generate_text
|
60
60
|
@neo.create_node_index(index_name)
|
61
61
|
batch_result = @neo.batch [:create_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
|
62
|
-
batch_result.first["body"]["data"]["name"].
|
63
|
-
batch_result.first["body"]["data"]["age"].
|
62
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max")
|
63
|
+
expect(batch_result.first["body"]["data"]["age"]).to eq(31)
|
64
64
|
new_node_id = batch_result.first["body"]["self"].split('/').last
|
65
65
|
batch_result = @neo.batch [:create_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
|
66
|
-
batch_result.first["body"]["self"].split('/').last.
|
67
|
-
batch_result.first["body"]["data"]["name"].
|
68
|
-
batch_result.first["body"]["data"]["age"].
|
66
|
+
expect(batch_result.first["body"]["self"].split('/').last).to eq(new_node_id)
|
67
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max")
|
68
|
+
expect(batch_result.first["body"]["data"]["age"]).to eq(31)
|
69
69
|
|
70
70
|
#Sanity Check
|
71
71
|
existing_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
|
72
|
-
existing_node["self"].split('/').last.
|
73
|
-
existing_node["data"]["name"].
|
74
|
-
existing_node["data"]["age"].
|
72
|
+
expect(existing_node["self"].split('/').last).to eq(new_node_id)
|
73
|
+
expect(existing_node["data"]["name"]).to eq("Max")
|
74
|
+
expect(existing_node["data"]["age"]).to eq(31)
|
75
75
|
end
|
76
76
|
|
77
|
+
it "can create or fail a unique node" do
|
78
|
+
index_name = generate_text(6)
|
79
|
+
key = generate_text(6)
|
80
|
+
value = generate_text
|
81
|
+
@neo.create_node_index(index_name)
|
82
|
+
batch_result = @neo.batch [:create_or_fail_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
|
83
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max")
|
84
|
+
expect(batch_result.first["body"]["data"]["age"]).to eq(31)
|
85
|
+
new_node_id = batch_result.first["body"]["self"].split('/').last
|
86
|
+
expect {
|
87
|
+
batch_result = @neo.batch [:create_or_fail_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
|
88
|
+
}.to raise_error Neography::OperationFailureException
|
89
|
+
|
90
|
+
end
|
77
91
|
it "can update a property of a node" do
|
78
92
|
new_node = @neo.create_node("name" => "Max")
|
79
93
|
batch_result = @neo.batch [:set_node_property, new_node, {"name" => "Marc"}]
|
80
|
-
batch_result.first.
|
81
|
-
batch_result.first.
|
94
|
+
expect(batch_result.first).to have_key("id")
|
95
|
+
expect(batch_result.first).to have_key("from")
|
82
96
|
existing_node = @neo.get_node(new_node)
|
83
|
-
existing_node["data"]["name"].
|
97
|
+
expect(existing_node["data"]["name"]).to eq("Marc")
|
84
98
|
end
|
85
99
|
|
86
100
|
it "can update a property of multiple nodes" do
|
87
101
|
node1 = @neo.create_node("name" => "Max")
|
88
102
|
node2 = @neo.create_node("name" => "Marc")
|
89
103
|
batch_result = @neo.batch [:set_node_property, node1, {"name" => "Tom"}], [:set_node_property, node2, {"name" => "Jerry"}]
|
90
|
-
batch_result.first.
|
91
|
-
batch_result.first.
|
92
|
-
batch_result.last.
|
93
|
-
batch_result.last.
|
104
|
+
expect(batch_result.first).to have_key("id")
|
105
|
+
expect(batch_result.first).to have_key("from")
|
106
|
+
expect(batch_result.last).to have_key("id")
|
107
|
+
expect(batch_result.last).to have_key("from")
|
94
108
|
existing_node = @neo.get_node(node1)
|
95
|
-
existing_node["data"]["name"].
|
109
|
+
expect(existing_node["data"]["name"]).to eq("Tom")
|
96
110
|
existing_node = @neo.get_node(node2)
|
97
|
-
existing_node["data"]["name"].
|
111
|
+
expect(existing_node["data"]["name"]).to eq("Jerry")
|
98
112
|
end
|
99
113
|
|
100
114
|
it "can reset the properties of a node" do
|
101
115
|
new_node = @neo.create_node("name" => "Max", "weight" => 200)
|
102
116
|
batch_result = @neo.batch [:reset_node_properties, new_node, {"name" => "Marc"}]
|
103
|
-
batch_result.first.
|
104
|
-
batch_result.first.
|
117
|
+
expect(batch_result.first).to have_key("id")
|
118
|
+
expect(batch_result.first).to have_key("from")
|
105
119
|
existing_node = @neo.get_node(new_node)
|
106
|
-
existing_node["data"]["name"].
|
107
|
-
existing_node["data"]["weight"].
|
120
|
+
expect(existing_node["data"]["name"]).to eq("Marc")
|
121
|
+
expect(existing_node["data"]["weight"]).to be_nil
|
108
122
|
end
|
109
123
|
|
110
124
|
it "can reset the properties of multiple nodes" do
|
111
125
|
node1 = @neo.create_node("name" => "Max", "weight" => 200)
|
112
126
|
node2 = @neo.create_node("name" => "Marc", "weight" => 180)
|
113
127
|
batch_result = @neo.batch [:reset_node_properties, node1, {"name" => "Tom"}], [:reset_node_properties, node2, {"name" => "Jerry"}]
|
114
|
-
batch_result.first.
|
115
|
-
batch_result.first.
|
116
|
-
batch_result.last.
|
117
|
-
batch_result.last.
|
128
|
+
expect(batch_result.first).to have_key("id")
|
129
|
+
expect(batch_result.first).to have_key("from")
|
130
|
+
expect(batch_result.last).to have_key("id")
|
131
|
+
expect(batch_result.last).to have_key("from")
|
118
132
|
existing_node = @neo.get_node(node1)
|
119
|
-
existing_node["data"]["name"].
|
120
|
-
existing_node["data"]["weight"].
|
133
|
+
expect(existing_node["data"]["name"]).to eq("Tom")
|
134
|
+
expect(existing_node["data"]["weight"]).to be_nil
|
121
135
|
existing_node = @neo.get_node(node2)
|
122
|
-
existing_node["data"]["name"].
|
123
|
-
existing_node["data"]["weight"].
|
136
|
+
expect(existing_node["data"]["name"]).to eq("Jerry")
|
137
|
+
expect(existing_node["data"]["weight"]).to be_nil
|
124
138
|
end
|
125
139
|
|
126
140
|
it "can remove a property of a node" do
|
127
141
|
new_node = @neo.create_node("name" => "Max", "weight" => 200)
|
128
142
|
batch_result = @neo.batch [:remove_node_property, new_node, "weight"]
|
129
|
-
batch_result.first.
|
130
|
-
batch_result.first.
|
143
|
+
expect(batch_result.first).to have_key("id")
|
144
|
+
expect(batch_result.first).to have_key("from")
|
131
145
|
existing_node = @neo.get_node(new_node)
|
132
|
-
existing_node["data"]["name"].
|
133
|
-
existing_node["data"]["weight"].
|
146
|
+
expect(existing_node["data"]["name"]).to eq("Max")
|
147
|
+
expect(existing_node["data"]["weight"]).to be_nil
|
134
148
|
end
|
135
149
|
|
136
150
|
it "can remove a property of multiple nodes" do
|
137
151
|
node1 = @neo.create_node("name" => "Max", "weight" => 200)
|
138
152
|
node2 = @neo.create_node("name" => "Marc", "weight" => 180)
|
139
153
|
batch_result = @neo.batch [:remove_node_property, node1, "name"], [:remove_node_property, node2, "name"]
|
140
|
-
batch_result.first.
|
141
|
-
batch_result.first.
|
142
|
-
batch_result.last.
|
143
|
-
batch_result.last.
|
154
|
+
expect(batch_result.first).to have_key("id")
|
155
|
+
expect(batch_result.first).to have_key("from")
|
156
|
+
expect(batch_result.last).to have_key("id")
|
157
|
+
expect(batch_result.last).to have_key("from")
|
144
158
|
existing_node = @neo.get_node(node1)
|
145
|
-
existing_node["data"]["name"].
|
146
|
-
existing_node["data"]["weight"].
|
159
|
+
expect(existing_node["data"]["name"]).to be_nil
|
160
|
+
expect(existing_node["data"]["weight"]).to eq(200)
|
147
161
|
existing_node = @neo.get_node(node2)
|
148
|
-
existing_node["data"]["name"].
|
149
|
-
existing_node["data"]["weight"].
|
162
|
+
expect(existing_node["data"]["name"]).to be_nil
|
163
|
+
expect(existing_node["data"]["weight"]).to eq(180)
|
150
164
|
end
|
151
165
|
|
152
166
|
it "can get a single relationship" do
|
@@ -154,42 +168,42 @@ describe Neography::Rest do
|
|
154
168
|
node2 = @neo.create_node
|
155
169
|
new_relationship = @neo.create_relationship("friends", node1, node2)
|
156
170
|
batch_result = @neo.batch [:get_relationship, new_relationship]
|
157
|
-
batch_result.first["body"]["type"].
|
158
|
-
batch_result.first["body"]["start"].split('/').last.
|
159
|
-
batch_result.first["body"]["end"].split('/').last.
|
160
|
-
batch_result.first["body"]["self"].
|
171
|
+
expect(batch_result.first["body"]["type"]).to eq("friends")
|
172
|
+
expect(batch_result.first["body"]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
173
|
+
expect(batch_result.first["body"]["end"].split('/').last).to eq(node2["self"].split('/').last)
|
174
|
+
expect(batch_result.first["body"]["self"]).to eq(new_relationship["self"])
|
161
175
|
end
|
162
176
|
|
163
177
|
it "can create a single relationship without properties" do
|
164
178
|
node1 = @neo.create_node
|
165
179
|
node2 = @neo.create_node
|
166
180
|
batch_result = @neo.batch [:create_relationship, "friends", node1, node2]
|
167
|
-
batch_result.first["body"]["type"].
|
168
|
-
batch_result.first["body"]["data"]["since"].
|
169
|
-
batch_result.first["body"]["start"].split('/').last.
|
170
|
-
batch_result.first["body"]["end"].split('/').last.
|
181
|
+
expect(batch_result.first["body"]["type"]).to eq("friends")
|
182
|
+
expect(batch_result.first["body"]["data"]["since"]).to be_nil
|
183
|
+
expect(batch_result.first["body"]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
184
|
+
expect(batch_result.first["body"]["end"].split('/').last).to eq(node2["self"].split('/').last)
|
171
185
|
end
|
172
186
|
|
173
187
|
it "can create a single relationship" do
|
174
188
|
node1 = @neo.create_node
|
175
189
|
node2 = @neo.create_node
|
176
190
|
batch_result = @neo.batch [:create_relationship, "friends", node1, node2, {:since => "high school"}]
|
177
|
-
batch_result.first["body"]["type"].
|
178
|
-
batch_result.first["body"]["data"]["since"].
|
179
|
-
batch_result.first["body"]["start"].split('/').last.
|
180
|
-
batch_result.first["body"]["end"].split('/').last.
|
191
|
+
expect(batch_result.first["body"]["type"]).to eq("friends")
|
192
|
+
expect(batch_result.first["body"]["data"]["since"]).to eq("high school")
|
193
|
+
expect(batch_result.first["body"]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
194
|
+
expect(batch_result.first["body"]["end"].split('/').last).to eq(node2["self"].split('/').last)
|
181
195
|
end
|
182
196
|
|
183
197
|
it "can delete a single relationship" do
|
184
198
|
node1 = @neo.create_node
|
185
199
|
node2 = @neo.create_node
|
186
200
|
batch_result = @neo.batch [:create_relationship, "friends", node1, node2, {:since => "time immemorial"}]
|
187
|
-
batch_result.
|
188
|
-
batch_result[0]["status"].
|
201
|
+
expect(batch_result).not_to be_nil
|
202
|
+
expect(batch_result[0]["status"]).to eq(201)
|
189
203
|
id = batch_result.first["body"]["self"].split("/").last
|
190
204
|
batch_result = @neo.batch [:delete_relationship, id]
|
191
|
-
batch_result[0]["status"].
|
192
|
-
batch_result[0]["from"].
|
205
|
+
expect(batch_result[0]["status"]).to eq(204)
|
206
|
+
expect(batch_result[0]["from"]).to eq("/relationship/#{id}")
|
193
207
|
end
|
194
208
|
|
195
209
|
it "can create a unique relationship" do
|
@@ -200,9 +214,9 @@ describe Neography::Rest do
|
|
200
214
|
node1 = @neo.create_node
|
201
215
|
node2 = @neo.create_node
|
202
216
|
batch_result = @neo.batch [:create_unique_relationship, index_name, key, value, "friends", node1, node2]
|
203
|
-
batch_result.first["body"]["type"].
|
204
|
-
batch_result.first["body"]["start"].split('/').last.
|
205
|
-
batch_result.first["body"]["end"].split('/').last.
|
217
|
+
expect(batch_result.first["body"]["type"]).to eq("friends")
|
218
|
+
expect(batch_result.first["body"]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
219
|
+
expect(batch_result.first["body"]["end"].split('/').last).to eq(node2["self"].split('/').last)
|
206
220
|
end
|
207
221
|
|
208
222
|
it "can update a single relationship" do
|
@@ -210,14 +224,14 @@ describe Neography::Rest do
|
|
210
224
|
node2 = @neo.create_node
|
211
225
|
new_relationship = @neo.create_relationship("friends", node1, node2, {:since => "high school"})
|
212
226
|
batch_result = @neo.batch [:set_relationship_property, new_relationship, {:since => "college"}]
|
213
|
-
batch_result.first.
|
214
|
-
batch_result.first.
|
227
|
+
expect(batch_result.first).to have_key("id")
|
228
|
+
expect(batch_result.first).to have_key("from")
|
215
229
|
existing_relationship = @neo.get_relationship(new_relationship)
|
216
|
-
existing_relationship["type"].
|
217
|
-
existing_relationship["data"]["since"].
|
218
|
-
existing_relationship["start"].split('/').last.
|
219
|
-
existing_relationship["end"].split('/').last.
|
220
|
-
existing_relationship["self"].
|
230
|
+
expect(existing_relationship["type"]).to eq("friends")
|
231
|
+
expect(existing_relationship["data"]["since"]).to eq("college")
|
232
|
+
expect(existing_relationship["start"].split('/').last).to eq(node1["self"].split('/').last)
|
233
|
+
expect(existing_relationship["end"].split('/').last).to eq(node2["self"].split('/').last)
|
234
|
+
expect(existing_relationship["self"]).to eq(new_relationship["self"])
|
221
235
|
end
|
222
236
|
|
223
237
|
it "can reset the properties of a relationship" do
|
@@ -225,22 +239,22 @@ describe Neography::Rest do
|
|
225
239
|
node2 = @neo.create_node
|
226
240
|
new_relationship = @neo.create_relationship("friends", node1, node2, {:since => "high school"})
|
227
241
|
batch_result = @neo.batch [:reset_relationship_properties, new_relationship, {"since" => "college", "dated" => "yes"}]
|
228
|
-
batch_result.first.
|
229
|
-
batch_result.first.
|
242
|
+
expect(batch_result.first).to have_key("id")
|
243
|
+
expect(batch_result.first).to have_key("from")
|
230
244
|
existing_relationship = @neo.get_relationship(batch_result.first["from"].split('/')[2])
|
231
|
-
existing_relationship["type"].
|
232
|
-
existing_relationship["data"]["since"].
|
233
|
-
existing_relationship["data"]["dated"].
|
234
|
-
existing_relationship["start"].split('/').last.
|
235
|
-
existing_relationship["end"].split('/').last.
|
236
|
-
existing_relationship["self"].
|
245
|
+
expect(existing_relationship["type"]).to eq("friends")
|
246
|
+
expect(existing_relationship["data"]["since"]).to eq("college")
|
247
|
+
expect(existing_relationship["data"]["dated"]).to eq("yes")
|
248
|
+
expect(existing_relationship["start"].split('/').last).to eq(node1["self"].split('/').last)
|
249
|
+
expect(existing_relationship["end"].split('/').last).to eq(node2["self"].split('/').last)
|
250
|
+
expect(existing_relationship["self"]).to eq(new_relationship["self"])
|
237
251
|
end
|
238
252
|
|
239
253
|
it "can drop a node index" do
|
240
254
|
index_name = generate_text(6)
|
241
255
|
@neo.create_node_index(index_name)
|
242
256
|
@neo.batch [:drop_node_index, index_name]
|
243
|
-
@neo.list_node_indexes[index_name].
|
257
|
+
expect(@neo.list_node_indexes[index_name]).to be_nil
|
244
258
|
end
|
245
259
|
|
246
260
|
it "can create a node index" do
|
@@ -248,9 +262,9 @@ describe Neography::Rest do
|
|
248
262
|
@neo.batch [:create_node_index, index_name, "fulltext", "lucene"]
|
249
263
|
indexes = @neo.list_node_indexes
|
250
264
|
index = indexes[index_name]
|
251
|
-
index.
|
252
|
-
index["provider"].
|
253
|
-
index["type"].
|
265
|
+
expect(index).not_to be_nil
|
266
|
+
expect(index["provider"]).to eq("lucene")
|
267
|
+
expect(index["type"]).to eq("fulltext")
|
254
268
|
end
|
255
269
|
|
256
270
|
it "can add a node to an index" do
|
@@ -259,11 +273,11 @@ describe Neography::Rest do
|
|
259
273
|
key = generate_text(6)
|
260
274
|
value = generate_text
|
261
275
|
batch_result = @neo.batch [:add_node_to_index, index_name, key, value, new_node]
|
262
|
-
batch_result.first.
|
263
|
-
batch_result.first.
|
276
|
+
expect(batch_result.first).to have_key("id")
|
277
|
+
expect(batch_result.first).to have_key("from")
|
264
278
|
existing_index = @neo.find_node_index(index_name, key, value)
|
265
|
-
existing_index.
|
266
|
-
existing_index.first["self"].
|
279
|
+
expect(existing_index).not_to be_nil
|
280
|
+
expect(existing_index.first["self"]).to eq(new_node["self"])
|
267
281
|
@neo.remove_node_from_index(index_name, key, value, new_node)
|
268
282
|
end
|
269
283
|
|
@@ -275,9 +289,9 @@ describe Neography::Rest do
|
|
275
289
|
new_node = @neo.create_node
|
276
290
|
@neo.add_node_to_index(index_name, key, value, new_node)
|
277
291
|
batch_result = @neo.batch [:get_node_index, index_name, key, value]
|
278
|
-
batch_result.first.
|
279
|
-
batch_result.first.
|
280
|
-
batch_result.first["body"].first["self"].
|
292
|
+
expect(batch_result.first).to have_key("id")
|
293
|
+
expect(batch_result.first).to have_key("from")
|
294
|
+
expect(batch_result.first["body"].first["self"]).to eq(new_node["self"])
|
281
295
|
@neo.remove_node_from_index(index_name, key, value, new_node)
|
282
296
|
end
|
283
297
|
|
@@ -291,43 +305,50 @@ describe Neography::Rest do
|
|
291
305
|
new_relationship = @neo.create_relationship("friends", node1, node2, {:since => "high school"})
|
292
306
|
@neo.add_relationship_to_index(index_name, key, value, new_relationship)
|
293
307
|
batch_result = @neo.batch [:get_relationship_index, index_name, key, value]
|
294
|
-
batch_result.first.
|
295
|
-
batch_result.first.
|
296
|
-
batch_result.first["body"].first["type"].
|
297
|
-
batch_result.first["body"].first["start"].split('/').last.
|
298
|
-
batch_result.first["body"].first["end"].split('/').last.
|
308
|
+
expect(batch_result.first).to have_key("id")
|
309
|
+
expect(batch_result.first).to have_key("from")
|
310
|
+
expect(batch_result.first["body"].first["type"]).to eq("friends")
|
311
|
+
expect(batch_result.first["body"].first["start"].split('/').last).to eq(node1["self"].split('/').last)
|
312
|
+
expect(batch_result.first["body"].first["end"].split('/').last).to eq(node2["self"].split('/').last)
|
299
313
|
end
|
300
314
|
|
301
315
|
it "can batch gremlin", :gremlin => true do
|
302
316
|
batch_result = @neo.batch [:execute_script, "g.v(0)"]
|
303
|
-
batch_result.first.
|
304
|
-
batch_result.first.
|
305
|
-
batch_result.first["body"]["self"].split('/').last.
|
317
|
+
expect(batch_result.first).to have_key("id")
|
318
|
+
expect(batch_result.first).to have_key("from")
|
319
|
+
expect(batch_result.first["body"]["self"].split('/').last).to eq("0")
|
306
320
|
end
|
307
321
|
|
308
322
|
it "can batch gremlin with parameters", :gremlin => true do
|
309
323
|
new_node = @neo.create_node
|
310
324
|
id = new_node["self"].split('/').last
|
311
325
|
batch_result = @neo.batch [:execute_script, "g.v(id)", {:id => id.to_i}]
|
312
|
-
batch_result.first.
|
313
|
-
batch_result.first.
|
314
|
-
batch_result.first["body"]["self"].split('/').last.
|
326
|
+
expect(batch_result.first).to have_key("id")
|
327
|
+
expect(batch_result.first).to have_key("from")
|
328
|
+
expect(batch_result.first["body"]["self"].split('/').last).to eq(id)
|
315
329
|
end
|
316
330
|
|
317
331
|
it "can batch cypher" do
|
318
332
|
batch_result = @neo.batch [:execute_query, "start n=node(0) return n"]
|
319
|
-
batch_result.first.
|
320
|
-
batch_result.first.
|
321
|
-
batch_result.first["body"]["data"][0][0]["self"].split('/').last.
|
333
|
+
expect(batch_result.first).to have_key("id")
|
334
|
+
expect(batch_result.first).to have_key("from")
|
335
|
+
expect(batch_result.first["body"]["data"][0][0]["self"].split('/').last).to eq("0")
|
322
336
|
end
|
323
337
|
|
324
338
|
it "can batch cypher with parameters" do
|
325
339
|
new_node = @neo.create_node
|
326
340
|
id = new_node["self"].split('/').last
|
327
341
|
batch_result = @neo.batch [:execute_query, "start n=node({id}) return n", {:id => id.to_i}]
|
328
|
-
batch_result.first.
|
329
|
-
batch_result.first.
|
330
|
-
batch_result.first["body"]["data"][0][0]["self"].split('/').last.
|
342
|
+
expect(batch_result.first).to have_key("id")
|
343
|
+
expect(batch_result.first).to have_key("from")
|
344
|
+
expect(batch_result.first["body"]["data"][0][0]["self"].split('/').last).to eq(id)
|
345
|
+
end
|
346
|
+
|
347
|
+
it "raises ParameterNotFoundException when a cypher parameter is missing and ORDER BY is used" do
|
348
|
+
q = "MATCH n WHERE n.x>{missing_parameter} RETURN n ORDER BY n"
|
349
|
+
expect{
|
350
|
+
@neo.batch [:execute_query, q, {}]
|
351
|
+
}.to raise_error Neography::ParameterNotFoundException
|
331
352
|
end
|
332
353
|
|
333
354
|
it "can delete a node in batch" do
|
@@ -337,10 +358,10 @@ describe Neography::Rest do
|
|
337
358
|
id2 = node2['self'].split('/').last
|
338
359
|
batch_result = @neo.batch [:delete_node, id1 ], [:delete_node, id2]
|
339
360
|
expect {
|
340
|
-
@neo.get_node(node1).
|
361
|
+
expect(@neo.get_node(node1)).to be_nil
|
341
362
|
}.to raise_error Neography::NodeNotFoundException
|
342
363
|
expect {
|
343
|
-
@neo.get_node(node2).
|
364
|
+
expect(@neo.get_node(node2)).to be_nil
|
344
365
|
}.to raise_error Neography::NodeNotFoundException
|
345
366
|
end
|
346
367
|
|
@@ -359,9 +380,9 @@ describe Neography::Rest do
|
|
359
380
|
[:remove_node_from_index, index, key, node2 ],
|
360
381
|
[:remove_node_from_index, index, node3 ]
|
361
382
|
|
362
|
-
@neo.get_node_index(index, key, value1).
|
363
|
-
@neo.get_node_index(index, key, value2).
|
364
|
-
@neo.get_node_index(index, key, value3).
|
383
|
+
expect(@neo.get_node_index(index, key, value1)).to be_nil
|
384
|
+
expect(@neo.get_node_index(index, key, value2)).to be_nil
|
385
|
+
expect(@neo.get_node_index(index, key, value3)).to be_nil
|
365
386
|
end
|
366
387
|
|
367
388
|
it "can remove a relationship from an index in batch" do
|
@@ -378,8 +399,8 @@ describe Neography::Rest do
|
|
378
399
|
batch_result = @neo.batch [:remove_relationship_from_index, index, key, relationship1],
|
379
400
|
[:remove_relationship_from_index, index, key, relationship2]
|
380
401
|
|
381
|
-
@neo.get_relationship_index(index, key, value1).
|
382
|
-
@neo.get_relationship_index(index, key, value2).
|
402
|
+
expect(@neo.get_relationship_index(index, key, value1)).to be_nil
|
403
|
+
expect(@neo.get_relationship_index(index, key, value2)).to be_nil
|
383
404
|
end
|
384
405
|
|
385
406
|
it "can do spatial via Cypher in batch" do
|
@@ -390,47 +411,47 @@ describe Neography::Rest do
|
|
390
411
|
[:execute_query, "start n = node:geobatchcypher({withinDistance}) return n", {:withinDistance => "withinDistance:[60.0,15.0,100.0]"}],
|
391
412
|
[:execute_query, "start n = node:geobatchcypher({bbox}) return n", {:bbox => "bbox:[15.0,15.3,60.0,60.2]"}]
|
392
413
|
|
393
|
-
batch_result[0]["body"]["provider"].
|
394
|
-
batch_result[0]["body"]["geometry_type"].
|
395
|
-
batch_result[0]["body"]["lat"].
|
396
|
-
batch_result[0]["body"]["lon"].
|
397
|
-
batch_result[1]["from"].
|
398
|
-
batch_result[1]["body"]["data"].
|
399
|
-
batch_result[2]["body"]["data"].
|
400
|
-
batch_result[3]["body"]["data"].
|
414
|
+
expect(batch_result[0]["body"]["provider"]).to eq("spatial")
|
415
|
+
expect(batch_result[0]["body"]["geometry_type"]).to eq("point")
|
416
|
+
expect(batch_result[0]["body"]["lat"]).to eq("lat")
|
417
|
+
expect(batch_result[0]["body"]["lon"]).to eq("lon")
|
418
|
+
expect(batch_result[1]["from"]).to eq("/index/node/geobatchcypher")
|
419
|
+
expect(batch_result[1]["body"]["data"]).to eq({"lat" => 60.1, "lon" => 15.2})
|
420
|
+
expect(batch_result[2]["body"]["data"]).not_to be_empty
|
421
|
+
expect(batch_result[3]["body"]["data"]).not_to be_empty
|
401
422
|
end
|
402
423
|
end
|
403
424
|
|
404
425
|
describe "referenced batch" do
|
405
426
|
it "can create a relationship from two newly created nodes" do
|
406
427
|
batch_result = @neo.batch [:create_node, {"name" => "Max"}], [:create_node, {"name" => "Marc"}], [:create_relationship, "friends", "{0}", "{1}", {:since => "high school"}]
|
407
|
-
batch_result.first["body"]["data"]["name"].
|
408
|
-
batch_result[1]["body"]["data"]["name"].
|
409
|
-
batch_result.last["body"]["type"].
|
410
|
-
batch_result.last["body"]["data"]["since"].
|
411
|
-
batch_result.last["body"]["start"].split('/').last.
|
412
|
-
batch_result.last["body"]["end"].split('/').last.
|
428
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Max")
|
429
|
+
expect(batch_result[1]["body"]["data"]["name"]).to eq("Marc")
|
430
|
+
expect(batch_result.last["body"]["type"]).to eq("friends")
|
431
|
+
expect(batch_result.last["body"]["data"]["since"]).to eq("high school")
|
432
|
+
expect(batch_result.last["body"]["start"].split('/').last).to eq(batch_result.first["body"]["self"].split('/').last)
|
433
|
+
expect(batch_result.last["body"]["end"].split('/').last).to eq(batch_result[1]["body"]["self"].split('/').last)
|
413
434
|
end
|
414
435
|
|
415
436
|
it "can create a relationship from an existing node and a newly created node" do
|
416
437
|
node1 = @neo.create_node("name" => "Max", "weight" => 200)
|
417
438
|
batch_result = @neo.batch [:create_node, {"name" => "Marc"}], [:create_relationship, "friends", "{0}", node1, {:since => "high school"}]
|
418
|
-
batch_result.first["body"]["data"]["name"].
|
419
|
-
batch_result.last["body"]["type"].
|
420
|
-
batch_result.last["body"]["data"]["since"].
|
421
|
-
batch_result.last["body"]["start"].split('/').last.
|
422
|
-
batch_result.last["body"]["end"].split('/').last.
|
439
|
+
expect(batch_result.first["body"]["data"]["name"]).to eq("Marc")
|
440
|
+
expect(batch_result.last["body"]["type"]).to eq("friends")
|
441
|
+
expect(batch_result.last["body"]["data"]["since"]).to eq("high school")
|
442
|
+
expect(batch_result.last["body"]["start"].split('/').last).to eq(batch_result.first["body"]["self"].split('/').last)
|
443
|
+
expect(batch_result.last["body"]["end"].split('/').last).to eq(node1["self"].split('/').last)
|
423
444
|
end
|
424
445
|
|
425
446
|
it "can add a newly created node to an index" do
|
426
447
|
key = generate_text(6)
|
427
448
|
value = generate_text
|
428
449
|
batch_result = @neo.batch [:create_node, {"name" => "Max"}], [:add_node_to_index, "test_node_index", key, value, "{0}"]
|
429
|
-
batch_result.first.
|
430
|
-
batch_result.first.
|
450
|
+
expect(batch_result.first).to have_key("id")
|
451
|
+
expect(batch_result.first).to have_key("from")
|
431
452
|
existing_index = @neo.find_node_index("test_node_index", key, value)
|
432
|
-
existing_index.
|
433
|
-
existing_index.first["self"].
|
453
|
+
expect(existing_index).not_to be_nil
|
454
|
+
expect(existing_index.first["self"]).to eq(batch_result.first["body"]["self"])
|
434
455
|
@neo.remove_node_from_index("test_node_index", key, value, batch_result.first["body"]["self"].split('/').last)
|
435
456
|
end
|
436
457
|
|
@@ -440,28 +461,28 @@ describe Neography::Rest do
|
|
440
461
|
node1 = @neo.create_node
|
441
462
|
node2 = @neo.create_node
|
442
463
|
batch_result = @neo.batch [:create_relationship, "friends", node1, node2, {:since => "high school"}], [:add_relationship_to_index, "test_relationship_index", key, value, "{0}"]
|
443
|
-
batch_result.first["body"]["type"].
|
444
|
-
batch_result.first["body"]["data"]["since"].
|
445
|
-
batch_result.first["body"]["start"].split('/').last.
|
446
|
-
batch_result.first["body"]["end"].split('/').last.
|
464
|
+
expect(batch_result.first["body"]["type"]).to eq("friends")
|
465
|
+
expect(batch_result.first["body"]["data"]["since"]).to eq("high school")
|
466
|
+
expect(batch_result.first["body"]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
467
|
+
expect(batch_result.first["body"]["end"].split('/').last).to eq(node2["self"].split('/').last)
|
447
468
|
existing_index = @neo.find_relationship_index("test_relationship_index", key, value)
|
448
|
-
existing_index.
|
449
|
-
existing_index.first["self"].
|
469
|
+
expect(existing_index).not_to be_nil
|
470
|
+
expect(existing_index.first["self"]).to eq(batch_result.first["body"]["self"])
|
450
471
|
end
|
451
472
|
|
452
473
|
it "can reset the properties of a newly created relationship" do
|
453
474
|
node1 = @neo.create_node
|
454
475
|
node2 = @neo.create_node
|
455
476
|
batch_result = @neo.batch [:create_relationship, "friends", node1, node2, {:since => "high school"}], [:reset_relationship_properties, "{0}", {"since" => "college", "dated" => "yes"}]
|
456
|
-
batch_result.first.
|
457
|
-
batch_result.first.
|
477
|
+
expect(batch_result.first).to have_key("id")
|
478
|
+
expect(batch_result.first).to have_key("from")
|
458
479
|
existing_relationship = @neo.get_relationship(batch_result.first["body"]["self"].split('/').last)
|
459
|
-
existing_relationship["type"].
|
460
|
-
existing_relationship["data"]["since"].
|
461
|
-
existing_relationship["data"]["dated"].
|
462
|
-
existing_relationship["start"].split('/').last.
|
463
|
-
existing_relationship["end"].split('/').last.
|
464
|
-
existing_relationship["self"].
|
480
|
+
expect(existing_relationship["type"]).to eq("friends")
|
481
|
+
expect(existing_relationship["data"]["since"]).to eq("college")
|
482
|
+
expect(existing_relationship["data"]["dated"]).to eq("yes")
|
483
|
+
expect(existing_relationship["start"].split('/').last).to eq(node1["self"].split('/').last)
|
484
|
+
expect(existing_relationship["end"].split('/').last).to eq(node2["self"].split('/').last)
|
485
|
+
expect(existing_relationship["self"]).to eq(batch_result.first["body"]["self"])
|
465
486
|
end
|
466
487
|
|
467
488
|
it "can kitchen sink" do
|
@@ -474,7 +495,7 @@ describe Neography::Rest do
|
|
474
495
|
[:add_node_to_index, "test_node_index", key, value, "{1}"]
|
475
496
|
[:create_relationship, "friends", "{0}", "{1}", {:since => "college"}]
|
476
497
|
[:add_relationship_to_index, "test_relationship_index", key, value, "{4}"]
|
477
|
-
batch_result.
|
498
|
+
expect(batch_result).not_to be_nil
|
478
499
|
end
|
479
500
|
|
480
501
|
it "can get multiple relationships" do
|
@@ -484,15 +505,15 @@ describe Neography::Rest do
|
|
484
505
|
new_relationship1 = @neo.create_relationship("friends", node1, node2)
|
485
506
|
new_relationship2 = @neo.create_relationship("brothers", node1, node3)
|
486
507
|
batch_result = @neo.batch [:get_node_relationships, node1]
|
487
|
-
batch_result.first["body"].length.
|
488
|
-
batch_result.first["body"][0]["type"].
|
489
|
-
batch_result.first["body"][0]["start"].split('/').last.
|
490
|
-
batch_result.first["body"][0]["end"].split('/').last.
|
491
|
-
batch_result.first["body"][0]["self"].
|
492
|
-
batch_result.first["body"][1]["type"].
|
493
|
-
batch_result.first["body"][1]["start"].split('/').last.
|
494
|
-
batch_result.first["body"][1]["end"].split('/').last.
|
495
|
-
batch_result.first["body"][1]["self"].
|
508
|
+
expect(batch_result.first["body"].length).to be(2)
|
509
|
+
expect(batch_result.first["body"][0]["type"]).to eq("friends")
|
510
|
+
expect(batch_result.first["body"][0]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
511
|
+
expect(batch_result.first["body"][0]["end"].split('/').last).to eq(node2["self"].split('/').last)
|
512
|
+
expect(batch_result.first["body"][0]["self"]).to eq(new_relationship1["self"])
|
513
|
+
expect(batch_result.first["body"][1]["type"]).to eq("brothers")
|
514
|
+
expect(batch_result.first["body"][1]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
515
|
+
expect(batch_result.first["body"][1]["end"].split('/').last).to eq(node3["self"].split('/').last)
|
516
|
+
expect(batch_result.first["body"][1]["self"]).to eq(new_relationship2["self"])
|
496
517
|
end
|
497
518
|
|
498
519
|
it "can get relationships of specific type" do
|
@@ -502,11 +523,11 @@ describe Neography::Rest do
|
|
502
523
|
new_relationship1 = @neo.create_relationship("friends", node1, node2)
|
503
524
|
new_relationship2 = @neo.create_relationship("brothers", node1, node3)
|
504
525
|
batch_result = @neo.batch [:get_node_relationships, node1, "out", "friends"]
|
505
|
-
batch_result.first["body"].length.
|
506
|
-
batch_result.first["body"][0]["type"].
|
507
|
-
batch_result.first["body"][0]["start"].split('/').last.
|
508
|
-
batch_result.first["body"][0]["end"].split('/').last.
|
509
|
-
batch_result.first["body"][0]["self"].
|
526
|
+
expect(batch_result.first["body"].length).to be(1)
|
527
|
+
expect(batch_result.first["body"][0]["type"]).to eq("friends")
|
528
|
+
expect(batch_result.first["body"][0]["start"].split('/').last).to eq(node1["self"].split('/').last)
|
529
|
+
expect(batch_result.first["body"][0]["end"].split('/').last).to eq(node2["self"].split('/').last)
|
530
|
+
expect(batch_result.first["body"][0]["self"]).to eq(new_relationship1["self"])
|
510
531
|
end
|
511
532
|
|
512
533
|
it "can create a relationship from a unique node" do
|
@@ -514,7 +535,7 @@ describe Neography::Rest do
|
|
514
535
|
[:add_node_to_index, "person_ssn", "ssn", "000-00-0001", "{0}"],
|
515
536
|
[:create_unique_node, "person", "ssn", "000-00-0001", {:first_name=>"Jane", :last_name=>"Doe", :ssn=>"000-00-0001", :_type=>"Person", :created_at=>1335269478}],
|
516
537
|
[:create_relationship, "has", "{0}", "{2}", {}]
|
517
|
-
batch_result.
|
538
|
+
expect(batch_result).not_to be_nil
|
518
539
|
|
519
540
|
# create_unique_node is returning an index result, not a node, so we can't do this yet.
|
520
541
|
# See https://github.com/neo4j/community/issues/697
|
@@ -532,12 +553,12 @@ describe Neography::Rest do
|
|
532
553
|
[:create_node, {:street1=>"94437 Kemmer Crossing", :street2=>"Apt. 333", :city=>"Abshireton", :state=>"AA", :zip=>"65820", :_type=>"Address", :created_at=>1335269478}],
|
533
554
|
[:create_relationship, "has", "{0}", "{2}", {}]
|
534
555
|
rescue Neography::NeographyError => e
|
535
|
-
e.message.
|
536
|
-
e.code.
|
537
|
-
e.stacktrace.
|
538
|
-
e.request[:path].
|
539
|
-
e.request[:body].
|
540
|
-
e.index.
|
556
|
+
expect(e.message).to eq("Not Found")
|
557
|
+
expect(e.code).to eq(404)
|
558
|
+
expect(e.stacktrace).to be_nil
|
559
|
+
expect(e.request[:path]).to eq("/db/data/batch")
|
560
|
+
expect(e.request[:body]).not_to be_nil
|
561
|
+
expect(e.index).to eq(3)
|
541
562
|
end
|
542
563
|
end
|
543
564
|
|