riak_json 0.0.2

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.
@@ -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