ddy_remote_resource 0.4.11 → 1.0.0.rc1

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Guardfile +3 -0
  4. data/lib/remote_resource.rb +77 -34
  5. data/lib/remote_resource/base.rb +20 -8
  6. data/lib/remote_resource/connection.rb +26 -5
  7. data/lib/remote_resource/connection_options.rb +5 -3
  8. data/lib/remote_resource/querying/finder_methods.rb +3 -3
  9. data/lib/remote_resource/querying/persistence_methods.rb +17 -12
  10. data/lib/remote_resource/request.rb +96 -62
  11. data/lib/remote_resource/response.rb +5 -1
  12. data/lib/remote_resource/rest.rb +13 -17
  13. data/lib/remote_resource/url_naming.rb +4 -10
  14. data/lib/remote_resource/url_naming_determination.rb +1 -3
  15. data/lib/remote_resource/util.rb +64 -0
  16. data/lib/remote_resource/version.rb +1 -1
  17. data/remote_resource.gemspec +2 -2
  18. data/spec/fixtures/text_file.txt +1 -0
  19. data/spec/integration/all_spec.rb +166 -0
  20. data/spec/integration/collection_prefix_spec.rb +99 -0
  21. data/spec/integration/create_spec.rb +181 -0
  22. data/spec/integration/destroy_spec.rb +252 -0
  23. data/spec/integration/find_by_spec.rb +168 -0
  24. data/spec/integration/find_spec.rb +139 -0
  25. data/spec/integration/headers_spec.rb +222 -0
  26. data/spec/integration/naming_spec.rb +138 -0
  27. data/spec/integration/save_spec.rb +320 -0
  28. data/spec/integration/update_attributes_spec.rb +221 -0
  29. data/spec/integration/where_spec.rb +152 -0
  30. data/spec/lib/extensions/ethon/easy/queryable_spec.rb +4 -4
  31. data/spec/lib/remote_resource/base_spec.rb +54 -110
  32. data/spec/lib/remote_resource/builder_spec.rb +1 -1
  33. data/spec/lib/remote_resource/collection_spec.rb +1 -1
  34. data/spec/lib/remote_resource/connection_options_spec.rb +20 -17
  35. data/spec/lib/remote_resource/connection_spec.rb +36 -27
  36. data/spec/lib/remote_resource/querying/finder_methods_spec.rb +199 -72
  37. data/spec/lib/remote_resource/querying/persistence_methods_spec.rb +228 -220
  38. data/spec/lib/remote_resource/request_spec.rb +313 -342
  39. data/spec/lib/remote_resource/response_spec.rb +9 -3
  40. data/spec/lib/remote_resource/rest_spec.rb +11 -11
  41. data/spec/lib/remote_resource/url_naming_determination_spec.rb +1 -1
  42. data/spec/lib/remote_resource/url_naming_spec.rb +7 -22
  43. data/spec/lib/remote_resource/util_spec.rb +56 -0
  44. data/spec/lib/remote_resource/version_spec.rb +2 -3
  45. data/spec/spec_helper.rb +37 -0
  46. metadata +33 -22
  47. data/lib/remote_resource/http_errors.rb +0 -33
  48. data/lib/remote_resource/response_handeling.rb +0 -48
