ddy_remote_resource 1.0.0.rc2 → 1.0.0.rc3

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.
@@ -8,6 +8,8 @@ RSpec.describe RemoteResource::Base do
8
8
 
9
9
  self.site = 'https://foobar.com'
10
10
 
11
+ attr_accessor :name
12
+
11
13
  end
12
14
  end
13
15
 
@@ -184,47 +186,42 @@ RSpec.describe RemoteResource::Base do
184
186
  end
185
187
 
186
188
  describe '#success?' do
187
- let(:response) { instance_double(RemoteResource::Response) }
188
-
189
- before { allow(dummy).to receive(:_response) { response } }
190
-
191
- context 'when response is successful' do
192
- before { allow(response).to receive(:success?) { true } }
189
+ context 'when last response is successful' do
190
+ it 'returns true' do
191
+ dummy.last_response = instance_double(RemoteResource::Response, success?: true)
193
192
 
194
- context 'and the resource has NO errors present' do
195
- it 'returns true' do
196
- expect(dummy.success?).to eql true
197
- end
193
+ expect(dummy.success?).to eql true
198
194
  end
195
+ end
199
196
 
200
- context 'and the resource has errors present' do
201
- it 'returns false' do
202
- dummy.errors.add :id, 'must be present'
197
+ context 'when last response is successful and (validation) errors are present' do
198
+ it 'returns false' do
199
+ dummy.last_response = instance_double(RemoteResource::Response, success?: true)
200
+ dummy.errors.add(:id, 'is invalid')
203
201
 
204
- expect(dummy.success?).to eql false
205
- end
202
+ expect(dummy.success?).to eql false
206
203
  end
207
204
  end
208
205
 
209
- context 'when response is NOT successful' do
210
- before { allow(response).to receive(:success?) { false } }
211
-
206
+ context 'when last response is NOT successful' do
212
207
  it 'returns false' do
208
+ dummy.last_response = instance_double(RemoteResource::Response, success?: false)
209
+
213
210
  expect(dummy.success?).to eql false
214
211
  end
215
212
  end
216
213
  end
217
214
 
218
215
  describe '#errors?' do
219
- context 'when resource has errors present' do
216
+ context 'when (validation) errors are present' do
220
217
  it 'returns true' do
221
- dummy.errors.add :id, 'must be present'
218
+ dummy.errors.add(:id, 'is invalid')
222
219
 
223
220
  expect(dummy.errors?).to eql true
224
221
  end
225
222
  end
226
223
 
227
- context 'when resource has NO errors present' do
224
+ context 'when (validation) errors are NOT present' do
228
225
  it 'returns false' do
229
226
  expect(dummy.errors?).to eql false
230
227
  end
@@ -232,55 +229,70 @@ RSpec.describe RemoteResource::Base do
232
229
  end
233
230
 
234
231
  describe '#handle_response' do
235
- let(:response) { instance_double(RemoteResource::Response) }
236
-
237
- before { allow(dummy).to receive(:rebuild_resource_from_response) { dummy } }
238
-
239
232
  context 'when the response is a unprocessable_entity' do
240
- before do
241
- allow(response).to receive(:unprocessable_entity?) { true }
233
+ let(:response) { instance_double(RemoteResource::Response, success?: false, unprocessable_entity?: true, attributes: {}, errors: { 'name' => ['is required'] }, meta: {}, request: instance_double(RemoteResource::Request)) }
242
234
 
243
- allow(dummy).to receive(:assign_errors_from_response)
235
+ it 'calls #rebuild_resource_from_response with the response' do
236
+ expect(dummy).to receive(:rebuild_resource_from_response).with(response).and_call_original
237
+ dummy.handle_response(response)
244
238
  end
245
239
 
246
- it 'rebuilds the resource from the response' do
247
- expect(dummy).to receive(:rebuild_resource_from_response).with response
248
- dummy.handle_response response
240
+ it 'calls #assign_errors_from_response with the response' do
241
+ expect(dummy).to receive(:assign_errors_from_response).with(response).and_call_original
242
+ dummy.handle_response(response)
249
243
  end
250
244
 
251
- it 'assigns the errors from the response to the resource' do
252
- expect(dummy).to receive(:assign_errors_from_response).with response
253
- dummy.handle_response response
245
+ it 'returns the same resource' do
246
+ expected_object_id = dummy.object_id
247
+
248
+ expect(dummy.handle_response(response).object_id).to eql expected_object_id
254
249
  end
