contentful 2.16.0 → 2.16.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/lib/contentful/version.rb +1 -1
  4. metadata +3 -370
  5. data/.gitignore +0 -7
  6. data/.rspec +0 -1
  7. data/.rubocop.yml +0 -31
  8. data/.rubocop_todo.yml +0 -35
  9. data/.travis.yml +0 -15
  10. data/.yardopts +0 -4
  11. data/Gemfile +0 -9
  12. data/Guardfile +0 -24
  13. data/RELEASE.md +0 -8
  14. data/Rakefile +0 -33
  15. data/contentful.gemspec +0 -44
  16. data/examples/custom_classes.rb +0 -39
  17. data/examples/example_queries.rb +0 -26
  18. data/examples/raise_errors.rb +0 -20
  19. data/examples/raw_mode.rb +0 -14
  20. data/spec/array_spec.rb +0 -187
  21. data/spec/asset_spec.rb +0 -220
  22. data/spec/auto_includes_spec.rb +0 -12
  23. data/spec/client_class_spec.rb +0 -86
  24. data/spec/client_configuration_spec.rb +0 -394
  25. data/spec/content_type_spec.rb +0 -49
  26. data/spec/deleted_asset_spec.rb +0 -38
  27. data/spec/deleted_entry_spec.rb +0 -38
  28. data/spec/entry_spec.rb +0 -815
  29. data/spec/error_class_spec.rb +0 -327
  30. data/spec/error_requests_spec.rb +0 -87
  31. data/spec/field_spec.rb +0 -95
  32. data/spec/file_spec.rb +0 -33
  33. data/spec/fixtures/json_responses/400_details_errors_object.json +0 -14
  34. data/spec/fixtures/json_responses/400_details_errors_string.json +0 -12
  35. data/spec/fixtures/json_responses/400_details_string.json +0 -8
  36. data/spec/fixtures/json_responses/403_reasons.json +0 -13
  37. data/spec/fixtures/json_responses/404_details_string.json +0 -8
  38. data/spec/fixtures/json_responses/404_id.json +0 -11
  39. data/spec/fixtures/json_responses/404_sys_type.json +0 -12
  40. data/spec/fixtures/json_responses/404_type.json +0 -10
  41. data/spec/fixtures/json_responses/content_type.json +0 -83
  42. data/spec/fixtures/json_responses/default_400.json +0 -7
  43. data/spec/fixtures/json_responses/default_401.json +0 -7
  44. data/spec/fixtures/json_responses/default_403.json +0 -7
  45. data/spec/fixtures/json_responses/default_404.json +0 -7
  46. data/spec/fixtures/json_responses/default_429.json +0 -7
  47. data/spec/fixtures/json_responses/default_500.json +0 -7
  48. data/spec/fixtures/json_responses/default_502.json +0 -7
  49. data/spec/fixtures/json_responses/default_503.json +0 -7
  50. data/spec/fixtures/json_responses/includes.json +0 -111
  51. data/spec/fixtures/json_responses/link_array.json +0 -43
  52. data/spec/fixtures/json_responses/not_found.json +0 -13
  53. data/spec/fixtures/json_responses/nyancat.json +0 -48
  54. data/spec/fixtures/json_responses/other_error.json +0 -9
  55. data/spec/fixtures/json_responses/other_error_no_details.json +0 -8
  56. data/spec/fixtures/json_responses/other_error_no_message.json +0 -8
  57. data/spec/fixtures/json_responses/other_error_no_request_id.json +0 -8
  58. data/spec/fixtures/json_responses/other_error_nothing.json +0 -6
  59. data/spec/fixtures/json_responses/self_link.json +0 -82
  60. data/spec/fixtures/json_responses/unparsable.json +0 -13
  61. data/spec/fixtures/vcr_cassettes/array.yml +0 -288
  62. data/spec/fixtures/vcr_cassettes/array/marshal_custom_classes.yml +0 -159
  63. data/spec/fixtures/vcr_cassettes/array/marshal_unpublished.yml +0 -315
  64. data/spec/fixtures/vcr_cassettes/array/nested_resources.yml +0 -159
  65. data/spec/fixtures/vcr_cassettes/arrayField.yml +0 -87
  66. data/spec/fixtures/vcr_cassettes/array_page_1.yml +0 -106
  67. data/spec/fixtures/vcr_cassettes/array_page_2.yml +0 -73
  68. data/spec/fixtures/vcr_cassettes/asset.yml +0 -96
  69. data/spec/fixtures/vcr_cassettes/asset/select_empty_array.yml +0 -104
  70. data/spec/fixtures/vcr_cassettes/asset/select_no_sys.yml +0 -119
  71. data/spec/fixtures/vcr_cassettes/asset/select_one_field.yml +0 -97
  72. data/spec/fixtures/vcr_cassettes/asset/select_only_sys.yml +0 -88
  73. data/spec/fixtures/vcr_cassettes/asset/with_tags.yml +0 -138
  74. data/spec/fixtures/vcr_cassettes/assets/issues_129.yml +0 -90
  75. data/spec/fixtures/vcr_cassettes/assets/issues_jekyll_46.yml +0 -115
  76. data/spec/fixtures/vcr_cassettes/bad_request.yml +0 -76
  77. data/spec/fixtures/vcr_cassettes/content_type.yml +0 -147
  78. data/spec/fixtures/vcr_cassettes/entries.yml +0 -561
  79. data/spec/fixtures/vcr_cassettes/entries/empty_fields.yml +0 -246
  80. data/spec/fixtures/vcr_cassettes/entries/issue_117.yml +0 -201
  81. data/spec/fixtures/vcr_cassettes/entries/issue_125.yml +0 -198
  82. data/spec/fixtures/vcr_cassettes/entries/rich_text.yml +0 -1707
  83. data/spec/fixtures/vcr_cassettes/entries/rich_text_hydration_issue.yml +0 -460
  84. data/spec/fixtures/vcr_cassettes/entries/rich_text_nested_fields.yml +0 -653
  85. data/spec/fixtures/vcr_cassettes/entries/rich_text_unresolved_relationships.yml +0 -983
  86. data/spec/fixtures/vcr_cassettes/entries/unresolvable_assets.yml +0 -89
  87. data/spec/fixtures/vcr_cassettes/entries/unresolvable_filter.yml +0 -159
  88. data/spec/fixtures/vcr_cassettes/entries/unresolvable_filter_deeply_nested.yml +0 -167
  89. data/spec/fixtures/vcr_cassettes/entry.yml +0 -102
  90. data/spec/fixtures/vcr_cassettes/entry/custom_resource.yml +0 -168
  91. data/spec/fixtures/vcr_cassettes/entry/include_resolution.yml +0 -101
  92. data/spec/fixtures/vcr_cassettes/entry/include_resolution_uniques.yml +0 -81
  93. data/spec/fixtures/vcr_cassettes/entry/json_objects.yml +0 -88
  94. data/spec/fixtures/vcr_cassettes/entry/json_objects_client.yml +0 -86
  95. data/spec/fixtures/vcr_cassettes/entry/marshal_138.yml +0 -159
  96. data/spec/fixtures/vcr_cassettes/entry/marshal_unpublished.yml +0 -303
  97. data/spec/fixtures/vcr_cassettes/entry/marshall.yml +0 -293
  98. data/spec/fixtures/vcr_cassettes/entry/raw.yml +0 -201
  99. data/spec/fixtures/vcr_cassettes/entry/search_link_to_asset.yml +0 -81
  100. data/spec/fixtures/vcr_cassettes/entry/search_link_to_entry.yml +0 -81
  101. data/spec/fixtures/vcr_cassettes/entry/search_link_to_entry_with_custom_query.yml +0 -115
  102. data/spec/fixtures/vcr_cassettes/entry/select_empty_array.yml +0 -111
  103. data/spec/fixtures/vcr_cassettes/entry/select_no_sys.yml +0 -102
  104. data/spec/fixtures/vcr_cassettes/entry/select_one_field.yml +0 -76
  105. data/spec/fixtures/vcr_cassettes/entry/select_one_field_proper.yml +0 -114
  106. data/spec/fixtures/vcr_cassettes/entry/select_only_sys.yml +0 -111
  107. data/spec/fixtures/vcr_cassettes/entry/with_tags.yml +0 -238
  108. data/spec/fixtures/vcr_cassettes/entry_cache.yml +0 -288
  109. data/spec/fixtures/vcr_cassettes/entry_locales.yml +0 -104
  110. data/spec/fixtures/vcr_cassettes/field.yml +0 -147
  111. data/spec/fixtures/vcr_cassettes/human.yml +0 -118
  112. data/spec/fixtures/vcr_cassettes/linkField.yml +0 -83
  113. data/spec/fixtures/vcr_cassettes/locale.yml +0 -83
  114. data/spec/fixtures/vcr_cassettes/locale_from_environment.yml +0 -121
  115. data/spec/fixtures/vcr_cassettes/location.yml +0 -193
  116. data/spec/fixtures/vcr_cassettes/multi_locale_array_reference.yml +0 -196
  117. data/spec/fixtures/vcr_cassettes/multi_locale_reference.yml +0 -214
  118. data/spec/fixtures/vcr_cassettes/not_found.yml +0 -76
  119. data/spec/fixtures/vcr_cassettes/nyancat.yml +0 -102
  120. data/spec/fixtures/vcr_cassettes/query_array_1.yml +0 -89
  121. data/spec/fixtures/vcr_cassettes/query_array_2.yml +0 -89
  122. data/spec/fixtures/vcr_cassettes/ratelimit.yml +0 -64
  123. data/spec/fixtures/vcr_cassettes/ratelimit_retry.yml +0 -294
  124. data/spec/fixtures/vcr_cassettes/reloaded_entry.yml +0 -102
  125. data/spec/fixtures/vcr_cassettes/space.yml +0 -83
  126. data/spec/fixtures/vcr_cassettes/sync_deleted_asset.yml +0 -174
  127. data/spec/fixtures/vcr_cassettes/sync_deleted_entry.yml +0 -89
  128. data/spec/fixtures/vcr_cassettes/sync_deletion.yml +0 -191
  129. data/spec/fixtures/vcr_cassettes/sync_environment.yml +0 -81
  130. data/spec/fixtures/vcr_cassettes/sync_page.yml +0 -637
  131. data/spec/fixtures/vcr_cassettes/sync_page_2.yml +0 -71
  132. data/spec/fixtures/vcr_cassettes/sync_page_short.yml +0 -106
  133. data/spec/fixtures/vcr_cassettes/unauthorized.yml +0 -64
  134. data/spec/fixtures/vcr_cassettes/unavailable.yml +0 -76
  135. data/spec/link_spec.rb +0 -50
  136. data/spec/locale_spec.rb +0 -37
  137. data/spec/location_spec.rb +0 -25
  138. data/spec/request_spec.rb +0 -57
  139. data/spec/resource_building_spec.rb +0 -31
  140. data/spec/response_spec.rb +0 -62
  141. data/spec/space_spec.rb +0 -31
  142. data/spec/spec_helper.rb +0 -14
  143. data/spec/support/client.rb +0 -6
  144. data/spec/support/json_responses.rb +0 -18
  145. data/spec/support/vcr.rb +0 -16
  146. data/spec/sync_page_spec.rb +0 -103
  147. data/spec/sync_spec.rb +0 -180
