contentful 2.16.0 → 2.16.1

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 (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