255
250
  end
256
251
 
257
252
  context 'when the response is NOT a unprocessable_entity' do
258
- before { allow(response).to receive(:unprocessable_entity?) { false } }
253
+ let(:response) { instance_double(RemoteResource::Response, success?: true, unprocessable_entity?: false, attributes: { 'id' => 12, 'name' => 'Mies' }, errors: {}, meta: {}, request: instance_double(RemoteResource::Request)) }
259
254
 
260
- it 'rebuilds the resource from the response' do
261
- expect(dummy).to receive(:rebuild_resource_from_response).with response
262
- dummy.handle_response response
255
+ it 'calls #rebuild_resource_from_response with the response' do
256
+ expect(dummy).to receive(:rebuild_resource_from_response).with(response).and_call_original
257
+ dummy.handle_response(response)
258
+ end
259
+
260
+ it 'does NOT calls #assign_errors_from_response' do
261
+ expect(dummy).not_to receive(:assign_errors_from_response)
262
+ dummy.handle_response(response)
263
263
  end
264
- end
265
- end
266
264
 
267
- describe '#assign_response' do
268
- let(:response) { instance_double(RemoteResource::Response) }
265
+ it 'returns the same resource' do
266
+ expected_object_id = dummy.object_id
269
267
 
270
- it 'assigns the #_response' do
271
- expect{ dummy.assign_response response }.to change{ dummy._response }.from(nil).to response
268
+ expect(dummy.handle_response(response).object_id).to eql expected_object_id
269
+ end
272
270
  end
273
271
  end
274
272
 
275
273
  describe '#assign_errors_from_response' do
276
- let(:response) { instance_double(RemoteResource::Response) }
277
- let(:error_messages_response_body) { double('error_messages_response_body') }
274
+ let(:response) { instance_double(RemoteResource::Response, success?: false, unprocessable_entity?: true, attributes: {}, errors: { 'name' => ['is required'], 'virtual_attribute' => ['is invalid'] }, meta: {}, request: instance_double(RemoteResource::Request)) }
278
275
 
279
- it 'calls the #assign_errors method with the #error_messages_response_body of the response' do
280
- allow(response).to receive(:error_messages_response_body) { error_messages_response_body }
276
+ it 'calls #assign_errors with the errors of the response' do
277
+ expect(dummy).to receive(:assign_errors).with(response.errors).and_call_original
278
+ dummy.assign_errors_from_response(response)
279
+ end
280
+
281
+ it 'assigns the errors of the response' do
282
+ expect(dummy.errors).to be_blank
283
+
284
+ dummy.assign_errors_from_response(response)
285
+
286
+ expect(dummy.errors).to be_present
287
+ expect(dummy.errors[:name]).to match_array ['is required']
288
+ expect(dummy.errors[:base]).to match_array ['is invalid']
289
+ end
290
+ end
281
291
 
282
- expect(dummy).to receive(:assign_errors).with error_messages_response_body
283
- dummy.assign_errors_from_response response
292
+ describe '#_response' do
293
+ it 'warns that the method is deprecated' do
294
+ expect(dummy).to receive(:warn).with('[DEPRECATION] `._response` is deprecated. Please use `.last_response` instead.')
295
+ dummy._response
284
296
  end
285
297
  end
286
298
 
@@ -8,7 +8,7 @@ RSpec.describe RemoteResource::Builder do
8
8
 
9
9
  self.site = 'https://foobar.com'
10
10
 
11
- attr_accessor :username
11
+ attr_accessor :name
12
12
 
13
13
  end
14
14
  end
@@ -16,245 +16,241 @@ RSpec.describe RemoteResource::Builder do
16
16
  let(:dummy_class) { RemoteResource::BuilderDummy }
17
17
  let(:dummy) { dummy_class.new }
18
18
 
19
+ let(:request) { instance_double(RemoteResource::Request) }
20
+ let(:response) { instance_double(RemoteResource::Response, request: request, attributes: {}, meta: { 'total' => 10 }) }
21
+
19
22
  describe '.build_resource_from_response' do
