contentful_middleman 1.2.0 → 1.3.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.
@@ -0,0 +1,368 @@
1
+ require 'spec_helper'
2
+
3
+ describe ContentfulMiddleman::Tools::PreviewProxy do
4
+ subject do
5
+ preview_proxy = nil
6
+ vcr('tools/preview_helper') {
7
+ preview_proxy = described_class.instance(space: 'cfexampleapi', access_token: 'b4c0n73n7fu1')
8
+ }
9
+ preview_proxy
10
+ end
11
+
12
+ before(:each) do
13
+ subject.clear_cache
14
+ end
15
+
16
+ describe 'class methods' do
17
+ describe '::instance' do
18
+ end
19
+
20
+ it '::days' do
21
+ expect(DateTime.new(2015, 1, 1, 0, 0, 0) + described_class.days(1)).to eq(DateTime.new(2015, 1, 2, 0, 0, 0))
22
+ end
23
+
24
+ it '::hours' do
25
+ expect(DateTime.new(2015, 1, 1, 0, 0, 0) + described_class.hours(1)).to eq(DateTime.new(2015, 1, 1, 1, 0, 0))
26
+ end
27
+
28
+ it '::minutes' do
29
+ expect(DateTime.new(2015, 1, 1, 0, 0, 0) + described_class.minutes(1)).to eq(DateTime.new(2015, 1, 1, 0, 1, 0))
30
+ end
31
+
32
+ it '::seconds' do
33
+ expect(DateTime.new(2015, 1, 1, 0, 0, 0) + described_class.seconds(1)).to eq(DateTime.new(2015, 1, 1, 0, 0, 1))
34
+ end
35
+ end
36
+
37
+ describe 'cache expiration can be configured' do
38
+ before do
39
+ described_class.class_variable_set(:@@instances, [])
40
+ end
41
+
42
+ after do
43
+ described_class.class_variable_set(:@@instances, [])
44
+ end
45
+
46
+ it 'by tries' do
47
+ preview = nil
48
+ vcr('tools/preview_helper') {
49
+ preview = described_class.instance(space: 'cfexampleapi', access_token: 'b4c0n73n7fu1', tries: 5)
50
+ }
51
+
52
+ vcr('tools/preview_helper/entries') {
53
+ preview.entries
54
+ }
55
+
56
+ preview.entries
57
+ preview.entries
58
+ preview.entries
59
+ preview.entries
60
+ preview.entries
61
+
62
+ expect { preview.entries }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
63
+ end
64
+
65
+ describe 'by expire time' do
66
+ it 'will always refetch when expiry is before now' do
67
+ preview = nil
68
+ vcr('tools/preview_helper') {
69
+ # Expired 5 minutes ago (will always refetch)
70
+ preview = described_class.instance(space: 'cfexampleapi', access_token: 'b4c0n73n7fu1', expires_in: described_class.minutes(-5))
71
+ }
72
+
73
+ vcr('tools/preview_helper/entries') {
74
+ preview.entries
75
+ }
76
+
77
+ expect { preview.entries }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
78
+ end
79
+
80
+ it 'will never refetch until expired' do
81
+ preview = nil
82
+ vcr('tools/preview_helper') {
83
+ # We put a ridiculously high number of tries to test expiration date
84
+ preview = described_class.instance(space: 'cfexampleapi', access_token: 'b4c0n73n7fu1', tries: 10000, expires_in: described_class.days(2))
85
+ }
86
+
87
+ vcr('tools/preview_helper/entries') {
88
+ preview.entries
89
+ }
90
+
91
+ preview.entries
92
+ preview.entries
93
+ preview.entries
94
+ preview.entries
95
+
96
+ # ... this could go for 2 days straight without refetching ...
97
+
98
+ preview.entries
99
+ preview.entries
100
+ preview.entries
101
+ preview.entries
102
+
103
+ # We force the cache to expire
104
+ preview.clear_cache
105
+
106
+ expect { preview.entries }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
107
+ end
108
+ end
109
+ end
110
+
111
+ describe 'instance methods' do
112
+ describe '#entries' do
113
+ it 'on first run fetches entries from preview api' do
114
+ vcr('tools/preview_helper/entries') {
115
+ subject.entries
116
+ }
117
+ end
118
+
119
+ it 'on subsequent runs it doesnt' do
120
+ vcr('tools/preview_helper/entries') {
121
+ subject.entries
122
+ }
123
+
124
+ subject.entries
125
+ end
126
+
127
+ it 'but runs on different queries' do
128
+ vcr('tools/preview_helper/entries') {
129
+ subject.entries
130
+ }
131
+
132
+ subject.entries
133
+
134
+ vcr('tools/preview_helper/entries_2') {
135
+ subject.entries(content_type: 'cat')
136
+ }
137
+ end
138
+
139
+ it 'caches taking into account the query' do
140
+ vcr('tools/preview_helper/entries') {
141
+ subject.entries
142
+ }
143
+
144
+ subject.entries
145
+
146
+ vcr('tools/preview_helper/entries_2') {
147
+ subject.entries(content_type: 'cat')
148
+ }
149
+
150
+ subject.entries(content_type: 'cat')
151
+ end
152
+
153
+ it 'forces a cache refresh after 3 consecutive queries' do
154
+ vcr('tools/preview_helper/entries') {
155
+ subject.entries
156
+ }
157
+
158
+ subject.entries
159
+ subject.entries
160
+ subject.entries
161
+
162
+ expect { subject.entries }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
163
+ end
164
+
165
+ it 'should re-fetch after expire time' do
166
+ vcr('tools/preview_helper/entries') {
167
+ subject.entries
168
+ }
169
+
170
+ subject.instance_variable_get(:@cached_entry_collection)[Marshal.dump({})][:expires] = DateTime.now - 1
171
+
172
+ expect { subject.entries }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
173
+ end
174
+ end
175
+
176
+ describe '#assets' do
177
+ it 'on first run fetches assets from preview api' do
178
+ vcr('tools/preview_helper/assets') {
179
+ subject.assets
180
+ }
181
+ end
182
+
183
+ it 'on subsequent runs it doesnt' do
184
+ vcr('tools/preview_helper/assets') {
185
+ subject.assets
186
+ }
187
+
188
+ subject.assets
189
+ end
190
+
191
+ it 'but runs on different queries' do
192
+ vcr('tools/preview_helper/assets') {
193
+ subject.assets
194
+ }
195
+
196
+ subject.assets
197
+
198
+ vcr('tools/preview_helper/assets_2') {
199
+ subject.assets(order: 'sys.createdAt')
200
+ }
201
+ end
202
+
203
+ it 'caches taking into account the query' do
204
+ vcr('tools/preview_helper/assets') {
205
+ subject.assets
206
+ }
207
+
208
+ subject.assets
209
+
210
+ vcr('tools/preview_helper/assets_2') {
211
+ subject.assets(order: 'sys.createdAt')
212
+ }
213
+
214
+ subject.assets(order: 'sys.createdAt')
215
+ end
216
+
217
+ it 'forces a cache refresh after 3 consecutive queries' do
218
+ vcr('tools/preview_helper/assets') {
219
+ subject.assets
220
+ }
221
+
222
+ subject.assets
223
+ subject.assets
224
+ subject.assets
225
+
226
+ expect { subject.assets }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
227
+ end
228
+
229
+ it 'should re-fetch after expire time' do
230
+ vcr('tools/preview_helper/assets') {
231
+ subject.assets
232
+ }
233
+
234
+ subject.instance_variable_get(:@cached_asset_collection)[Marshal.dump({})][:expires] = DateTime.now - 1
235
+
236
+ expect { subject.assets }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
237
+ end
238
+ end
239
+
240
+ describe '#entry' do
241
+ it 'on first run fetches entry from preview api' do
242
+ vcr('tools/preview_helper/entry') {
243
+ subject.entry('garfield')
244
+ }
245
+ end
246
+
247
+ it 'on subsequent runs it doesnt' do
248
+ vcr('tools/preview_helper/entry') {
249
+ subject.entry('garfield')
250
+ }
251
+
252
+ subject.entry('garfield')
253
+ end
254
+
255
+ it 'but runs on different queries' do
256
+ vcr('tools/preview_helper/entry') {
257
+ subject.entry('garfield')
258
+ }
259
+
260
+ subject.entry('garfield')
261
+
262
+ vcr('tools/preview_helper/entry_2') {
263
+ subject.entry('happycat')
264
+ }
265
+ end
266
+
267
+ it 'caches taking into account the query' do
268
+ vcr('tools/preview_helper/entry') {
269
+ subject.entry('garfield')
270
+ }
271
+
272
+ subject.entry('garfield')
273
+
274
+ vcr('tools/preview_helper/entry_2') {
275
+ subject.entry('happycat')
276
+ }
277
+
278
+ subject.entry('happycat')
279
+ end
280
+
281
+ it 'forces a cache refresh after 3 consecutive queries' do
282
+ vcr('tools/preview_helper/entry') {
283
+ subject.entry('garfield')
284
+ }
285
+
286
+ subject.entry('garfield')
287
+ subject.entry('garfield')
288
+ subject.entry('garfield')
289
+
290
+ expect { subject.entry('garfield') }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
291
+ end
292
+
293
+ it 'should re-fetch after expire time' do
294
+ vcr('tools/preview_helper/entry') {
295
+ subject.entry('garfield')
296
+ }
297
+
298
+ subject.instance_variable_get(:@cached_entries)[Marshal.dump({cache_id: 'garfield'})][:expires] = DateTime.now - 1
299
+
300
+ expect { subject.entry('garfield') }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
301
+ end
302
+ end
303
+
304
+ describe '#asset' do
305
+ it 'on first run fetches asset from preview api' do
306
+ vcr('tools/preview_helper/asset') {
307
+ subject.asset('nyancat')
308
+ }
309
+ end
310
+
311
+ it 'on subsequent runs it doesnt' do
312
+ vcr('tools/preview_helper/asset') {
313
+ subject.asset('nyancat')
314
+ }
315
+
316
+ subject.asset('nyancat')
317
+ end
318
+
319
+ it 'but runs on different queries' do
320
+ vcr('tools/preview_helper/asset') {
321
+ subject.asset('nyancat')
322
+ }
323
+
324
+ subject.asset('nyancat')
325
+
326
+ vcr('tools/preview_helper/asset_2') {
327
+ subject.asset('happycat')
328
+ }
329
+ end
330
+
331
+ it 'caches taking into account the query' do
332
+ vcr('tools/preview_helper/asset') {
333
+ subject.asset('nyancat')
334
+ }
335
+
336
+ subject.asset('nyancat')
337
+
338
+ vcr('tools/preview_helper/asset_2') {
339
+ subject.asset('happycat')
340
+ }
341
+
342
+ subject.asset('happycat')
343
+ end
344
+
345
+ it 'forces a cache refresh after 3 consecutive queries' do
346
+ vcr('tools/preview_helper/asset') {
347
+ subject.asset('nyancat')
348
+ }
349
+
350
+ subject.asset('nyancat')
351
+ subject.asset('nyancat')
352
+ subject.asset('nyancat')
353
+
354
+ expect { subject.asset('nyancat') }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
355
+ end
356
+
357
+ it 'should re-fetch after expire time' do
358
+ vcr('tools/preview_helper/asset') {
359
+ subject.asset('nyancat')
360
+ }
361
+
362
+ subject.instance_variable_get(:@cached_assets)[Marshal.dump({cache_id: 'nyancat'})][:expires] = DateTime.now - 1
363
+
364
+ expect { subject.asset('nyancat') }.to raise_error(VCR::Errors::UnhandledHTTPRequestError)
365
+ end
366
+ end
367
+ end
368
+ end
@@ -0,0 +1,211 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://cdn.contentful.com/spaces/cfexampleapi/content_types?limit=1000
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - RubyContentfulGem/0.8.0
12
+ Authorization:
13
+ - Bearer b4c0n73n7fu1
14
+ Content-Type:
15
+ - application/vnd.contentful.delivery.v1+json
16
+ Accept-Encoding:
17
+ - gzip
18
+ Connection:
19
+ - close
20
+ Host:
21
+ - cdn.contentful.com
22
+ response:
23
+ status:
24
+ code: 200
25
+ message: OK
26
+ headers:
27
+ Access-Control-Allow-Headers:
28
+ - Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation
29
+ Access-Control-Allow-Methods:
30
+ - GET,HEAD,OPTIONS
31
+ Access-Control-Allow-Origin:
32
+ - "*"
33
+ Access-Control-Expose-Headers:
34
+ - Etag
35
+ Access-Control-Max-Age:
36
+ - '86400'
37
+ Cache-Control:
38
+ - max-age=0
39
+ Content-Encoding:
40
+ - gzip
41
+ Content-Type:
42
+ - application/vnd.contentful.delivery.v1+json
43
+ Server:
44
+ - nginx
45
+ X-Contentful-Request-Id:
46
+ - c40-594510790
47
+ Content-Length:
48
+ - '914'
49
+ Accept-Ranges:
50
+ - bytes
51
+ Date:
52
+ - Thu, 10 Dec 2015 19:42:11 GMT
53
+ Via:
54
+ - 1.1 varnish
55
+ Age:
56
+ - '0'
57
+ Connection:
58
+ - close
59
+ X-Served-By:
60
+ - cache-iad2125-IAD
61
+ X-Cache:
62
+ - MISS
63
+ X-Cache-Hits:
64
+ - '0'
65
+ Vary:
66
+ - Accept-Encoding
67
+ body:
68
+ encoding: ASCII-8BIT
69
+ string: !binary |-
70
+ H4sIAAAAAAAAA91YS3ObMBC+51e4nGuGV7DhljiPMk3b6dg9NJ0cZCM7Gp4B
71
+ OY2b8X+vEAgkLGKSTDtjc7H1Wq1W3+5+q+eTwUDJN7niDp7JX9LAmxSSlnKW
72
+ ZWCjkL7tx2IOTjAISf8pbeUBSklDo40QRQiTlq5pZQfCMCok/qISS7lk3hLB
73
+ 0G/6+TG6cwwiuvPX4reQzD4F+UU/HRf6ma4z+ITFkQw+rFEGi3U4W8NaGD1M
74
+ +TG9hL0nMMYwk+2+kIyw/W+SBcAoiXvqUKlwx3SpTz5BeFPLEK6FKpmnYFFY
75
+ SNCcv7zaYLViKA4Epeh1xcGsuuQplcjblEworb1YwicQpSEEKSpgwL6tzJY1
76
+ aiYJsV+MqfxGbCVSx443Xyz9SWBHmrX2ptMceJ/5eRl8RHlhSIImbvkigwBD
77
+ /6xAmWJoujXUjKGhz3TTtQzXNFVNc255OevU77GgOkmNCcVHeRqCzVUB1Bpx
78
+ dFY1pzeWuxDbjfHeWBY8ICTIC9EfCvQlCHMO6d0oA42zHB/IbDOwHvxL5ABv
79
+ 7H3/cQ1+Xq+sb28AmTnU7KFhznTH1WzXcFRnZL8IMvmCXZDBfJGhlMYLAucv
80
+ MPn9oXH6o4JgR7AtncPn7CBgmvnIRdeEXq5CvaGvr7yoKIrAqpV4mIre7hCX
81
+ eXqoICjYGbWFmH2W5xA3EZnF491scpGsOFyJqDsHWbAPdUy344sRPmcZkvC4
82
+ rGO8kHVK/x7NDMO1bFc3VcsZ7wsIDslUM91yTcPVdXVsjm7ZzZX3dgh5pReB
83
+ Kn06RAHMBT5Rc5ub3SGG95JqCq7wDi9i7JNnSeSS2WbTTTRPwr2MRuBYFSNK
84
+ wqRFDVkcmOwOtfZ7x+lkhEui3hzm+CpDMPblF3BOxgeyCd1h5x23wLPMyxhn
85
+ tJQovy4OXlp5jjJ875PSQ5oTzqWj7AQXhPSJ6153gp4qhmjZjXIyNAjhslWP
86
+ MA09Qo9X7QLjdUoKdiF0AczD/nUOc9PH7gOQoX97gJ5WPtS0O+HptZTO1YmV
87
+ p0AVFVSblN2u7A6+/iNFMuedb0y7hjo+NfqlXdMlmdcaqWPbPMC02yrnGreX
88
+ xP6D4dJHTRD+e8SSEKc97Odmz4NQq7ioHz7KzF08kMjTTedjw6d1BJp3MfkL
89
+ y/EWGvfC6cVSw+xfaliqbpIQxi1oP3CR2qQsNU5dXXMNWx3rpDZhbw/0tyg4
90
+ 7k62J38BK6i++/MVAAA=
91
+ http_version:
92
+ recorded_at: Thu, 10 Dec 2015 19:42:11 GMT
93
+ - request:
94
+ method: get
95
+ uri: https://cdn.contentful.com/spaces/cfexampleapi/entries
96
+ body:
97
+ encoding: US-ASCII
98
+ string: ''
99
+ headers:
100
+ User-Agent:
101
+ - RubyContentfulGem/0.8.0
102
+ Authorization:
103
+ - Bearer b4c0n73n7fu1
104
+ Content-Type:
105
+ - application/vnd.contentful.delivery.v1+json
106
+ Accept-Encoding:
107
+ - gzip
108
+ Connection:
109
+ - close
110
+ Host:
111
+ - cdn.contentful.com
112
+ response:
113
+ status:
114
+ code: 200
115
+ message: OK
116
+ headers:
117
+ Access-Control-Allow-Headers:
118
+ - Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation
119
+ Access-Control-Allow-Methods:
120
+ - GET,HEAD,OPTIONS
121
+ Access-Control-Allow-Origin:
122
+ - "*"
123
+ Access-Control-Expose-Headers:
124
+ - Etag
125
+ Access-Control-Max-Age:
126
+ - '86400'
127
+ Cache-Control:
128
+ - max-age=0
129
+ Content-Encoding:
130
+ - gzip
131
+ Content-Type:
132
+ - application/vnd.contentful.delivery.v1+json
133
+ Server:
134
+ - nginx
135
+ X-Contentful-Request-Id:
136
+ - 90a-2093124947
137
+ Content-Length:
138
+ - '2169'
139
+ Accept-Ranges:
140
+ - bytes
141
+ Date:
142
+ - Thu, 10 Dec 2015 19:42:12 GMT
143
+ Via:
144
+ - 1.1 varnish
145
+ Age:
146
+ - '0'
147
+ Connection:
148
+ - close
149
+ X-Served-By:
150
+ - cache-atl6235-ATL
151
+ X-Cache:
152
+ - MISS
153
+ X-Cache-Hits:
154
+ - '0'
155
+ Vary:
156
+ - Accept-Encoding
157
+ body:
158
+ encoding: ASCII-8BIT
159
+ string: !binary |-
160
+ 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
208
+ A+LLui4aMQAA
209
+ http_version:
210
+ recorded_at: Thu, 10 Dec 2015 19:42:12 GMT
211
+ recorded_with: VCR 2.9.3