neography 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|