20
- let(:response) { RemoteResource::Response.new double.as_null_object }
21
- let(:sanitized_response_body) do
22
- { "id" => "12", "username" => "foobar" }
23
- end
24
- let(:sanitized_response_meta) do
25
- { 'total' => '1'}
26
- end
23
+ let(:response) { instance_double(RemoteResource::Response, request: request, attributes: { 'id' => 12, 'name' => 'Mies' }, meta: { 'total' => 10 }) }
27
24
 
28
- before do
29
- allow(response).to receive(:sanitized_response_body) { sanitized_response_body }
30
- allow(response).to receive(:sanitized_response_meta) { sanitized_response_meta }
31
- end
25
+ it 'returns the instantiated resource from the response' do
26
+ result = dummy_class.build_resource_from_response(response)
32
27
 
33
- it 'calls the .build_resource' do
34
- expect(dummy_class).to receive(:build_resource).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response), meta: sanitized_response_meta }
35
- dummy_class.build_resource_from_response response
28
+ aggregate_failures do
29
+ expect(result).to be_a dummy_class
30
+ expect(result.id).to eql 12
31
+ expect(result.name).to eql 'Mies'
32
+ end
36
33
  end
37
- end
38
34
 
39
- describe '.build_resource' do
40
- let(:response) { RemoteResource::Response.new double.as_null_object }
41
- let(:response_hash) { dummy_class.send :response_hash, response }
35
+ it 'includes the last request, last response and meta information in the instantiated resource' do
36
+ result = dummy_class.build_resource_from_response(response)
42
37
 
43
- context 'when collection is a Hash' do
44
- let(:collection) do
45
- { "id" => "12", "username" => "foobar" }
38
+ aggregate_failures do
39
+ expect(result.last_request).to eql request
40
+ expect(result.last_response).to eql response
41
+ expect(result.meta).to eql({ 'total' => 10 })
46
42
  end
43
+ end
44
+ end
47
45
 
48
- context 'and response_hash is given' do
49
- it 'instantiates the resource with the collection AND response_hash' do
50
- expect(dummy_class).to receive(:new).with(collection.merge(response_hash)).and_call_original
51
- dummy_class.build_resource collection, response_hash
52
- end
46
+ describe '.build_resource' do
47
+ let(:collection) do
48
+ { 'id' => 12, 'name' => 'Mies' }
49
+ end
53
50
 
54
- it 'returns the resource' do
55
- expect(dummy_class.build_resource collection, response_hash).to be_a dummy_class
56
- end
57
- end
51
+ it 'instantiates the resource from the given collection and options' do
52
+ expect(dummy_class).to receive(:new).with(collection.merge({ meta: 'meta' })).and_call_original
53
+ dummy_class.build_resource(collection, { meta: 'meta' })
54
+ end
58
55
 
59
- context 'and NO response_hash is given' do
60
- it 'instantiates the resource with the collection' do
61
- expect(dummy_class).to receive(:new).with(collection).and_call_original
62
- dummy_class.build_resource collection
63
- end
56
+ it 'returns the instantiated resource' do
57
+ result = dummy_class.build_resource(collection)
64
58
 
65
- it 'returns the resource' do
66
- expect(dummy_class.build_resource collection).to be_a dummy_class
67
- end
59
+ aggregate_failures do
60
+ expect(result).to be_a dummy_class
61
+ expect(result.id).to eql 12
62
+ expect(result.name).to eql 'Mies'
68
63
  end
69
64
  end
70
65
 
71
- context 'when collection is NOT a Hash' do
72
- let(:collection) { [] }
73
-
66
+ context 'when the given collection is NOT a Hash' do
74
67
  it 'returns nil' do
75
- expect(dummy_class.build_resource collection, response_hash).to be_nil
68
+ aggregate_failures do
69
+ expect(dummy_class.build_resource(nil)).to be_nil
70
+ expect(dummy_class.build_resource([])).to be_nil
71
+ expect(dummy_class.build_resource('')).to be_nil
72
+ end
76
73
  end
77
74
  end
78
75
  end
79
76
 
80
77
  describe '.build_collection_from_response' do
81
- let(:response) { RemoteResource::Response.new double.as_null_object }
82
- let(:sanitized_response_body) do
78
+ let(:attributes) do
83
79
  [
84
- { "id" => "10", "username" => "foobar" },
85
- { "id" => "11", "username" => "bazbar" },
86
- { "id" => "12", "username" => "aapmies" }
80
+ { 'id' => 10, 'name' => 'Mies' },
81
+ { 'id' => 11, 'name' => 'Aap' },
82
+ { 'id' => 12, 'name' => 'Noot' }
87
83
  ]