data/spec/asset_spec.rb DELETED
@@ -1,220 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Contentful::Asset do
4
- let(:asset) { vcr('asset') { create_client.asset('nyancat') } }
5
-
6
- describe 'SystemProperties' do
7
- it 'has a #sys getter returning a hash with symbol keys' do
8
- expect(asset.sys).to be_a Hash
9
- expect(asset.sys.keys.sample).to be_a Symbol
10
- end
11
-
12
- it 'has #id' do
13
- expect(asset.id).to eq 'nyancat'
14
- end
15
-
16
- it 'has #type' do
17
- expect(asset.type).to eq 'Asset'
18
- end
19
-
20
- it 'has #space' do
21
- expect(asset.space).to be_a Contentful::Link
22
- end
23
-
24
- it 'has #created_at' do
25
- expect(asset.created_at).to be_a DateTime
26
- end
27
-
28
- it 'has #updated_at' do
29
- expect(asset.updated_at).to be_a DateTime
30
- end
31
-
32
- it 'has #revision' do
33
- expect(asset.revision).to eq 1
34
- end
35
- end
36
-
37
- describe 'Fields' do
38
- it 'has #title' do
39
- expect(asset.title).to eq 'Nyan Cat'
40
- end
41
-
42
- it 'could have #description' do
43
- expect(asset).to respond_to :description
44
- end
45
-
46
- it 'has #file' do
47
- expect(asset.file).to be_a Contentful::File
48
- end
49
- end
50
-
51
- describe '#image_url' do
52
- it 'returns #url of #file without parameter' do
53
- expect(asset.image_url).to eq asset.file.url
54
- end
55
-
56
- it 'adds image options if given' do
57
- url = asset.image_url(width: 100, format: 'jpg', quality: 50, focus: 'top_right', fit: 'thumb', fl: 'progressive', background: 'rgb:ff0000')
58
- expect(url).to include asset.file.url
59
- expect(url).to include '?w=100&fm=jpg&q=50&f=top_right&bg=rgb%3Aff0000&fit=thumb&fl=progressive'
60
- end
61
- end
62
-
63
- describe '#url' do
64
- it 'returns #url of #file without parameter' do
65
- expect(asset.url).to eq asset.file.url
66
- end
67
-
68
- it 'adds image options if given' do
69
- url = asset.url(width: 100, format: 'jpg', quality: 50, focus: 'top_right', fit: 'thumb', fl: 'progressive', background: 'rgb:ff0000')
70
- expect(url).to include asset.file.url
71
- expect(url).to include '?w=100&fm=jpg&q=50&f=top_right&bg=rgb%3Aff0000&fit=thumb&fl=progressive'
72
- end
73
- end
74
-
75
- it 'can be marshalled' do
76
- marshalled = Marshal.dump(asset)
77
- unmarshalled = Marshal.load(marshalled)
78
-
79
- expect(unmarshalled.title).to eq 'Nyan Cat'
80
- expect(unmarshalled.file).to be_a Contentful::File
81
- end
82
-
83
-
84
- describe 'incoming links' do
85
- let(:client) { create_client }
86
-
87
- it 'will fetch entries referencing the asset using a query' do
88
- vcr('entry/search_link_to_asset') {
89
- entries = client.entries(links_to_asset: 'nyancat')
90
- expect(entries).not_to be_empty
91
- expect(entries.count).to eq 1
92
- expect(entries.first.id).to eq 'nyancat'
93
- }
94
- end
95
-
96
- it 'will fetch entries referencing the entry using instance method' do
97
- vcr('entry/search_link_to_asset') {
98
- entries = asset.incoming_references client
99
- expect(entries).not_to be_empty
100
- expect(entries.count).to eq 1
101
- expect(entries.first.id).to eq 'nyancat'
102
- }
103
- end
104
-
105
- end
106
-
107
- describe 'select operator' do
108
- let(:client) { create_client }
109
-
110
- context 'with sys sent' do
111
- it 'properly creates an entry' do
112
- vcr('asset/select_only_sys') {
113
- asset = client.assets(select: ['sys']).first
114
- expect(asset.fields).to be_empty
115
- expect(asset.sys).not_to be_empty
116
- }
117
- end
118
-
119
- it 'can contain only one field' do
120
- vcr('asset/select_one_field') {
121
- asset = client.assets(select: ['sys', 'fields.file']).first
122
- expect(asset.fields.keys).to eq([:file])
123
- }
124
- end
125
- end
126
-
127
- context 'without sys sent' do
128
- it 'will enforce sys anyway' do
129
- vcr('asset/select_no_sys') {
130
- asset = client.assets(select: ['fields'], 'sys.id' => 'nyancat').first
131
-
132
- expect(asset.id).to eq 'nyancat'
133
- expect(asset.sys).not_to be_empty
134
- }
135
- end
136
-
137
- it 'works with empty array as well, as sys is enforced' do
138
- vcr('asset/select_empty_array') {
139
- asset = client.assets(select: [], 'sys.id' => 'nyancat').first
140
-
141
- expect(asset.id).to eq 'nyancat'
142
- expect(asset.sys).not_to be_empty
143
- }
144
- end
145
- end
146
- end
147
-
148
- describe 'issues' do
149
- it 'serializes files correctly for every locale - #129' do
150
- vcr('assets/issues_129') {
151
- client = create_client(
152
- space: 'bht13amj0fva',
153
- access_token: 'bb703a05e107148bed6ee246a9f6b3678c63fed7335632eb68fe1b689c801534'
154
- )
155
-
156
- asset = client.assets('sys.id' => '14bZJKTr6AoaGyeg4kYiWq', locale: '*').first
157
-
158
- expect(asset.file).to be_a ::Contentful::File
159
- expect(asset.file.file_name).to eq 'Flag_of_the_United_States.svg'
160
-
161
- expect(asset.fields[:file]).to be_a ::Contentful::File
162
- expect(asset.fields[:file].file_name).to eq 'Flag_of_the_United_States.svg'
163
-
164
- expect(asset.fields('es')[:file]).to be_a ::Contentful::File
165
- expect(asset.fields('es')[:file].file_name).to eq 'Flag_of_Spain.svg'
166
- }
167
- end
168
-
169
- it 'properly serializes files for non-default locales on localized requests - jekyll-contentful-data-import #46' do
170
- vcr('assets/issues_jekyll_46') {
171
- client = create_client(
172
- space: 'bht13amj0fva',
173
- access_token: 'bb703a05e107148bed6ee246a9f6b3678c63fed7335632eb68fe1b689c801534',
174
- )
175
-
176
- asset = client.assets('sys.id' => '14bZJKTr6AoaGyeg4kYiWq', locale: 'es').first
177
-
178
- expect(asset.file).to be_a ::Contentful::File
179
- expect(asset.file.file_name).to eq 'Flag_of_Spain.svg'
180
- }
181
- end
182
- end
183
-
184
- describe 'camelCase' do
185
- it 'properties now are accessed with camelcase' do
186
- vcr('asset') {
187
- asset = create_client(use_camel_case: true).asset('nyancat')
188
- expect(asset.file.fileName).to eq 'Nyan_cat_250px_frame.png'
189
- }
190
- end
191
- end
192
-
193
- describe 'tags metadata' do
194
- let(:asset_id) { '686aLBcjj1f47uFWxrepj6' }
195
-
196
- it 'can load an asset with tags' do
197
- vcr('asset/with_tags') {
198
- expect {
199
- asset = create_client.asset(asset_id)
200
- }.not_to raise_error
201
- }
202
- end
203
-
204
- it 'hydrates tags' do
205
- vcr('asset/with_tags') {
206
- asset = create_client.asset(asset_id)
207
- expect(asset._metadata[:tags].first).to be_a Contentful::Link
208
- }
209
- end
210
-
211
- it 'loads tag links with their proper attributes' do
212
- vcr('asset/with_tags') {
213
- asset = create_client.asset(asset_id)
214
- tag = asset._metadata[:tags].first
215
- expect(tag.id).to eq 'mobQa'
216
- expect(tag.link_type).to eq 'Tag'
217
- }
218
- end
219
- end
220
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Auto-include resources' do
4
- let(:entries) { vcr('entries') { create_client.entries } } # entries come with asset includes
5
-
6
- it 'replaces Contentful::Links which are actually included with the resource' do
7
- asset = entries.items[1].fields[:image]
8
-
9
- expect(asset).not_to be_a Contentful::Link
10
- expect(asset).to be_a Contentful::Asset
11
- end
12
- end
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Contentful::Client do
4
- describe '#get' do
5
- let(:client) { create_client() }
6
- let(:proxy_client) { create_client(proxy_host: '183.207.232.194',
7
- proxy_port: 8080,
8
- secure: false) }
9
- let(:timeout_client) { create_client(timeout_connect: 1, timeout_read: 2, timeout_write: 3) }
10
- let(:request) { Contentful::Request.new(nil, client.environment_url('/content_types'), nil, 'cat') }
11
-
12
- it 'uses #base_url' do
13
- expect(client).to receive(:base_url).and_call_original
14
-
15
- vcr('content_type') {
16
- client.get(request)
17
- }
18
- end
19
-
20
- it 'uses #request_headers' do
21
- expect(client).to receive(:request_headers).and_call_original
22
- vcr('content_type') { client.get(request) }
23
- end
24
-
25
- it 'uses Request#url' do
26
- expect(request).to receive(:url).and_call_original
27
- vcr('content_type') { client.get(request) }
28
- end
29
-
30
- it 'uses Request#query' do
31
- expect(request).to receive(:query).thrice.and_call_original
32
- vcr('content_type') { client.get(request) }
33
- end
34
-
35
- it 'calls #get_http' do
36
- expect(client.class).to receive(:get_http).with(client.base_url + request.url, request.query, client.request_headers, client.proxy_params, client.timeout_params) { raw_fixture('content_type') }
37
- client.get(request)
38
- end
39
-
40
- it 'calls #get_http via proxy' do
41
- expect(proxy_client.class).to receive(:get_http).with(proxy_client.base_url + request.url, request.query, proxy_client.request_headers, proxy_client.proxy_params, client.timeout_params) { raw_fixture('content_type') }
42
- proxy_client.get(request)
43
- expect(proxy_client.proxy_params[:host]).to eq '183.207.232.194'
44
- expect(proxy_client.proxy_params[:port]).to eq 8080
45
- end
46
-
47
- describe 'timeout params' do
48
- context 'with timeouts configured' do
49
- it 'calls #get_http with timeouts' do
50
- expect(timeout_client.class).to receive(:get_http).with(timeout_client.base_url + request.url, request.query, timeout_client.request_headers, timeout_client.proxy_params, timeout_client.timeout_params) { raw_fixture('content_type') }
51
- timeout_client.get(request)
52
- expect(timeout_client.timeout_params[:connect]).to eq 1
53
- expect(timeout_client.timeout_params[:read]).to eq 2
54
- expect(timeout_client.timeout_params[:write]).to eq 3
55
- end
56
- end
57
-
58
- context 'without timeouts' do
59
- it 'calls #get_http with timeouts' do
60
- expect(client.class).to receive(:get_http).with(client.base_url + request.url, request.query, client.request_headers, client.proxy_params, client.timeout_params) { raw_fixture('content_type') }
61
- client.get(request)
62
- expect(client.timeout_params).to eq({})
63
- end
64
- end
65
- end
66
-
67
- describe 'build_resources parameter' do
68
- it 'returns Contentful::Resource object if second parameter is true [default]' do
69
- res = vcr('content_type') { client.get(request) }
70
- expect(res).to be_a Contentful::BaseResource
71
- end
72
-
73
- it 'returns a Contentful::Response object if second parameter is not true' do
74
- res = vcr('content_type') { client.get(request, false) }
75
- expect(res).to be_a Contentful::Response
76
- end
77
- end
78
-
79
- end
80
-
81
- describe '#sync' do
82
- it 'creates a new Sync object' do
83
- expect(create_client.sync).to be_a Contentful::Sync
84
- end
85
- end
86
- end
@@ -1,394 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Client Configuration Options' do
4
- describe ':space' do
5
- it 'is required' do
6
- expect do
7
- Contentful::Client.new(access_token: 'b4c0n73n7fu1')
8
- end.to raise_error(ArgumentError)
9
- end
10
- end
11
-
12
- describe ':access_token' do
13
- it 'is required' do
14
- expect do
15
- Contentful::Client.new(space: 'cfexampleapi')
16
- end.to raise_error(ArgumentError)
17
- end
18
- end
19
-
20
- describe ':secure' do
21
- it 'will use https [default]' do
22
- expect(
23
- create_client.base_url
24
- ).to start_with 'https://'
25
- end
26
-
27
- it 'will use http when secure set to false' do
28
- expect(
29
- create_client(secure: false).base_url
30
- ).to start_with 'http://'
31
- end
32
- end
33
-
34
- describe ':raise_errors' do
35
- it 'will raise response errors if set to true [default]' do
36
- expect_vcr('not found')do
37
- create_client.content_type 'not found'
38
- end.to raise_error Contentful::NotFound
39
- end
40
-
41
- it 'will not raise response errors if set to false' do
42
- res = nil
43
-
44
- expect_vcr('not found')do
45
- res = create_client(raise_errors: false).content_type 'not found'
46
- end.not_to raise_error
47
- expect(res).to be_instance_of Contentful::NotFound
48
- end
49
- end
50
-
51
- describe ':log_level' do
52
-
53
- let(:logger) { Logger.new(STDOUT) }
54
-
55
- it 'changes the level of the logger instance when given' do
56
- expect do
57
- create_client(logger: logger, log_level: ::Logger::WARN)
58
- end.to change { logger.level }.from(::Logger::DEBUG).to(::Logger::WARN)
59
- end
60
-
61
- it 'does not change the level of the logger instance when not given' do
62
- expect do
63
- create_client(logger: logger)
64
- end.not_to change { logger.level }
65
- end
66
- end
67
-
68
- describe ':dynamic_entries' do
69
- before :each do
70
- Contentful::ContentTypeCache.clear!
71
- end
72
-
73
- it 'will create dynamic entries if dynamic_entry_cache is not empty' do
74
- client = create_client(dynamic_entries: :manual)
75
- vcr('entry_cache') { client.update_dynamic_entry_cache! }
76
- entry = vcr('nyancat') { client.entry('nyancat') }
77
-
78
- expect(entry).to be_a Contentful::Entry
79
- end
80
-
81
- context ':auto' do
82
- it 'will call update dynamic_entry_cache on start-up' do
83
- vcr('entry_cache') do
84
- create_client(dynamic_entries: :auto)
85
- end
86
- expect(Contentful::ContentTypeCache.cache).not_to be_empty
87
- end
88
- end
89
-
90
- context ':manual' do
91
- it 'will not call #update_dynamic_entry_cache! on start-up' do
92
- create_client(dynamic_entries: :manual)
93
- expect(Contentful::ContentTypeCache.cache).to be_empty
94
- end
95
- end
96
-
97
- describe '#update_dynamic_entry_cache!' do
98
- let(:client) { create_client(dynamic_entries: :manual) }
99
-
100
- it 'will fetch all content_types' do
101
- expect(client).to receive(:content_types).with(limit: 1000) { {} }
102
- client.update_dynamic_entry_cache!
103
- end
104
-
105
- it 'will save dynamic entries in @dynamic_entry_cache' do
106
- vcr('entry_cache')do
107
- client.update_dynamic_entry_cache!
108
- end
109
- expect(Contentful::ContentTypeCache.cache).not_to be_empty
110
- end
111
- end
112
-
113
- describe '#register_dynamic_entry' do
114
- let(:client) { create_client(dynamic_entries: :manual) }
115
-
116
- it 'can be used to register a dynamic entry manually' do
117
- cat = vcr('content_type') { client.content_type 'cat' }
118
- client.register_dynamic_entry 'cat', cat
119
-
120
- expect(Contentful::ContentTypeCache.cache).not_to be_empty
121
- end
122
- end
123
- end
124
-
125
- describe ':api_url' do
126
- it 'is "cdn.contentful.com" [default]' do
127
- expect(
128
- create_client.configuration[:api_url]
129
- ).to eq 'cdn.contentful.com'
130
- end
131
-
132
- it 'will be used as base url' do
133
- expect(
134
- create_client(api_url: 'cdn2.contentful.com').base_url
135
- ).to start_with 'https://cdn2.contentful.com'
136
- end
137
- end
138
-
139
- describe ':api_version' do
140
- it 'is 1 [default]' do
141
- expect(
142
- create_client.configuration[:api_version]
143
- ).to eq 1
144
- end
145
-
146
- it 'will used for the http content type request header' do
147
- expect(
148
- create_client(api_version: 2).request_headers['Content-Type']
149
- ).to eq 'application/vnd.contentful.delivery.v2+json'
150
- end
151
- end
152
-
153
- describe ':authentication_mechanism' do
154
- describe ':header [default]' do
155
- it 'will add the :access_token as authorization bearer token request header' do
156
- expect(
157
- create_client.request_headers['Authorization']
158
- ).to eq 'Bearer b4c0n73n7fu1'
159
- end
160
-
161
- it 'will not add :access_token to query' do
162
- expect(
163
- create_client.request_query({})['access_token']
164
- ).to be_nil
165
- end
166
- end
167
-
168
- describe ':query_string' do
169
- it 'will add the :access_token to query' do
170
- expect(
171
- create_client(authentication_mechanism: :query_string).
172
- request_query({})['access_token']
173
- ).to eq 'b4c0n73n7fu1'
174
- end
175
-
176
- it 'will not add the :access_token as authorization bearer token request header' do
177
- expect(
178
- create_client(authentication_mechanism: :query_string).
179
- request_headers['Authorization']
180
- ).to be_nil
181
- end
182
- end
183
- end
184
-
185
- describe ':resource_mapping' do
186
- it 'lets you register your own resource classes for certain response types' do
187
- class MyBetterAsset < Contentful::Asset
188
- def https_image_url
189
- image_url.sub %r{\A//}, 'https://'
190
- end
191
- end
192
-
193
- client = create_client(
194
- resource_mapping: {
195
- 'Asset' => MyBetterAsset,
196
- }
197
- )
198
-
199
- nyancat = vcr('asset') { client.asset 'nyancat' }
200
- expect(nyancat).to be_a MyBetterAsset
201
- expect(nyancat.https_image_url).to start_with 'https'
202
- end
203
- end
204
-
205
- describe ':entry_mapping' do
206
- it 'lets you register your own entry classes for certain entry types' do
207
- class Cat < Contentful::Entry
208
- end
209
-
210
- client = create_client(
211
- entry_mapping: {
212
- 'cat' => Cat
213
- }
214
- )
215
-
216
- nyancat = vcr('entry') { client.entry 'nyancat' }
217
- finn = vcr('human') { client.entry 'finn' }
218
- expect(nyancat).to be_a Cat
219
- expect(finn).to be_a Contentful::Entry
220
- end
221
- end
222
-
223
- describe 'X-Contentful-User-Agent headers' do
224
- it 'default values' do
225
- expected = [
226
- "sdk contentful.rb/#{Contentful::VERSION};",
227
- "platform ruby/#{RUBY_VERSION};",
228
- ]
229
-
230
- client = create_client
231
- expected.each do |h|
232
- expect(client.contentful_user_agent).to include(h)
233
- end
234
-
235
- expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
236
-
237
- ['integration', 'app'].each do |h|
238
- expect(client.contentful_user_agent).not_to include(h)
239
- end
240
- end
241
-
242
- it 'with integration name only' do
243
- expected = [
244
- "sdk contentful.rb/#{Contentful::VERSION};",
245
- "platform ruby/#{RUBY_VERSION};",
246
- "integration foobar;"
247
- ]
248
-
249
- client = create_client(integration_name: 'foobar')
250
- expected.each do |h|
251
- expect(client.contentful_user_agent).to include(h)
252
- end
253
-
254
- expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
255
-
256
- ['app'].each do |h|
257
- expect(client.contentful_user_agent).not_to include(h)
258
- end
259
- end
260
-
261
- it 'with integration' do
262
- expected = [
263
- "sdk contentful.rb/#{Contentful::VERSION};",
264
- "platform ruby/#{RUBY_VERSION};",
265
- "integration foobar/0.1.0;"
266
- ]
267
-
268
- client = create_client(integration_name: 'foobar', integration_version: '0.1.0')
269
- expected.each do |h|
270
- expect(client.contentful_user_agent).to include(h)
271
- end
272
-
273
- expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
274
-
275
- ['app'].each do |h|
276
- expect(client.contentful_user_agent).not_to include(h)
277
- end
278
- end
279
-
280
- it 'with application name only' do
281
- expected = [
282
- "sdk contentful.rb/#{Contentful::VERSION};",
283
- "platform ruby/#{RUBY_VERSION};",
284
- "app fooapp;"
285
- ]
286
-
287
- client = create_client(application_name: 'fooapp')
288
- expected.each do |h|
289
- expect(client.contentful_user_agent).to include(h)
290
- end
291
-
292
- expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
293
-
294
- ['integration'].each do |h|
295
- expect(client.contentful_user_agent).not_to include(h)
296
- end
297
- end
298
-
299
- it 'with application' do
300
- expected = [
301
- "sdk contentful.rb/#{Contentful::VERSION};",
302
- "platform ruby/#{RUBY_VERSION};",
303
- "app fooapp/1.0.0;"
304
- ]
305
-
306
- client = create_client(application_name: 'fooapp', application_version: '1.0.0')
307
- expected.each do |h|
308
- expect(client.contentful_user_agent).to include(h)
309
- end
310
-
311
- expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
312
-
313
- ['integration'].each do |h|
314
- expect(client.contentful_user_agent).not_to include(h)
315
- end
316
- end
317
-
318
- it 'with all' do
319
- expected = [
320
- "sdk contentful.rb/#{Contentful::VERSION};",
321
- "platform ruby/#{RUBY_VERSION};",
322
- "integration foobar/0.1.0;",
323
- "app fooapp/1.0.0;"
324
- ]
325
-
326
- client = create_client(
327
- integration_name: 'foobar',
328
- integration_version: '0.1.0',
329
- application_name: 'fooapp',
330
- application_version: '1.0.0'
331
- )
332
-
333
- expected.each do |h|
334
- expect(client.contentful_user_agent).to include(h)
335
- end
336
-
337
- expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
338
- end
339
-
340
- it 'when only version numbers, skips header' do
341
- expected = [
342
- "sdk contentful.rb/#{Contentful::VERSION};",
343
- "platform ruby/#{RUBY_VERSION};"
344
- ]
345
-
346
- client = create_client(
347
- integration_version: '0.1.0',
348
- application_version: '1.0.0'
349
- )
350
-
351
- expected.each do |h|
352
- expect(client.contentful_user_agent).to include(h)
353
- end
354
-
355
- expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
356
-
357
- ['integration', 'app'].each do |h|
358
- expect(client.contentful_user_agent).not_to include(h)
359
- end
360
- end
361
-
362
- it 'headers include X-Contentful-User-Agent' do
363
- client = create_client
364
- expect(client.request_headers['X-Contentful-User-Agent']).to eq client.contentful_user_agent
365
- end
366
- end
367
-
368
- describe 'timeout options' do
369
- let(:full_options) { { timeout_connect: 1, timeout_read: 2, timeout_write: 3 } }
370
-
371
- it 'allows the three options to be present together' do
372
- expect do
373
- create_client(full_options)
374
- end.not_to raise_error
375
- end
376
-
377
- it 'allows the three options to be omitted' do
378
- expect do
379
- create_client()
380
- end.not_to raise_error
381
- end
382
-
383
- it 'does not allow only some options to be set' do
384
- # Test that any combination of 1 or 2 keys is rejected
385
- 1.upto(2) do |options_count|
386
- full_options.keys.combination(options_count).each do |option_keys|
387
- expect do
388
- create_client(full_options.select { |key, _| option_keys.include?(key) })
389
- end.to raise_error(ArgumentError)
390
- end
391
- end
392
- end
393
- end
394
- end