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,152 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe '.where' 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 :created_at, Time
15
+ end
16
+
17
+ let(:response_body) do
18
+ {
19
+ data: [
20
+ {
21
+ id: 12,
22
+ title: 'Lorem Ipsum',
23
+ body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
24
+ created_at: Time.new(2015, 10, 4, 9, 30, 0),
25
+ },
26
+ {
27
+ id: 14,
28
+ title: 'Mauris Purus',
29
+ body: 'Mauris purus urna, ultrices et suscipit ut, faucibus eget mauris.',
30
+ created_at: Time.new(2015, 12, 11, 11, 32, 0),
31
+ },
32
+ {
33
+ id: 16,
34
+ title: 'Vestibulum Commodo',
35
+ body: 'Vestibulum commodo fringilla suscipit.',
36
+ created_at: Time.new(2016, 2, 6, 18, 45, 0),
37
+ },
38
+ ]
39
+ }
40
+ end
41
+
42
+ let(:expected_default_headers) do
43
+ { 'Accept' => 'application/json', 'User-Agent' => "RemoteResource #{RemoteResource::VERSION}" }
44
+ end
45
+
46
+ describe 'default behaviour' do
47
+ let!(:expected_request) do
48
+ mock_request = stub_request(:get, 'https://www.example.com/posts.json')
49
+ mock_request.with(query: { pseudonym: 'pseudonym' }, body: nil, headers: expected_default_headers)
50
+ mock_request.to_return(status: 200, body: response_body.to_json)
51
+ mock_request
52
+ end
53
+
54
+ it 'performs the correct HTTP GET request' do
55
+ Post.where({ pseudonym: 'pseudonym' })
56
+ expect(expected_request).to have_been_requested
57
+ end
58
+
59
+ it 'builds the correct collection of resources' do
60
+ posts = Post.where({ pseudonym: 'pseudonym' })
61
+
62
+ aggregate_failures do
63
+ expect(posts).to respond_to :each
64
+ expect(posts).to all(be_a(Post))
65
+ expect(posts.size).to eql 3
66
+
67
+ expect(posts[0].id).to eql 12
68
+ expect(posts[0].title).to eql 'Lorem Ipsum'
69
+ expect(posts[0].body).to eql 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
70
+ expect(posts[0].created_at).to eql Time.new(2015, 10, 4, 9, 30, 0)
71
+ expect(posts[1].id).to eql 14
72
+ expect(posts[1].title).to eql 'Mauris Purus'
73
+ expect(posts[1].body).to eql 'Mauris purus urna, ultrices et suscipit ut, faucibus eget mauris.'
74
+ expect(posts[1].created_at).to eql Time.new(2015, 12, 11, 11, 32, 0)
75
+ expect(posts[2].id).to eql 16
76
+ expect(posts[2].title).to eql 'Vestibulum Commodo'
77
+ expect(posts[2].body).to eql 'Vestibulum commodo fringilla suscipit.'
78
+ expect(posts[2].created_at).to eql Time.new(2016, 2, 6, 18, 45, 0)
79
+ end
80
+ end
81
+ end
82
+
83
+ describe 'with connection_options[:headers]' do
84
+ let!(:expected_request) do
85
+ mock_request = stub_request(:get, 'https://www.example.com/posts.json')
86
+ mock_request.with(query: { pseudonym: 'pseudonym' }, body: nil, headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
87
+ mock_request.to_return(status: 200, body: response_body.to_json)
88
+ mock_request
89
+ end
90
+
91
+ it 'performs the correct HTTP GET request' do
92
+ Post.where({ pseudonym: 'pseudonym' }, 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) do
99
+ mock_request = stub_request(:get, 'https://www.example.com/posts.json')
100
+ mock_request.with(query: { pseudonym: 'pseudonym' }, body: nil, headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
101
+ mock_request.to_return(status: 404)
102
+ mock_request
103
+ end
104
+
105
+ it 'raises the not found error' do
106
+ expect { Post.where({ pseudonym: 'pseudonym' }, headers: { 'X-Pseudonym' => 'pseudonym' }) }.to raise_error RemoteResource::HTTPNotFound
107
+ end
108
+
109
+ it 'adds metadata to the raised error' do
110
+ begin
111
+ Post.where({ pseudonym: 'pseudonym' }, headers: { 'X-Pseudonym' => 'pseudonym' })
112
+ rescue RemoteResource::HTTPNotFound => error
113
+ aggregate_failures do
114
+ expect(error.message).to eql 'HTTP request failed for Post with response_code=404 with http_action=get with request_url=https://www.example.com/posts.json'
115
+ expect(error.request_url).to eql 'https://www.example.com/posts.json'
116
+ expect(error.response_code).to eql 404
117
+ expect(error.request_query).to eql(RemoteResource::Util.encode_params_to_query({ pseudonym: 'pseudonym' }))
118
+ expect(error.request_headers).to eql(expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ describe 'with a 500 response' do
125
+ let!(:expected_request) do
126
+ mock_request = stub_request(:get, 'https://www.example.com/posts.json')
127
+ mock_request.with(query: { pseudonym: 'pseudonym' }, body: nil, headers: expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
128
+ mock_request.to_return(status: 500)
129
+ mock_request
130
+ end
131
+
132
+ it 'raises the server error' do
133
+ expect { Post.where({ pseudonym: 'pseudonym' }, headers: { 'X-Pseudonym' => 'pseudonym' }) }.to raise_error RemoteResource::HTTPServerError
134
+ end
135
+
136
+ it 'adds metadata to the raised error' do
137
+ begin
138
+ Post.where({ pseudonym: 'pseudonym' }, headers: { 'X-Pseudonym' => 'pseudonym' })
139
+ rescue RemoteResource::HTTPServerError => error
140
+ aggregate_failures do
141
+ expect(error.message).to eql 'HTTP request failed for Post with response_code=500 with http_action=get with request_url=https://www.example.com/posts.json'
142
+ expect(error.request_url).to eql 'https://www.example.com/posts.json'
143
+ expect(error.response_code).to eql 500
144
+ expect(error.request_query).to eql(RemoteResource::Util.encode_params_to_query({ pseudonym: 'pseudonym' }))
145
+ expect(error.request_headers).to eql(expected_default_headers.merge({ 'X-Pseudonym' => 'pseudonym' }))
146
+ end
147
+ end
148
+ end
149
+ end
150
+
151
+
152
+ end
@@ -1,7 +1,7 @@
1
1
  require 'ethon'
2
2
  require_relative '../../../../../lib/extensions/ethon/easy/queryable'
3
3
 
4
- describe Ethon::Easy::Queryable do
4
+ RSpec.describe Ethon::Easy::Queryable, order: :defined do
5
5
 
6
6
  let(:hash) { {} }
7
7
  let!(:easy) { Ethon::Easy.new }
@@ -70,7 +70,7 @@ describe Ethon::Easy::Queryable do
70
70
  end
71
71
 
72
72
  context "when file" do
73
- let(:file) { File.open("spec/spec_helper.rb") }
73
+ let(:file) { File.open("spec/fixtures/text_file.txt") }
74
74
  let(:file_info) { params.method(:file_info).call(file) }
75
75
  let(:hash) { {:a => {:b => [file]}} }
76
76
  let(:mime_type) { file_info[1] }
@@ -82,7 +82,7 @@ describe Ethon::Easy::Queryable do
82
82
  context "when MIME" do
83
83
  context "when mime type" do
84
84
  it "sets mime type to text" do
85
- expect(mime_type).to eq("application/x-ruby")
85
+ expect(mime_type).to eq("text/plain")
86
86
  end
87
87
  end
88
88
 
@@ -132,4 +132,4 @@ describe Ethon::Easy::Queryable do
132
132
  end
133
133
  end
134
134
  end
135
- end
135
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe RemoteResource::Base do
3
+ RSpec.describe RemoteResource::Base do
4
4
 
5
5
  module RemoteResource
6
6
  class Dummy
@@ -22,12 +22,6 @@ describe RemoteResource::Base do
22
22
  specify { expect(described_class.const_defined?('RemoteResource::Querying::FinderMethods')).to be_truthy }
23
23
  specify { expect(described_class.const_defined?('RemoteResource::Querying::PersistenceMethods')).to be_truthy }
24
24
 
25
- describe 'OPTIONS' do
26
- let(:options) { [:base_url, :site, :headers, :version, :path_prefix, :path_postfix, :collection_prefix, :content_type, :collection, :collection_name, :root_element] }
27
-
28
- specify { expect(described_class::OPTIONS).to eql options }
29
- end
30
-
31
25
  describe 'attributes' do
32
26
  it '#id' do
33
27
  expect(dummy.attributes).to have_key :id
@@ -45,7 +39,7 @@ describe RemoteResource::Base do
45
39
  after { described_class.global_headers = nil }
46
40
 
47
41
  it 'sets the global headers Thread variable' do
48
- expect{ described_class.global_headers = global_headers }.to change{ Thread.current[:global_headers] }.from(nil).to global_headers
42
+ expect{ described_class.global_headers = global_headers }.to change{ described_class.global_headers }.from({}).to(global_headers)
49
43
  end
50
44
  end
51
45
 
@@ -90,76 +84,33 @@ describe RemoteResource::Base do
90
84
  end
91
85
 
92
86
  describe '.with_connection_options' do
93
- let(:connection_options) { {} }
94
-
95
- let(:block_with_connection_options) do
96
- dummy_class.with_connection_options(connection_options) do
97
- dummy_class.find_by({ username: 'foobar' }, { content_type: '.json' })
98
- dummy_class.create({ username: 'bazbar' }, { content_type: '.xml' })
99
- end
100
- end
101
-
102
- before { allow_any_instance_of(Typhoeus::Request).to receive(:run) { double.as_null_object } }
103
-
104
87
  it 'yields the block' do
105
- expect(dummy_class).to receive(:find_by).with({ username: 'foobar' }, { content_type: '.json' }).and_call_original
106
- expect(dummy_class).to receive(:create).with({ username: 'bazbar' }, { content_type: '.xml' }).and_call_original
107
- block_with_connection_options
108
- end
109
-
110
- it 'ensures to set the threaded_connection_options Thread variable to nil' do
111
- dummy_class.threaded_connection_options
112
-
113
- expect{ block_with_connection_options }.to change{ Thread.current['remote_resource.dummy.threaded_connection_options'] }.from(an_instance_of(Hash)).to nil
114
- end
88
+ expect(dummy_class).to receive(:find_by).with({ username: 'foobar' }, { path_prefix: '/archive' })
89
+ expect(dummy_class).to receive(:create).with({ username: 'bazbar' }, { path_prefix: '/featured' })
115
90
 
116
- context 'when the given connection_options contain headers' do
117
- let(:connection_options) do
118
- {
119
- headers: { "Foo" => "Bar" }
120
- }
121
- end
122
-
123
- it 'uses the headers of the given connection_options' do
124
- expect(Typhoeus::Request).to receive(:get).with('https://foobar.com/dummy.json', params: { username: 'foobar' }, headers: { "Accept" => "application/json", "Foo" => "Bar" }).and_call_original
125
- expect(Typhoeus::Request).to receive(:post).with('https://foobar.com/dummy.xml', body: { username: 'bazbar' }, headers: { "Accept" => "application/json", "Foo" => "Bar" }).and_call_original
126
- block_with_connection_options
91
+ dummy_class.with_connection_options({ version: '/api/v1', headers: { 'Foo' => 'Bar' } }) do
92
+ dummy_class.find_by({ username: 'foobar' }, { path_prefix: '/archive' })
93
+ dummy_class.create({ username: 'bazbar' }, { path_prefix: '/featured' })
127
94
  end
128
95
  end
129
96
 
130
- context 'when the given connection_options contain base_url' do
131
- let(:connection_options) do
132
- {
133
- base_url: 'https://api.foobar.eu/dummy'
134
- }
135
- end
97
+ it 'ensures to set the threaded_connection_options back to the default' do
98
+ allow(dummy_class).to receive(:find_by)
99
+ allow(dummy_class).to receive(:create)
136
100
 
137
- it 'uses the base_url of the given connection_options' do
138
- expect(Typhoeus::Request).to receive(:get).with('https://api.foobar.eu/dummy.json', params: { username: 'foobar' }, headers: { "Accept" => "application/json" }).and_call_original
139
- expect(Typhoeus::Request).to receive(:post).with('https://api.foobar.eu/dummy.xml', body: { username: 'bazbar' }, headers: { "Accept" => "application/json" }).and_call_original
140
- block_with_connection_options
141
- end
142
- end
101
+ expect(dummy_class.threaded_connection_options).to eql({})
143
102
 
144
- context 'when the given connection_options contain something else' do
145
- let(:connection_options) do
146
- {
147
- collection: true,
148
- path_prefix: '/api',
149
- root_element: :bazbar
150
- }
103
+ dummy_class.with_connection_options({ version: '/api/v1', headers: { 'Foo' => 'Bar' } }) do
104
+ dummy_class.find_by({ username: 'foobar' }, { path_prefix: '/archive' })
105
+ dummy_class.create({ username: 'bazbar' }, { path_prefix: '/featured' })
151
106
  end
152
107
 
153
- it 'uses the given connection_options' do
154
- expect(Typhoeus::Request).to receive(:get).with('https://foobar.com/api/dummies.json', params: { username: 'foobar' }, headers: { "Accept" => "application/json" }).and_call_original
155
- expect(Typhoeus::Request).to receive(:post).with('https://foobar.com/api/dummies.xml', body: { 'bazbar' => { username: 'bazbar' } }, headers: { "Accept" => "application/json" }).and_call_original
156
- block_with_connection_options
157
- end
108
+ expect(dummy_class.threaded_connection_options).to eql({})
158
109
  end
159
110
  end
160
111
 
161
112
  describe '#connection_options' do
162
- it 'instanties as a RemoteResource::ConnectionOptions' do
113
+ it 'instantiates as a RemoteResource::ConnectionOptions' do
163
114
  expect(dummy.connection_options).to be_a RemoteResource::ConnectionOptions
164
115
  end
165
116
 
@@ -168,6 +119,22 @@ describe RemoteResource::Base do
168
119
  end
169
120
  end
170
121
 
122
+ describe '#persistence' do
123
+ context 'when #persisted?' do
124
+ it 'returns the resource' do
125
+ dummy.id = 10
126
+ expect(dummy.persistence).to eql dummy
127
+ end
128
+ end
129
+
130
+ context 'when NOT #persisted?' do
131
+ it 'returns nil' do
132
+ dummy.id = nil
133
+ expect(dummy.persistence).to be_nil
134
+ end
135
+ end
136
+ end
137
+
171
138
  describe '#persisted?' do
172
139
  context 'when id is present' do
173
140
  it 'returns true' do
@@ -176,26 +143,41 @@ describe RemoteResource::Base do
176
143
  end
177
144
  end
178
145
 
179
- context 'when is is NOT present' do
146
+ context 'when id is present and destroyed is present' do
180
147
  it 'returns false' do
148
+ dummy.id = 10
149
+ dummy.destroyed = true
150
+ expect(dummy.persisted?).to eql false
151
+ end
152
+ end
153
+
154
+ context 'when id is NOT present' do
155
+ it 'returns false' do
156
+ dummy.id = nil
157
+ expect(dummy.persisted?).to eql false
158
+ end
159
+ end
160
+
161
+ context 'when id is NOT present and destroyed is present' do
162
+ it 'returns false' do
163
+ dummy.id = nil
164
+ dummy.destroyed = true
181
165
  expect(dummy.persisted?).to eql false
182
166
  end
183
167
  end
184
168
  end
185
169
 
186
170
  describe '#new_record?' do
187
- context 'when instance persisted' do
171
+ context 'when #persisted?' do
188
172
  it 'returns false' do
189
- allow(dummy).to receive(:persisted?) { true }
190
-
173
+ dummy.id = 10
191
174
  expect(dummy.new_record?).to eql false
192
175
  end
193
176
  end
194
177
 
195
- context 'when instance does NOT persist' do
178
+ context 'when NOT #persisted?' do
196
179
  it 'returns true' do
197
- allow(dummy).to receive(:persisted?) { false }
198
-
180
+ dummy.id = nil
199
181
  expect(dummy.new_record?).to eql true
200
182
  end
201
183
  end
@@ -302,43 +284,5 @@ describe RemoteResource::Base do
302
284
  end
303
285
  end
304
286
 
305
- describe '#assign_errors' do
306
- context 'with errors in the error_messages' do
307
- let(:error_messages) do
308
- {
309
- "foo" => ["is required"],
310
- "bar" => ["must be greater than 5"]
311
- }
312
- end
313
-
314
- it 'assigns the error_messages as errors' do
315
- dummy.send :assign_errors, error_messages
316
- expect(dummy.errors.messages).to eql foo: ["is required"], bar: ["must be greater than 5"]
317
- end
318
- end
319
-
320
- context 'with an empty Hash in the error_messages' do
321
- let(:error_messages) do
322
- {}
323
- end
324
-
325
- it 'does NOT assign the error_messages as errors' do
326
- dummy.send :assign_errors, error_messages
327
- expect(dummy.errors.messages).to eql({})
328
- end
329
- end
330
-
331
- context 'with a String in the error_messages' do
332
- let(:error_messages) do
333
- "unauthorized"
334
- end
335
-
336
- it 'does NOT assign the error_messages as errors' do
337
- dummy.send :assign_errors, error_messages
338
- expect(dummy.errors.messages).to eql({})
339
- end
340
- end
341
- end
342
-
343
287
  end
344
288
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe RemoteResource::Builder do
3
+ RSpec.describe RemoteResource::Builder do
4
4
 
5
5
  module RemoteResource
6
6
  class BuilderDummy
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe RemoteResource::Collection do
3
+ RSpec.describe RemoteResource::Collection do
4
4
 
5
5
  module RemoteResource
6
6
  class CollectionDummy
@@ -1,22 +1,25 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe RemoteResource::ConnectionOptions do
3
+ RSpec.describe RemoteResource::ConnectionOptions do
4
4
 
5
5
  module RemoteResource
6
6
  class ConnectionOptionsDummy
7
7
  include RemoteResource::Base
8
8
 
9
9
  self.site = 'https://foobar.com'
10
- self.content_type = ''
11
- self.extra_headers = { "X-Locale" => "nl" }
10
+ self.extension = ''
11
+ self.default_headers = { 'Accept' => 'application/vnd+json' }
12
12
  self.version = '/v1'
13
13
  self.path_prefix = '/prefix'
14
14
  self.path_postfix = '/postfix'
15
- self.content_type = '.json'
16
15
  self.collection_prefix = '/parent/:parent_id'
17
16
  self.collection = true
18
17
  self.root_element = :test_dummy
19
18
 
19
+ def self.headers
20
+ { 'Authorization' => 'Bearer <token>' }
21
+ end
22
+
20
23
  end
21
24
  end
22
25
 
@@ -32,21 +35,21 @@ describe RemoteResource::ConnectionOptions do
32
35
  expect(connection_options.base_class).to eql RemoteResource::ConnectionOptionsDummy
33
36
  end
34
37
 
35
- context 'RemoteResource::Base::OPTIONS' do
38
+ context 'RemoteResource::ConnectionOptions::AVAILABLE_OPTIONS' do
36
39
  it 'calls #initialize_connection_options' do
37
40
  expect_any_instance_of(described_class).to receive(:initialize_connection_options)
38
41
  connection_options
39
42
  end
40
43
 
41
- it 'sets the accessor of the option from the RemoteResource::Base::OPTIONS' do
42
- RemoteResource::Base::OPTIONS.each do |option|
44
+ it 'sets the accessor of the option from the RemoteResource::ConnectionOptions::AVAILABLE_OPTIONS' do
45
+ RemoteResource::ConnectionOptions::AVAILABLE_OPTIONS.each do |option|
43
46
  expect(connection_options).to respond_to "#{option}"
44
47
  expect(connection_options).to respond_to "#{option}="
45
48
  end
46
49
  end
47
50
 
48
- it 'assigns the value of the option from the RemoteResource::Base::OPTIONS' do
49
- RemoteResource::Base::OPTIONS.each do |option|
51
+ it 'assigns the value of the option from the RemoteResource::ConnectionOptions::AVAILABLE_OPTIONS' do
52
+ RemoteResource::ConnectionOptions::AVAILABLE_OPTIONS.each do |option|
50
53
  expect(connection_options.public_send(option)).to eql dummy_class.public_send(option)
51
54
  end
52
55
  end
@@ -57,7 +60,7 @@ describe RemoteResource::ConnectionOptions do
57
60
  let(:custom_connection_options) do
58
61
  {
59
62
  site: 'https://dummy.foobar.com',
60
- content_type: '.xml',
63
+ version: '/api/v2',
61
64
  root_element: :test_dummy_api
62
65
  }
63
66
  end
@@ -66,7 +69,7 @@ describe RemoteResource::ConnectionOptions do
66
69
  connection_options.merge custom_connection_options
67
70
 
68
71
  expect(connection_options.site).to eql 'https://dummy.foobar.com'
69
- expect(connection_options.content_type).to eql '.xml'
72
+ expect(connection_options.version).to eql '/api/v2'
70
73
  expect(connection_options.root_element).to eql :test_dummy_api
71
74
  end
72
75
 
@@ -78,13 +81,13 @@ describe RemoteResource::ConnectionOptions do
78
81
  describe '#to_hash' do
79
82
  let(:connection_options_hash) do
80
83
  {
81
- base_url: 'https://foobar.com/v1/prefix/parent/:parent_id/connection_options_dummies/postfix',
82
84
  site: 'https://foobar.com',
83
- headers: { "Accept" => "application/json", "X-Locale" => "nl" },
85
+ default_headers: { 'Accept' => 'application/vnd+json' },
86
+ headers: { 'Authorization' => 'Bearer <token>' },
84
87
  version: '/v1',
85
88
  path_prefix: '/prefix',
86
89
  path_postfix: '/postfix',
87
- content_type: '.json',
90
+ extension: '',
88
91
  collection_prefix: '/parent/:parent_id',
89
92
  collection: true,
90
93
  collection_name: nil,
@@ -102,7 +105,7 @@ describe RemoteResource::ConnectionOptions do
102
105
  expect(connection_options.reload).not_to eql connection_options
103
106
  end
104
107
 
105
- context 'RemoteResource::Base::OPTIONS' do
108
+ context 'RemoteResource::ConnectionOptions::AVAILABLE_OPTIONS' do
106
109
  it 'calls #initialize_connection_options' do
107
110
  expect_any_instance_of(described_class).to receive(:initialize_connection_options).twice
108
111
  connection_options.reload
@@ -115,7 +118,7 @@ describe RemoteResource::ConnectionOptions do
115
118
  expect(connection_options.reload!).to eql connection_options
116
119
  end
117
120
 
118
- context 'RemoteResource::Base::OPTIONS' do
121
+ context 'RemoteResource::ConnectionOptions::AVAILABLE_OPTIONS' do
119
122
  it 'calls #initialize_connection_options' do
120
123
  expect_any_instance_of(described_class).to receive(:initialize_connection_options).twice
121
124
  connection_options.reload!
@@ -123,4 +126,4 @@ describe RemoteResource::ConnectionOptions do
123
126
  end
124
127
  end
125
128
 
126
- end
129
+ end