88
84
  end
89
- let(:sanitized_response_meta) do
90
- { 'total' => '3'}
85
+ let(:response) { instance_double(RemoteResource::Response, request: request, attributes: attributes, meta: { 'total' => 10 }) }
86
+
87
+ it 'returns the collection of instantiated resources from the response' do
88
+ result = dummy_class.build_collection_from_response(response)
89
+
90
+ aggregate_failures do
91
+ expect(result).to be_a RemoteResource::Collection
92
+ expect(result[0]).to be_a dummy_class
93
+ expect(result[0].id).to eql 10
94
+ expect(result[0].name).to eql 'Mies'
95
+ expect(result[1]).to be_a dummy_class
96
+ expect(result[1].id).to eql 11
97
+ expect(result[1].name).to eql 'Aap'
98
+ expect(result[2]).to be_a dummy_class
99
+ expect(result[2].id).to eql 12
100
+ expect(result[2].name).to eql 'Noot'
101
+ end
91
102
  end
92
103
 
93
- before do
94
- allow(response).to receive(:sanitized_response_body) { sanitized_response_body }
95
- allow(response).to receive(:sanitized_response_meta) { sanitized_response_meta }
96
- end
104
+ it 'includes the last request, last response and meta information in the collection of instantiated resources' do
105
+ result = dummy_class.build_collection_from_response(response)
97
106
 
98
- it 'calls the .build_collection' do
99
- expect(dummy_class).to receive(:build_collection).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response), meta: sanitized_response_meta }
100
- dummy_class.build_collection_from_response response
107
+ aggregate_failures do
108
+ expect(result.last_request).to eql request
109
+ expect(result.last_response).to eql response
110
+ expect(result.meta).to eql({ 'total' => 10 })
111
+ end
101
112
  end
102
113
  end
103
114
 
104
115
  describe '.build_collection' do
105
- let(:response) { RemoteResource::Response.new double.as_null_object }
106
- let(:response_hash) { dummy_class.send :response_hash, response }
107
-
108
- context 'when collection is an Array' do
109
- let(:collection) do
110
- [
111
- { "id" => "10", "username" => "foobar" },
112
- { "id" => "11", "username" => "bazbar" },
113
- { "id" => "12", "username" => "aapmies" }
114
- ]
115
- end
116
-
117
- context 'and response_hash is given' do
118
- it 'instantiates a RemoteResource::Collection with the class, collection AND response_hash' do
119
- expect(RemoteResource::Collection).to receive(:new).with(dummy_class, collection, response_hash).and_call_original
120
- dummy_class.build_collection collection, response_hash
121
- end
122
-
123
- it 'returns the resources' do
124
- resources = dummy_class.build_collection collection, response_hash
125
- resources.each { |resource| expect(resource).to be_a dummy_class }
126
- end
127
- end
116
+ let(:collection) do
117
+ [
118
+ { 'id' => 10, 'name' => 'Mies' },
119
+ { 'id' => 11, 'name' => 'Aap' },
120
+ { 'id' => 12, 'name' => 'Noot' }
121
+ ]
122
+ end
128
123
 
129
- context 'and NO response_hash is given' do
130
- it 'instantiates a RemoteResource::Collection with the class and collection' do
131
- expect(RemoteResource::Collection).to receive(:new).with(dummy_class, collection, {}).and_call_original
132
- dummy_class.build_collection collection
133
- end
124
+ it 'instantiates collection of resources from the given collection and options' do
125
+ expect(RemoteResource::Collection).to receive(:new).with(dummy_class, collection, { meta: 'meta' }).and_call_original
126
+ dummy_class.build_collection(collection, { meta: 'meta' })
127
+ end
134
128
 
135
- it 'returns the resources' do
136
- resources = dummy_class.build_collection collection
137
- resources.each { |resource| expect(resource).to be_a dummy_class }
138
- end
129
+ it 'returns the collection of instantiated resources' do
130
+ result = dummy_class.build_collection(collection)
131
+
132
+ aggregate_failures do
133
+ expect(result).to be_a RemoteResource::Collection
134
+ expect(result[0]).to be_a dummy_class
135
+ expect(result[0].id).to eql 10
136
+ expect(result[0].name).to eql 'Mies'
137
+ expect(result[1]).to be_a dummy_class
138
+ expect(result[1].id).to eql 11
139
+ expect(result[1].name).to eql 'Aap'
140
+ expect(result[2]).to be_a dummy_class
141
+ expect(result[2].id).to eql 12
142
+ expect(result[2].name).to eql 'Noot'
139
143
  end
