riak_json 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,163 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2013" Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'helper'
22
+
23
+ describe "a RiakJson Client" do
24
+ context "when created" do
25
+ it "has an empty collection cache" do
26
+ rj_test_client.collection_cache.must_be_empty
27
+ end
28
+
29
+ it "has a riak host and port" do
30
+ client = rj_test_client
31
+ client.host.must_equal @rj_client.host
32
+ client.port.must_equal @rj_client.port
33
+ end
34
+
35
+ it "initializes a transport object" do
36
+ client = rj_test_client
37
+ client.transport.must_be_kind_of RiakJson::ClientTransport
38
+ end
39
+ end
40
+
41
+ context "knows the URLs to Riak and RiakJSON API endpoints" do
42
+ it "knows riak cluster and riakjson urls" do
43
+ client = rj_test_client
44
+ client.base_riak_url.wont_be_empty
45
+ client.base_riak_json_url.wont_be_empty
46
+ end
47
+ it "knows riakjson collection url" do
48
+ client = rj_test_client
49
+ client.base_collection_url.wont_be_empty
50
+ end
51
+ end
52
+
53
+ it "uses its collection cache when instantiating collections" do
54
+ client = rj_test_client
55
+ collection1 = client.collection('ruby_test_collection')
56
+ collection2 = client.collection('ruby_test_collection')
57
+ collection1.must_be_same_as collection2, "Client uses collection cache, collection1 and collection2 should be identical"
58
+ end
59
+
60
+ it "reads JSON objects from collections" do
61
+ client = rj_test_client
62
+ collection_name = 'ruby_test_collection'
63
+ test_key = 'document-key-123'
64
+ client.transport = MiniTest::Mock.new
65
+
66
+ # Test that a client.get_json_object call results in an HTTP GET request to /collection_name/key
67
+ client.transport.expect :send_request, nil, ["#{client.base_collection_url}/#{collection_name}/document-key-123", :get]
68
+ client.get_json_object(collection_name, test_key)
69
+ client.transport.verify
70
+ end
71
+
72
+ it "writes a new JSON object to a collection with a specified key" do
73
+ client = rj_test_client
74
+ collection_name = 'ruby_test_collection'
75
+ test_key = 'document-key-123'
76
+ test_json = { 'field_one' => '123', 'field_two' => 'abc' }.to_json
77
+ client.transport = MiniTest::Mock.new
78
+
79
+ # Test that a client.insert_json_object call results in an HTTP PUT request to /collection_name/key
80
+ client.transport.expect :send_request, nil, ["#{client.base_collection_url}/#{collection_name}/document-key-123", :put, test_json]
81
+ client.insert_json_object(collection_name, test_key, test_json)
82
+ client.transport.verify
83
+ end
84
+
85
+ it "updates an existing JSON object in a collection" do
86
+ client = rj_test_client
87
+ collection_name = 'ruby_test_collection'
88
+ test_key = 'document-key-123'
89
+ test_json = { 'field_one' => '123', 'field_two' => 'abc' }.to_json
90
+ client.transport = MiniTest::Mock.new
91
+
92
+ # Test that a client.update_json_object call results in an HTTP PUT request to /collection_name/key
93
+ client.transport.expect :send_request, nil, ["#{client.base_collection_url}/#{collection_name}/document-key-123", :put, test_json]
94
+ client.update_json_object(collection_name, test_key, test_json)
95
+ client.transport.verify
96
+ end
97
+
98
+ it "raises an exception if updating a JSON object with no key" do
99
+ client = rj_test_client
100
+ collection_name = 'ruby_test_collection'
101
+ nil_key = nil
102
+ test_json = { 'field_one' => '123', 'field_two' => 'abc' }.to_json
103
+
104
+ lambda { client.update_json_object(collection_name, nil, test_json) }.must_raise Exception
105
+ end
106
+
107
+ it "deletes an existing JSON object in a collection" do
108
+ client = rj_test_client
109
+ collection_name = 'ruby_test_collection'
110
+ test_key = 'document-key-123'
111
+ client.transport = MiniTest::Mock.new
112
+
113
+ # Test that a client.delete_json_object call results in an HTTP DELETE request to /collection_name/key
114
+ client.transport.expect :send_request, nil, ["#{client.base_collection_url}/#{collection_name}/document-key-123", :delete]
115
+ client.delete_json_object(collection_name, test_key)
116
+ client.transport.verify
117
+ end
118
+
119
+ context "performs document Schema administration" do
120
+ it "sets a schema json object into a collection's schema api endpoint" do
121
+ client = rj_test_client
122
+ collection_name = 'ruby_test_collection'
123
+ client.transport = MiniTest::Mock.new
124
+ schema_json = [{
125
+ :name => "field_one",
126
+ :type => "string",
127
+ :require => true
128
+ }, {
129
+ :name => "field_two",
130
+ :type => "text",
131
+ :require => false
132
+ }].to_json
133
+
134
+ client.transport.expect :send_request, nil, ["#{client.base_collection_url}/#{collection_name}/schema", :put, schema_json]
135
+ client.set_schema_json(collection_name, schema_json)
136
+ client.transport.verify
137
+ end
138
+ end
139
+
140
+ context "sends JSON queries to retrieve documents" do
141
+ it "sends requests to /query/one" do
142
+ client = rj_test_client
143
+ collection_name = 'ruby_test_collection'
144
+ client.transport = MiniTest::Mock.new
145
+ query_json = {:company_name => 'Basho Technologies'}.to_json
146
+
147
+ client.transport.expect :send_request, nil, ["#{client.base_collection_url}/#{collection_name}/query/one", :put, query_json]
148
+ client.get_query_one(collection_name, query_json)
149
+ client.transport.verify
150
+ end
151
+
152
+ it "sends requests to /query/all" do
153
+ client = rj_test_client
154
+ collection_name = 'cities'
155
+ client.transport = MiniTest::Mock.new
156
+ query_json = {:country => 'USA'}.to_json
157
+
158
+ client.transport.expect :send_request, nil, ["#{client.base_collection_url}/#{collection_name}/query/all", :put, query_json]
159
+ client.get_query_all(collection_name, query_json)
160
+ client.transport.verify
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,27 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2013" Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'helper'
22
+
23
+ describe "a RiakJson ClientTransport" do
24
+ it "is instantiated to enable the Client to make REST calls" do
25
+ transport = RiakJson::ClientTransport.new
26
+ end
27
+ end
@@ -0,0 +1,111 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2013" Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'helper'
22
+
23
+ describe "a RiakJson Collection Schema" do
24
+ context "builds a schema definition by adding fields" do
25
+ it "initializes to an empty fields list" do
26
+ schema = RiakJson::CollectionSchema.new
27
+ schema.fields.must_be_empty
28
+ schema.fields.count.must_equal 0
29
+ end
30
+
31
+ it "can add field definitions with type passed in" do
32
+ schema = RiakJson::CollectionSchema.new
33
+ schema.add_field(:text, :city, true)
34
+ schema.fields.count.must_equal 1
35
+ schema.fields[0][:name].must_equal 'city'
36
+ schema.fields[0][:type].must_equal 'text'
37
+ schema.fields[0][:require].must_equal true
38
+
39
+ lambda { schema.add_field(:invalid_type, :state) }.must_raise Exception, "Invalid field type"
40
+ end
41
+
42
+ it "can add a text field to the schema definition" do
43
+ # schema = [{
44
+ # :name => "city",
45
+ # :type => "text",
46
+ # :require => true
47
+ # }]
48
+ schema = RiakJson::CollectionSchema.new
49
+ schema.add_text_field(name='city', required=true)
50
+ schema.fields.count.must_equal 1
51
+ schema.fields[0][:name].must_equal 'city'
52
+ schema.fields[0][:type].must_equal 'text'
53
+ schema.fields[0][:require].must_equal true
54
+ end
55
+
56
+ it "can add a string field to the schema definition" do
57
+ # schema = [{
58
+ # :name => "state",
59
+ # :type => "string",
60
+ # :require => false
61
+ # }]
62
+ schema = RiakJson::CollectionSchema.new
63
+ schema.add_string_field(name='state') # required: false by default
64
+ schema.fields.count.must_equal 1
65
+ schema.fields[0][:name].must_equal 'state'
66
+ schema.fields[0][:type].must_equal 'string'
67
+ schema.fields[0][:require].must_equal false
68
+ end
69
+
70
+ it "can add a multi_string field to the schema definition" do
71
+ # schema = [{
72
+ # :name => "zip_codes",
73
+ # :type => "multi_string",
74
+ # :require => true
75
+ # }]
76
+ schema = RiakJson::CollectionSchema.new
77
+ schema.add_multi_string_field(name='zip_codes', required=true)
78
+ schema.fields.count.must_equal 1
79
+ schema.fields[0][:name].must_equal 'zip_codes'
80
+ schema.fields[0][:type].must_equal 'multi_string'
81
+ schema.fields[0][:require].must_equal true
82
+ end
83
+
84
+ it "can add an integer field to the schema definition" do
85
+ # schema = [{
86
+ # :name => "population",
87
+ # :type => "integer",
88
+ # :require => false
89
+ # }]
90
+ schema = RiakJson::CollectionSchema.new
91
+ schema.add_integer_field(name='population', required=false)
92
+ schema.fields.count.must_equal 1
93
+ schema.fields[0][:name].must_equal 'population'
94
+ schema.fields[0][:type].must_equal 'integer'
95
+ schema.fields[0][:require].must_equal false
96
+ end
97
+
98
+ it "builds a json object representation" do
99
+ schema = RiakJson::CollectionSchema.new
100
+ schema.add_text_field(name='city', required=true)
101
+ schema.add_string_field(name='state')
102
+
103
+ # This can be stored via collection.set_schema
104
+ schema_json = schema.build
105
+
106
+ fields_array = JSON.parse(schema_json)
107
+ fields_array.count.must_equal 2
108
+ fields_array[0]['name'].must_equal 'city'
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,281 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2013" Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'helper'
22
+
23
+ describe "a RiakJson Collection" do
24
+ context "when created" do
25
+ it "has a name" do
26
+ client = rj_test_client
27
+ collection_name = 'ruby_test_collection'
28
+ collection = client.collection(collection_name) # create a new collection object
29
+ collection.name.must_equal collection_name
30
+ end
31
+
32
+ it "requires a name" do
33
+ client = rj_test_client # in helper.rb
34
+ lambda { client.collection() }.must_raise ArgumentError
35
+ end
36
+
37
+ it "cannot have an empty or nil name" do
38
+ client = rj_test_client # in helper.rb
39
+ lambda { client.collection(nil) }.must_raise ArgumentError, "A collection cannot have a nil string name"
40
+ lambda { client.collection('') }.must_raise ArgumentError, "A collection cannot have an empty string name"
41
+ end
42
+
43
+ it "has a client/connection" do
44
+ client = rj_test_client
45
+ collection_name = 'ruby_test_collection'
46
+ collection = client.collection(collection_name) # create a new collection object
47
+ collection.client.must_be_kind_of(RiakJson::Client)
48
+ end
49
+ end
50
+
51
+ context "uses the Client to read and write raw JSON objects to a collection" do
52
+ it "gets a raw JSON object for a collection/key" do
53
+ client = rj_test_client
54
+ collection_name = 'ruby_test_collection'
55
+ collection = client.collection(collection_name) # create a new collection object
56
+ test_key = 'document-key-123'
57
+
58
+ # Test that a collection.insert_raw_json(doc) results in a call to client.insert_json_object
59
+ collection.client = MiniTest::Mock.new
60
+ collection.client.expect :get_json_object, nil, [collection_name, test_key]
61
+ collection.get_raw_json(test_key)
62
+ collection.client.verify
63
+ end
64
+
65
+ it "inserts a raw JSON object into a collection/key" do
66
+ client = rj_test_client
67
+ collection_name = 'ruby_test_collection'
68
+ collection = client.collection(collection_name) # create a new collection object
69
+
70
+ test_key = 'document-key-123'
71
+ json_obj = { 'field_one' => '123', 'field_two' => 'abc' }.to_json
72
+
73
+ # Test that a collection.insert_raw_json(doc) results in a call to client.insert_json_object
74
+ collection.client = MiniTest::Mock.new
75
+ collection.client.expect :insert_json_object, nil, [collection_name, test_key, json_obj]
76
+ collection.insert_raw_json(test_key, json_obj)
77
+ collection.client.verify
78
+ end
79
+
80
+ it "updates a raw JSON object into a collection/key" do
81
+ client = rj_test_client
82
+ collection_name = 'ruby_test_collection'
83
+ collection = client.collection(collection_name) # create a new collection object
84
+
85
+ test_key = 'document-key-123'
86
+ json_obj = { 'field_one' => '123', 'field_two' => 'abc' }.to_json
87
+
88
+ # Test that a collection.update_raw_json(doc) results in a call to client.update_json_object
89
+ collection.client = MiniTest::Mock.new
90
+ collection.client.expect :update_json_object, nil, [collection_name, test_key, json_obj]
91
+ collection.update_raw_json(test_key, json_obj)
92
+ collection.client.verify
93
+ end
94
+
95
+ it "deletes a raw JSON object for a collection/key" do
96
+ client = rj_test_client
97
+ collection_name = 'ruby_test_collection'
98
+ collection = client.collection(collection_name) # create a new collection object
99
+ test_key = 'document-key-123'
100
+
101
+ # Test that a collection.delete_raw_json(doc) results in a call to client.delete_json_object
102
+ collection.client = MiniTest::Mock.new
103
+ collection.client.expect :delete_json_object, nil, [collection_name, test_key]
104
+ collection.delete_raw_json(test_key)
105
+ collection.client.verify
106
+ end
107
+ end
108
+
109
+ context "administers Schemas for collections" do
110
+ it "sets a schema object for a collection" do
111
+ client = rj_test_client
112
+ collection_name = 'ruby_test_collection-new'
113
+ collection = client.collection(collection_name)
114
+ collection.has_schema?.must_equal false
115
+ schema_json = [{
116
+ :name => "field_one",
117
+ :type => "string",
118
+ :require => true
119
+ }, {
120
+ :name => "field_two",
121
+ :type => "text",
122
+ :require => false
123
+ }].to_json
124
+
125
+ collection.client = MiniTest::Mock.new
126
+ collection.client.expect :set_schema_json, nil, [collection_name, schema_json]
127
+ collection.set_schema(schema_json)
128
+ collection.client.verify
129
+ end
130
+
131
+ it "gets a schema object for a collection" do
132
+ client = rj_test_client
133
+ collection_name = 'ruby_test_collection'
134
+ collection = client.collection(collection_name)
135
+
136
+ collection.client = MiniTest::Mock.new
137
+ collection.client.expect :get_schema, nil, [collection_name]
138
+ collection.get_schema
139
+ collection.client.verify
140
+ end
141
+ end
142
+
143
+ context "can write and delete Documents, and load them by key" do
144
+ it "can load a document by its key" do
145
+ client = rj_test_client
146
+ collection_name = 'ruby_test_collection'
147
+ collection = client.collection(collection_name)
148
+
149
+ test_key = 'key-123'
150
+ returned_json = '{"field_one": "abc"}' # Value mock-loaded from RiakJson
151
+
152
+ client = MiniTest::Mock.new
153
+ client.expect :get_json_object, returned_json, [collection_name, test_key]
154
+ collection.client = client
155
+
156
+ document = collection.find_by_key(test_key)
157
+ client.verify
158
+ document.must_be_kind_of RiakJson::Document
159
+ document.key.must_equal test_key
160
+ end
161
+
162
+ it "can insert a Document" do
163
+ client = rj_test_client
164
+ collection_name = 'ruby_test_collection'
165
+ collection = client.collection(collection_name)
166
+
167
+ # A Collection performs an insert by invoking doc.key and doc.to_json
168
+ # and then sending along the raw json object to its client
169
+ test_key = 'key-123'
170
+ test_json = { 'field_one' => 'abc' }
171
+ doc = RiakJson::Document.new(test_key, test_json)
172
+
173
+ client = MiniTest::Mock.new
174
+ client.expect :insert_json_object, nil, [collection_name, test_key, String]
175
+ collection.client = client
176
+
177
+ collection.insert(doc)
178
+ client.verify
179
+ end
180
+
181
+ it "can update a Document" do
182
+ client = rj_test_client
183
+ collection_name = 'ruby_test_collection'
184
+ collection = client.collection(collection_name)
185
+
186
+ # A Collection performs an update by invoking doc.key and doc.to_json
187
+ # and then sending along the raw json object to its client
188
+ test_key = 'key-123'
189
+ test_json = { 'field_one' => 'abc' }
190
+ doc = RiakJson::Document.new(test_key, test_json)
191
+
192
+ client = MiniTest::Mock.new
193
+ client.expect :update_json_object, nil, [collection_name, test_key, String]
194
+ collection.client = client
195
+
196
+ collection.update(doc)
197
+ client.verify
198
+ end
199
+
200
+ it "can remove a Document" do
201
+ client = rj_test_client
202
+ collection_name = 'ruby_test_collection'
203
+ collection = client.collection(collection_name)
204
+
205
+ # A Collection performs a remove by invoking doc.key
206
+ # and then sending along the key to its client
207
+ test_key = 'key-123'
208
+ doc = RiakJson::Document.new(test_key)
209
+
210
+ client = MiniTest::Mock.new
211
+ client.expect :delete_json_object, nil, [collection_name, test_key]
212
+ collection.client = client
213
+
214
+ collection.remove(doc)
215
+ client.verify
216
+ end
217
+ end
218
+
219
+ context "can query to find one or more documents" do
220
+ it "can query for one document via an exact field match" do
221
+ client = rj_test_client
222
+ collection_name = 'ruby_test_collection'
223
+ collection = client.collection(collection_name)
224
+
225
+ query_json = {:company_name => 'Basho Technologies'}.to_json
226
+
227
+ returned_json = '{"company_name": "Basho Technologies", "_id": "basho"}' # Value mock-loaded from RiakJson
228
+
229
+ client = MiniTest::Mock.new
230
+ client.expect :get_query_one, returned_json, [collection_name, query_json]
231
+ collection.client = client
232
+
233
+ document = collection.find_one(query_json)
234
+ collection.client.verify
235
+
236
+ document.must_be_kind_of RiakJson::Document
237
+ document.key.must_equal "basho"
238
+ document['company_name'].must_equal 'Basho Technologies'
239
+ end
240
+
241
+ it "returns an empty QueryResult if a find_all() call returns no documents" do
242
+ client = rj_test_client
243
+ collection_name = 'ruby_test_collection'
244
+ collection = client.collection(collection_name)
245
+
246
+ query = {:company_name => 'nonexistent'}.to_json
247
+ returned_json = '[]'
248
+
249
+ client = MiniTest::Mock.new
250
+ client.expect :get_query_all, returned_json, [collection_name, query]
251
+ collection.client = client
252
+ document = collection.find_all(query)
253
+ collection.client.verify
254
+
255
+ # Now verify the same behavior when the json string returned from server is nil
256
+ returned_json = nil
257
+ client = MiniTest::Mock.new
258
+ client.expect :get_query_all, returned_json, [collection_name, query]
259
+ collection.client = client
260
+ document = collection.find_all(query)
261
+ collection.client.verify
262
+ end
263
+ end
264
+
265
+ it "returns nil if a query_one() call finds no results" do
266
+ client = rj_test_client
267
+ collection_name = 'ruby_test_collection'
268
+ collection = client.collection(collection_name)
269
+
270
+ query_json = {:company_name => 'Basho Technologies'}.to_json
271
+ empty_results_json = [].to_json
272
+
273
+ client = MiniTest::Mock.new
274
+ client.expect :get_query_one, empty_results_json, [collection_name, query_json]
275
+ collection.client = client
276
+
277
+ doc = collection.find_one(query_json)
278
+ collection.client.verify
279
+ doc.must_be_nil
280
+ end
281
+ end
@@ -0,0 +1,67 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2013" Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'helper'
22
+
23
+ describe "a RiakJson Document" do
24
+ context "when initialized" do
25
+ it "has a key" do
26
+ test_key = 'key-123'
27
+ doc = RiakJson::Document.new(test_key)
28
+ doc.key.must_equal test_key
29
+ end
30
+
31
+ it "if created without a body parameter, initializes it to an empty hash" do
32
+ doc = RiakJson::Document.new
33
+ doc.body.must_be_kind_of Hash
34
+ doc.body.must_be_empty
35
+ end
36
+
37
+ it "has a body" do
38
+ test_key = 'key-123'
39
+ test_body = { 'field_one' => '123', 'field_two' => 'abc' }
40
+ doc = RiakJson::Document.new(test_key, test_body)
41
+ doc.body.must_equal test_body
42
+ end
43
+
44
+ it "implements a .to_json_document method" do
45
+ test_key = 'key-123'
46
+ test_body = { 'field_one' => '123', 'field_two' => 'abc' }
47
+ doc = RiakJson::Document.new(test_key, test_body)
48
+ doc.to_json.must_be_kind_of String
49
+ json_str = doc.to_json_document
50
+
51
+ parsed_doc_body = JSON.parse(json_str)
52
+ # Note - a parsed JSON document has keys as strings, not symbols
53
+ parsed_doc_body['field_one'].must_equal '123'
54
+ end
55
+ end
56
+
57
+ it "implements hash style getters and setters for its body" do
58
+ test_key = 'key-123'
59
+ test_body = { 'field_one' => '123', 'field_two' => 'abc' }
60
+ doc = RiakJson::Document.new(test_key, test_body)
61
+
62
+ doc['field_one'].must_equal '123'
63
+
64
+ doc['field_two'] = 'xyz'
65
+ doc.body['field_two'].must_equal 'xyz'
66
+ end
67
+ end
@@ -0,0 +1,30 @@
1
+ ## -------------------------------------------------------------------
2
+ ##
3
+ ## Copyright (c) "2013" Basho Technologies, Inc.
4
+ ##
5
+ ## This file is provided to you under the Apache License,
6
+ ## Version 2.0 (the "License"); you may not use this file
7
+ ## except in compliance with the License. You may obtain
8
+ ## a copy of the License at
9
+ ##
10
+ ## http://www.apache.org/licenses/LICENSE-2.0
11
+ ##
12
+ ## Unless required by applicable law or agreed to in writing,
13
+ ## software distributed under the License is distributed on an
14
+ ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ ## KIND, either express or implied. See the License for the
16
+ ## specific language governing permissions and limitations
17
+ ## under the License.
18
+ ##
19
+ ## -------------------------------------------------------------------
20
+
21
+ require 'helper'
22
+
23
+ describe "a Query" do
24
+ it "can be created manually, from a json object" do
25
+ json = {'country' => 'USA'}.to_json
26
+ query = RiakJson::Query.from_json(json)
27
+ query.must_be_kind_of RiakJson::Query
28
+ query.body = json
29
+ end
30
+ end