@@ -0,0 +1,320 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe '#save' do
4
+
5
+ class Post
6
+ include RemoteResource::Base
7
+
8
+ self.site = 'https://www.example.com'
9
+ self.collection = true
10
+ self.root_element = :data
11
+
12
+ attribute :title, String
13
+ attribute :body, String
14
+ attribute :featured, Boolean
15
+ attribute :created_at, Time
16
+ end
17
+
18
+ let(:response_body) do
19
+ {
20
+ data: {
21
+ id: 12,
22
+ title: 'Lorem Ipsum',
23
+ body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
24
+ featured: false,
25
+ created_at: Time.new(2015, 10, 4, 9, 30, 0),
26
+ }
27
+ }
28
+ end
29
+
30
+ let(:expected_default_headers) do
31
+ { 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'User-Agent' => "RemoteResource #{RemoteResource::VERSION}" }
32
+ end
33
+
34
+ describe 'when resource is persisted' do
35
+ let(:resource) { Post.new(id: 12, title: 'Lorem Ipsum', body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', featured: false, created_at: Time.new(2015, 10, 4, 9, 30, 0)) }
36
+
37
+ let(:expected_request_body) do
38
+ {
39
+ data: {
40
+ title: 'Lorem Ipsum',
41
+ body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
42
+ featured: false,
43
+ created_at: Time.new(2015, 10, 4, 9, 30, 0),
44
+ }
45
+ }
46
+ end
47
+
48
+ describe 'default behaviour' do
49
+ let!(:expected_request) do
50
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
51
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers)
52
+ mock_request.to_return(status: 200, body: JSON.generate(response_body))
53
+ mock_request
54
+ end
55
+
56
+ it 'performs the correct HTTP PATCH request' do
57
+ resource.save
58
+ expect(expected_request).to have_been_requested
59
+ end
60
+
61
+ it 'builds the correct resource' do
62
+ resource.save
63
+
64
+ post = resource
65
+
66
+ aggregate_failures do
67
+ expect(post.persisted?).to eql true
68
+ expect(post.id).to eql 12
69
+ expect(post.title).to eql 'Lorem Ipsum'
70
+ expect(post.body).to eql 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
71
+ expect(post.featured).to eql false
72
+ expect(post.created_at).to eql Time.new(2015, 10, 4, 9, 30, 0)
73
+ end
74
+ end
75
+ end
76
+
77
+ describe 'with connection_options[:headers]' do
78
+ let!(:expected_request) do
79
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
80
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
81
+ mock_request.to_return(status: 200, body: JSON.generate(response_body))
82
+ mock_request
83
+ end
84
+
85
+ it 'performs the correct HTTP PATCH request' do
86
+ resource.save({ headers: { 'X-Pseudonym' => 'pseudonym' } })
87
+ expect(expected_request).to have_been_requested
88
+ end
89
+ end
90
+
91
+ describe 'with a 422 response' do
92
+ let(:response_body) do
93
+ {
94
+ errors: {
95
+ title: ['Please use a title which is more than 5 characters'],
96
+ body: ['Please fill in a body']
97
+ }
98
+ }
99
+ end
100
+
101
+ let(:expected_request_body) do
102
+ {
103
+ data: {
104
+ title: 'Lore',
105
+ body: '',
106
+ featured: true,
107
+ created_at: Time.new(2015, 10, 4, 9, 30, 0),
108
+ }
109
+ }
110
+ end
111
+
112
+ let!(:expected_request) do
113
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
114
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers)
115
+ mock_request.to_return(status: 422, body: JSON.generate(response_body))
116
+ mock_request
117
+ end
118
+
119
+ before do
120
+ resource.title = 'Lore'
121
+ resource.body = ''
122
+ resource.featured = true
123
+ end
124
+
125
+ it 'performs the correct HTTP PATCH request' do
126
+ resource.save
127
+ expect(expected_request).to have_been_requested
128
+ end
129
+
130
+ it 'builds the correct resource with validation errors' do
131
+ resource.save
132
+
133
+ post = resource
134
+
135
+ aggregate_failures do
136
+ expect(post.persisted?).to eql true
137
+ expect(post.id).to eql 12
138
+ expect(post.title).to eql 'Lore'
139
+ expect(post.body).to eql ''
140
+ expect(post.featured).to eql true
141
+ expect(post.created_at).to eql Time.new(2015, 10, 4, 9, 30, 0)
142
+ expect(post.errors.messages[:title]).to eql ['Please use a title which is more than 5 characters']
143
+ expect(post.errors.messages[:body]).to eql ['Please fill in a body']
144
+ end
145
+ end
146
+ end
147
+
148
+ describe 'with a 500 response' do
149
+ let!(:expected_request) do
150
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
151
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
152
+ mock_request.to_return(status: 500)
153
+ mock_request
154
+ end
155
+
156
+ it 'raises the server error' do
157
+ expect { resource.save({ headers: { 'X-Pseudonym' => 'pseudonym' } }) }.to raise_error RemoteResource::HTTPServerError
158
+ end
159
+
160
+ it 'adds metadata to the raised error' do
161
+ begin
162
+ resource.save({ headers: { 'X-Pseudonym' => 'pseudonym' } })
163
+ rescue RemoteResource::HTTPServerError => error
164
+ aggregate_failures do
165
+ expect(error.message).to eql 'HTTP request failed for Post with response_code=500 with http_action=patch with request_url=https://www.example.com/posts/12.json'
166
+ expect(error.request_url).to eql 'https://www.example.com/posts/12.json'
167
+ expect(error.response_code).to eql 500
168
+ expect(error.request_query).to be_nil
169
+ expect(error.request_headers).to eql(expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ describe 'when resource is NOT persisted' do
177
+ let(:resource) { Post.new(title: 'Lorem Ipsum', body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', featured: false) }
178
+
179
+ let(:expected_request_body) do
180
+ {
181
+ data: {
182
+ title: 'Lorem Ipsum',
183
+ body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
184
+ featured: false,
185
+ created_at: nil,
186
+ }
187
+ }
188
+ end
189
+
190
+ describe 'default behaviour' do
191
+ let!(:expected_request) do
192
+ mock_request = stub_request(:post, 'https://www.example.com/posts.json')
193
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers)
194
+ mock_request.to_return(status: 201, body: JSON.generate(response_body))
195
+ mock_request
196
+ end
197
+
198
+ it 'performs the correct HTTP POST request' do
199
+ resource.save
200
+ expect(expected_request).to have_been_requested
201
+ end
202
+
203
+ it 'builds the correct resource' do
204
+ resource.save
205
+
206
+ post = resource
207
+
208
+ aggregate_failures do
209
+ expect(post.persisted?).to eql true
210
+ expect(post.id).to eql 12
211
+ expect(post.title).to eql 'Lorem Ipsum'
212
+ expect(post.body).to eql 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
213
+ expect(post.featured).to eql false
214
+ expect(post.created_at).to eql Time.new(2015, 10, 4, 9, 30, 0)
215
+ end
216
+ end
217
+ end
218
+
219
+ describe 'with connection_options[:headers]' do
220
+ let!(:expected_request) do
221
+ mock_request = stub_request(:post, 'https://www.example.com/posts.json')
222
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
223
+ mock_request.to_return(status: 201, body: JSON.generate(response_body))
224
+ mock_request
225
+ end
226
+
227
+ it 'performs the correct HTTP POST request' do
228
+ resource.save({ headers: { 'X-Pseudonym' => 'pseudonym' } })
229
+ expect(expected_request).to have_been_requested
230
+ end
231
+ end
232
+
233
+ describe 'with a 422 response' do
234
+ let(:response_body) do
235
+ {
236
+ errors: {
237
+ title: ['Please use a title which is more than 5 characters'],
238
+ body: ['Please fill in a body'],
239
+ virtual_attribute: ['You already posted today', 'Please refrain from using curse words']
240
+ }
241
+ }
242
+ end
243
+
244
+ let(:expected_request_body) do
245
+ {
246
+ data: {
247
+ title: 'Lore',
248
+ body: '',
249
+ featured: true,
250
+ created_at: nil
251
+ }
252
+ }
253
+ end
254
+
255
+ let!(:expected_request) do
256
+ mock_request = stub_request(:post, 'https://www.example.com/posts.json')
257
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers)
258
+ mock_request.to_return(status: 422, body: JSON.generate(response_body))
259
+ mock_request
260
+ end
261
+
262
+ before do
263
+ resource.title = 'Lore'
264
+ resource.body = ''
265
+ resource.featured = true
266
+ end
267
+
268
+ it 'performs the correct HTTP POST request' do
269
+ resource.save
270
+ expect(expected_request).to have_been_requested
271
+ end
272
+
273
+ it 'builds the correct resource with validation errors' do
274
+ resource.save
275
+
276
+ post = resource
277
+
278
+ aggregate_failures do
279
+ expect(post.persisted?).to eql false
280
+ expect(post.id).to be_nil
281
+ expect(post.title).to eql 'Lore'
282
+ expect(post.body).to eql ''
283
+ expect(post.featured).to eql true
284
+ expect(post.created_at).to be_blank
285
+ expect(post.errors.messages[:title]).to eql ['Please use a title which is more than 5 characters']
286
+ expect(post.errors.messages[:body]).to eql ['Please fill in a body']
287
+ expect(post.errors.messages[:base]).to eql ['You already posted today', 'Please refrain from using curse words']
288
+ end
289
+ end
290
+ end
291
+
292
+ describe 'with a 500 response' do
293
+ let!(:expected_request) do
294
+ mock_request = stub_request(:post, 'https://www.example.com/posts.json')
295
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
296
+ mock_request.to_return(status: 500)
297
+ mock_request
298
+ end
299
+
300
+ it 'raises the server error' do
301
+ expect { resource.save({ headers: { 'X-Pseudonym' => 'pseudonym' } }) }.to raise_error RemoteResource::HTTPServerError
302
+ end
303
+
304
+ it 'adds metadata to the raised error' do
305
+ begin
306
+ resource.save({ headers: { 'X-Pseudonym' => 'pseudonym' } })
307
+ rescue RemoteResource::HTTPServerError => error
308
+ aggregate_failures do
309
+ expect(error.message).to eql 'HTTP request failed for Post with response_code=500 with http_action=post with request_url=https://www.example.com/posts.json'
310
+ expect(error.request_url).to eql 'https://www.example.com/posts.json'
311
+ expect(error.response_code).to eql 500
312
+ expect(error.request_query).to be_nil
313
+ expect(error.request_headers).to eql(expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
314
+ end
315
+ end
316
+ end
317
+ end
318
+ end
319
+
320
+ end
@@ -0,0 +1,221 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe '#update_attributes' do
4
+
5
+ class Post
6
+ include RemoteResource::Base
7
+
8
+ self.site = 'https://www.example.com'
9
+ self.collection = true
10
+ self.root_element = :data
11
+
12
+ attribute :title, String
13
+ attribute :body, String
14
+ attribute :featured, Boolean
15
+ attribute :created_at, Time
16
+ end
17
+
18
+ let(:resource) { Post.new(id: 12, title: 'Lorem Ipsum', body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', featured: true, created_at: Time.new(2015, 10, 4, 9, 30, 0)) }
19
+
20
+ let(:response_body) do
21
+ {
22
+ data: {
23
+ id: 12,
24
+ title: 'Aliquam lobortis',
25
+ body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
26
+ featured: false,
27
+ created_at: Time.new(2015, 10, 4, 9, 30, 0),
28
+ }
29
+ }
30
+ end
31
+
32
+ let(:expected_default_headers) do
33
+ { 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'User-Agent' => "RemoteResource #{RemoteResource::VERSION}" }
34
+ end
35
+
36
+ describe 'default behaviour' do
37
+ let(:expected_request_body) do
38
+ {
39
+ data: {
40
+ title: 'Aliquam lobortis',
41
+ featured: false
42
+ }
43
+ }
44
+ end
45
+
46
+ let!(:expected_request) do
47
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
48
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers)
49
+ mock_request.to_return(status: 201, body: JSON.generate(response_body))
50
+ mock_request
51
+ end
52
+
53
+ it 'performs the correct HTTP PATCH request' do
54
+ resource.update_attributes(title: 'Aliquam lobortis', featured: false)
55
+ expect(expected_request).to have_been_requested
56
+ end
57
+
58
+ it 'builds the correct resource' do
59
+ resource.update_attributes(title: 'Aliquam lobortis', featured: false)
60
+
61
+ post = resource
62
+
63
+ aggregate_failures do
64
+ expect(post.persisted?).to eql true
65
+ expect(post.id).to eql 12
66
+ expect(post.title).to eql 'Aliquam lobortis'
67
+ expect(post.body).to eql 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
68
+ expect(post.featured).to eql false
69
+ expect(post.created_at).to eql Time.new(2015, 10, 4, 9, 30, 0)
70
+ end
71
+ end
72
+ end
73
+
74
+ describe 'with connection_options[:headers]' do
75
+ let(:expected_request_body) do
76
+ {
77
+ data: {
78
+ title: 'Aliquam lobortis',
79
+ featured: false
80
+ }
81
+ }
82
+ end
83
+
84
+ let!(:expected_request) do
85
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
86
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
87
+ mock_request.to_return(status: 201, body: JSON.generate(response_body))
88
+ mock_request
89
+ end
90
+
91
+ it 'performs the correct HTTP PATCH request' do
92
+ resource.update_attributes({ title: 'Aliquam lobortis', featured: false }, { headers: { 'X-Pseudonym' => 'pseudonym' } })
93
+ expect(expected_request).to have_been_requested
94
+ end
95
+ end
96
+
97
+ describe 'with a 404 response' do
98
+ let(:expected_request_body) do
99
+ {
100
+ data: {
101
+ title: 'Aliquam lobortis',
102
+ featured: false
103
+ }
104
+ }
105
+ end
106
+
107
+ let!(:expected_request) do
108
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
109
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
110
+ mock_request.to_return(status: 404)
111
+ mock_request
112
+ end
113
+
114
+ it 'raises the not found error' do
115
+ expect { resource.update_attributes({ title: 'Aliquam lobortis', featured: false }, { headers: { 'X-Pseudonym' => 'pseudonym' } }) }.to raise_error RemoteResource::HTTPNotFound
116
+ end
117
+
118
+ it 'adds metadata to the raised error' do
119
+ begin
120
+ resource.update_attributes({ title: 'Aliquam lobortis', featured: false }, { headers: { 'X-Pseudonym' => 'pseudonym' } })
121
+ rescue RemoteResource::HTTPNotFound => error
122
+ aggregate_failures do
123
+ expect(error.message).to eql 'HTTP request failed for Post with response_code=404 with http_action=patch with request_url=https://www.example.com/posts/12.json'
124
+ expect(error.request_url).to eql 'https://www.example.com/posts/12.json'
125
+ expect(error.response_code).to eql 404
126
+ expect(error.request_query).to be_nil
127
+ expect(error.request_headers).to eql(expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
128
+ end
129
+ end
130
+ end
131
+ end
132
+
133
+ describe 'with a 422 response' do
134
+ let(:response_body) do
135
+ {
136
+ errors: {
137
+ title: ['Please use a title which is more than 5 characters'],
138
+ body: ['Please fill in a body'],
139
+ virtual_attribute: ['You already posted today', 'Please refrain from using curse words']
140
+ }
141
+ }
142
+ end
143
+
144
+ let(:expected_request_body) do
145
+ {
146
+ data: {
147
+ title: 'Lore',
148
+ body: '',
149
+ featured: false
150
+ }
151
+ }
152
+ end
153
+
154
+ let!(:expected_request) do
155
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
156
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers)
157
+ mock_request.to_return(status: 422, body: JSON.generate(response_body))
158
+ mock_request
159
+ end
160
+
161
+ it 'performs the correct HTTP PATCH request' do
162
+ resource.update_attributes(title: 'Lore', body: '', featured: false)
163
+ expect(expected_request).to have_been_requested
164
+ end
165
+
166
+ it 'builds the correct resource with validation errors' do
167
+ resource.update_attributes(title: 'Lore', body: '', featured: false)
168
+
169
+ post = resource
170
+
171
+ aggregate_failures do
172
+ expect(post.persisted?).to eql true
173
+ expect(post.id).to eql 12
174
+ expect(post.title).to eql 'Lore'
175
+ expect(post.body).to eql ''
176
+ expect(post.featured).to eql false
177
+ expect(post.created_at).to eql Time.new(2015, 10, 4, 9, 30, 0)
178
+ expect(post.errors.messages[:title]).to eql ['Please use a title which is more than 5 characters']
179
+ expect(post.errors.messages[:body]).to eql ['Please fill in a body']
180
+ expect(post.errors.messages[:base]).to eql ['You already posted today', 'Please refrain from using curse words']
181
+ end
182
+ end
183
+ end
184
+
185
+ describe 'with a 500 response' do
186
+ let(:expected_request_body) do
187
+ {
188
+ data: {
189
+ title: 'Aliquam lobortis',
190
+ featured: false
191
+ }
192
+ }
193
+ end
194
+
195
+ let!(:expected_request) do
196
+ mock_request = stub_request(:patch, 'https://www.example.com/posts/12.json')
197
+ mock_request.with(query: nil, body: JSON.generate(expected_request_body), headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
198
+ mock_request.to_return(status: 500)
199
+ mock_request
200
+ end
201
+
202
+ it 'raises the server error' do
203
+ expect { resource.update_attributes({ title: 'Aliquam lobortis', featured: false }, { headers: { 'X-Pseudonym' => 'pseudonym' } }) }.to raise_error RemoteResource::HTTPServerError
204
+ end
205
+
206
+ it 'adds metadata to the raised error' do
207
+ begin
208
+ resource.update_attributes({ title: 'Aliquam lobortis', featured: false }, { headers: { 'X-Pseudonym' => 'pseudonym' } })
209
+ rescue RemoteResource::HTTPServerError => error
210
+ aggregate_failures do
211
+ expect(error.message).to eql 'HTTP request failed for Post with response_code=500 with http_action=patch with request_url=https://www.example.com/posts/12.json'
212
+ expect(error.request_url).to eql 'https://www.example.com/posts/12.json'
213
+ expect(error.response_code).to eql 500
214
+ expect(error.request_query).to be_nil
215
+ expect(error.request_headers).to eql(expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
216
+ end
217
+ end
218
+ end
219
+ end
220
+
221
+ end