140
144
  end
141
145
 
142
- context 'when collection is NOT an Array' do
143
- let(:collection) { {} }
144
-
146
+ context 'when the given collection is NOT an Array' do
145
147
  it 'returns nil' do
146
- expect(dummy_class.build_collection collection, response_hash).to be_nil
148
+ aggregate_failures do
149
+ expect(dummy_class.build_collection(nil)).to be_nil
150
+ expect(dummy_class.build_collection({})).to be_nil
151
+ expect(dummy_class.build_collection('')).to be_nil
152
+ end
147
153
  end
148
154
  end
149
155
  end
150
156
 
151
157
  describe '#rebuild_resource_from_response' do
152
- let(:response) { RemoteResource::Response.new double.as_null_object }
153
- let(:sanitized_response_body) do
154
- { "id" => "12", "username" => "foobar" }
155
- end
156
- let(:sanitized_response_meta) do
157
- { 'total' => '1'}
158
- end
158
+ let(:response) { instance_double(RemoteResource::Response, request: request, attributes: { 'name' => 'Mies' }, meta: { 'total' => 10 }) }
159
159
 
160
- before do
161
- allow(response).to receive(:sanitized_response_body) { sanitized_response_body }
162
- allow(response).to receive(:sanitized_response_meta) { sanitized_response_meta }
163
- end
160
+ before { dummy.id = 12 }
164
161
 
165
- it 'calls the #rebuild_resource' do
166
- expect(dummy).to receive(:rebuild_resource).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response), meta: sanitized_response_meta }
167
- dummy.rebuild_resource_from_response response
168
- end
169
- end
162
+ it 'returns the same resource' do
163
+ expected_object_id = dummy.object_id
170
164
 
171
- describe '#rebuild_resource' do
172
- let(:response) { RemoteResource::Response.new double.as_null_object }
173
- let(:response_hash) { dummy.send :response_hash, response }
165
+ result = dummy.rebuild_resource_from_response(response)
174
166
 
175
- before do
176
- dummy.id = nil
177
- dummy.username = "foo"
167
+ expect(result.object_id).to eql expected_object_id
178
168
  end
179
169
 
180
- context 'when the collection is a Hash' do
181
- let(:collection) do
182
- { "id" => "12", "username" => "foobar" }
170
+ it 'updates the resource from the response' do
171
+ aggregate_failures do
172
+ expect(dummy.id).to eql 12
173
+ expect(dummy.name).to be_blank
183
174
  end
184
175
 
185
- context 'and response_hash is given' do
186
- it 'mass-assigns the attributes of the resource with the collection AND with response_hash' do
187
- expect(dummy.id).to be_nil
188
- expect(dummy.username).to eql 'foo'
189
- expect(dummy._response).to be_nil
190
-
191
- dummy.rebuild_resource collection, response_hash
192
-
193
- expect(dummy.id).to eql '12'
194
- expect(dummy.username).to eql 'foobar'
195
- expect(dummy._response).to be_a RemoteResource::Response
196
- end
176
+ dummy.rebuild_resource_from_response(response)
197
177
 
198
- it 'returns the resource' do
199
- expect(dummy.rebuild_resource collection, response_hash).to be_a dummy_class
200
- end
178
+ aggregate_failures do
179
+ expect(dummy.id).to eql 12
180
+ expect(dummy.name).to eql 'Mies'
201
181
  end
182
+ end
202
183
 
203
- context 'and NO response_hash is given' do
204
- it 'mass-assigns the attributes of the resource with the collection' do
205
- expect(dummy.id).to be_nil
206
- expect(dummy.username).to eql 'foo'
207
- expect(dummy._response).to be_nil
208
-
209
- dummy.rebuild_resource collection
184
+ it 'includes the last request, last response and meta information in the resource' do
185
+ aggregate_failures do
186
+ expect(dummy.last_request).to be_blank
187
+ expect(dummy.last_response).to be_blank
188
+ expect(dummy.meta).to be_blank
189
+ end
210
190
 
211
- expect(dummy.id).to eql '12'
212
- expect(dummy.username).to eql 'foobar'
213
- expect(dummy._response).to be_nil
214
- end
191
+ dummy.rebuild_resource_from_response(response)
215
192
 
216
- it 'returns the resource' do
217
- expect(dummy.rebuild_resource collection).to be_a dummy_class
218
- end
193
+ aggregate_failures do
194
+ expect(dummy.last_request).to eql request
195
+ expect(dummy.last_response).to eql response
196
+ expect(dummy.meta).to eql({ 'total' => 10 })
219
197
  end
220
198
  end
199
+ end
221
200
 
222
- context 'when the collection is something else' do
223
- let(:collection) { 'foobar' }
201
+ describe '#rebuild_resource' do
202
+ let(:collection) do
203
+ { 'name' => 'Mies' }
204
+ end
224
205
 
225
- context 'and response_hash is given' do
226
- it 'assigns the response_hash of the resource' do
227
- expect(dummy.id).to be_nil
228
- expect(dummy.username).to eql 'foo'
229
- expect(dummy._response).to be_nil
206
+ before { dummy.id = 12 }
230
207
 
231
- dummy.rebuild_resource collection, response_hash
208
+ it 'returns the same resource' do
209
+ expected_object_id = dummy.object_id
232
210
 
233
- expect(dummy.id).to be_nil
234
- expect(dummy.username).to eql 'foo'
235
- expect(dummy._response).to be_a RemoteResource::Response
236
- end
211
+ result = dummy.rebuild_resource(collection)
237
212
 
238
- it 'returns the resource' do
239
- expect(dummy.rebuild_resource collection, response_hash).to be_a dummy_class
240
- end
213
+ expect(result.object_id).to eql expected_object_id
214
+ end
215
+
216
+ it 'updates the resource, using mass-assignment, from the given collection and options' do
217
+ expect(dummy).to receive(:attributes=).with(collection.merge({ meta: 'meta' })).and_call_original
218
+ dummy.rebuild_resource(collection, { meta: 'meta' })
219
+ end
220
+
221
+ it 'updates the resource' do
222
+ aggregate_failures do
223
+ expect(dummy.id).to eql 12
224
+ expect(dummy.name).to be_blank
241
225
  end
242
226
 
243
- context 'and NO response_hash is given' do
244
- it 'does NOT assign the response_hash of the resource' do
245
- expect(dummy.id).to be_nil
246
- expect(dummy.username).to eql 'foo'
247
- expect(dummy._response).to be_nil
227
+ dummy.rebuild_resource(collection)
248
228
 
249
- dummy.rebuild_resource collection
229
+ aggregate_failures do
230
+ expect(dummy.id).to eql 12
231
+ expect(dummy.name).to eql 'Mies'
232
+ end
233
+ end
250
234
 
251
- expect(dummy.id).to be_nil
252
- expect(dummy.username).to eql 'foo'
253
- expect(dummy._response).to be_nil
235
+ context 'when the given collection is NOT a Hash' do
236
+ it 'does NOT update the resource' do
237
+ aggregate_failures do
238
+ expect { dummy.rebuild_resource(nil) }.not_to change { dummy.attributes }.from({ id: 12 })
239
+ expect { dummy.rebuild_resource([]) }.not_to change { dummy.attributes }.from({ id: 12 })
240
+ expect { dummy.rebuild_resource('') }.not_to change { dummy.attributes }.from({ id: 12 })
254
241
  end
242
+ end
243
+ end
255
244
 
256
- it 'returns the resource' do
257
- expect(dummy.rebuild_resource collection).to be_a dummy_class
245
+ context 'when the given collection is NOT a Hash and options are given' do
246
+ it 'updates the resource with only the options' do
247
+ aggregate_failures do
248
+ dummy.meta = nil
249
+ expect { dummy.rebuild_resource(nil, meta: { 'total' => 10 }) }.to change { dummy.meta }.to({ 'total' => 10 })
250
+ dummy.meta = nil
251
+ expect { dummy.rebuild_resource([], meta: { 'total' => 10 }) }.to change { dummy.meta }.to({ 'total' => 10 })
252
+ dummy.meta = nil
253
+ expect { dummy.rebuild_resource('', meta: { 'total' => 10 }) }.to change { dummy.meta }.to({ 'total' => 10 })
258
254
  end
259
255
  end
260
256
  end