rack-zippy 3.0.1 → 4.0.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +5 -1
- data/Gemfile +0 -6
- data/README.md +34 -44
- data/lib/rack-zippy.rb +91 -46
- data/lib/rack-zippy/railtie.rb +26 -0
- data/lib/rack-zippy/version.rb +1 -1
- data/rack-zippy.gemspec +8 -1
- data/test/asset_server_test.rb +49 -39
- data/test/configuration_test.rb +1 -0
- data/test/public/assets/loading.GiF +0 -0
- data/test/public/report.csv +1 -0
- data/test/railtie_test.rb +60 -0
- data/test/test_helper.rb +4 -37
- metadata +86 -20
- data/lib/rack-zippy/asset_compiler.rb +0 -39
- data/lib/rack-zippy/serveable_file.rb +0 -138
- data/test/null_asset_compiler_test.rb +0 -14
- data/test/rails_asset_compiler_test.rb +0 -46
- data/test/serveable_file_test.rb +0 -494
- data/video-player.png +0 -0
@@ -1,14 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
|
3
|
-
module Rack
|
4
|
-
module Zippy
|
5
|
-
class NullAssetCompilerTest < TestCase
|
6
|
-
|
7
|
-
def test_never_wants_to_compile_assets
|
8
|
-
asset_compiler = NullAssetCompiler.new
|
9
|
-
assert !asset_compiler.compiles?('/assets/application.css')
|
10
|
-
end
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
|
3
|
-
module Rack
|
4
|
-
module Zippy
|
5
|
-
class RailsAssetCompilerTest < TestCase
|
6
|
-
|
7
|
-
def setup
|
8
|
-
enter_rails_env
|
9
|
-
::Rails.configuration.assets.compile = false
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_rails_env_detected_if_rails_version_defined
|
13
|
-
assert ::Rails.version
|
14
|
-
assert RailsAssetCompiler.rails_env?
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_not_rails_env
|
18
|
-
exit_rails_env
|
19
|
-
assert !RailsAssetCompiler.rails_env?
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_wants_to_compile_assets_when_active
|
23
|
-
::Rails.configuration.assets.compile = true
|
24
|
-
asset_compiler = RailsAssetCompiler.new
|
25
|
-
assert asset_compiler.send(:active?), 'should be active'
|
26
|
-
assert asset_compiler.compiles?('/assets/application.css')
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_does_not_want_to_compile_anything_when_inactive
|
30
|
-
assert !::Rails.configuration.assets.compile, 'assets.compile should not be active'
|
31
|
-
asset_compiler = RailsAssetCompiler.new
|
32
|
-
assert !asset_compiler.send(:active?), 'should not be active'
|
33
|
-
assert !asset_compiler.compiles?('/assets/application.css')
|
34
|
-
assert !asset_compiler.compiles?('/thanks.html')
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_does_not_want_to_compile_non_asset_when_active
|
38
|
-
::Rails.configuration.assets.compile = true
|
39
|
-
asset_compiler = RailsAssetCompiler.new
|
40
|
-
assert asset_compiler.send(:active?), 'should be active'
|
41
|
-
assert !asset_compiler.compiles?('/thanks.html')
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
data/test/serveable_file_test.rb
DELETED
@@ -1,494 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
|
3
|
-
module Rack
|
4
|
-
module Zippy
|
5
|
-
class ServeableFileTest < TestCase
|
6
|
-
|
7
|
-
CACHE_FRIENDLY_LAST_MODIFIED = 'Mon, 10 Jan 2005 10:00:00 GMT'
|
8
|
-
|
9
|
-
def setup
|
10
|
-
ensure_correct_working_directory
|
11
|
-
enter_rails_env
|
12
|
-
::Rails.configuration.assets.compile = false
|
13
|
-
end
|
14
|
-
|
15
|
-
def teardown
|
16
|
-
revert_to_original_working_directory
|
17
|
-
Rack::Zippy.reset_static_extensions
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_day_long_cache_headers_for_root_html_requests
|
21
|
-
serveable_file = ServeableFile.new(
|
22
|
-
:full_path_info => "/thanks.html",
|
23
|
-
:path => "#{asset_root}/thanks.html",
|
24
|
-
:has_encoding_variants => false,
|
25
|
-
:is_gzipped => false
|
26
|
-
)
|
27
|
-
|
28
|
-
cache_headers = serveable_file.cache_headers
|
29
|
-
|
30
|
-
assert_cache_max_age cache_headers, :day
|
31
|
-
assert_last_modified cache_headers, nil
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_max_age_fallback_used_for_cache_headers
|
35
|
-
|
36
|
-
ten_mins_in_secs = 10*60
|
37
|
-
|
38
|
-
serveable_file = ServeableFile.new(
|
39
|
-
:full_path_info => "/thanks.html",
|
40
|
-
:path => "#{asset_root}/thanks.html",
|
41
|
-
:has_encoding_variants => false,
|
42
|
-
:is_gzipped => false,
|
43
|
-
:max_age_fallback => ten_mins_in_secs
|
44
|
-
)
|
45
|
-
|
46
|
-
cache_headers = serveable_file.cache_headers
|
47
|
-
|
48
|
-
assert_cache_max_age cache_headers, ten_mins_in_secs
|
49
|
-
assert_last_modified cache_headers, nil
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_cache_max_age_is_month_for_root_favicon
|
53
|
-
serveable_file = ServeableFile.new(
|
54
|
-
:full_path_info => "/favicon.ico",
|
55
|
-
:path => "#{asset_root}/favicon.ico",
|
56
|
-
:has_encoding_variants => false,
|
57
|
-
:is_gzipped => false
|
58
|
-
)
|
59
|
-
|
60
|
-
assert_cache_max_age serveable_file.cache_headers, :month
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_maximum_cache_headers_for_assets_subdir_requests
|
64
|
-
serveable_file = ServeableFile.new(
|
65
|
-
:full_path_info => "/assets/favicon.ico",
|
66
|
-
:path => "#{asset_root}/assets/favicon.ico",
|
67
|
-
:has_encoding_variants => false,
|
68
|
-
:is_gzipped => false
|
69
|
-
)
|
70
|
-
|
71
|
-
cache_headers = serveable_file.cache_headers
|
72
|
-
|
73
|
-
assert_cache_max_age cache_headers, :year
|
74
|
-
assert_cache_friendly_last_modified cache_headers
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_cache_friendly_last_modified_is_not_set_for_files_outside_of_assets_subdir
|
78
|
-
serveable_file = ServeableFile.new(
|
79
|
-
:full_path_info => "/robots.txt",
|
80
|
-
:path => "#{asset_root}/robots.txt",
|
81
|
-
:has_encoding_variants => false,
|
82
|
-
:is_gzipped => false
|
83
|
-
)
|
84
|
-
|
85
|
-
assert_last_modified serveable_file.cache_headers, nil
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_cache_friendly_last_modified_is_set_for_root_favicon_as_it_rarely_changes
|
89
|
-
serveable_file = ServeableFile.new(
|
90
|
-
:full_path_info => "/favicon.ico",
|
91
|
-
:path => "#{asset_root}/favicon.ico",
|
92
|
-
:has_encoding_variants => false,
|
93
|
-
:is_gzipped => false
|
94
|
-
)
|
95
|
-
|
96
|
-
assert_cache_friendly_last_modified serveable_file.cache_headers
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_headers_sets_content_length
|
100
|
-
path = "#{asset_root}/thanks.html"
|
101
|
-
|
102
|
-
serveable_file = ServeableFile.new(
|
103
|
-
:full_path_info => "/thanks.html",
|
104
|
-
:path => path,
|
105
|
-
:has_encoding_variants => false,
|
106
|
-
:is_gzipped => false
|
107
|
-
)
|
108
|
-
|
109
|
-
headers = serveable_file.headers
|
110
|
-
|
111
|
-
file_size_in_bytes = ::File.size(path)
|
112
|
-
assert_equal 108, file_size_in_bytes
|
113
|
-
assert_equal file_size_in_bytes, headers['Content-Length'].to_i
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_headers_does_not_set_vary_header_for_file_without_gzipped_counterpart
|
117
|
-
serveable_file = ServeableFile.new(
|
118
|
-
:full_path_info => "/thanks.html",
|
119
|
-
:path => "#{asset_root}/thanks.html",
|
120
|
-
:has_encoding_variants => false,
|
121
|
-
:is_gzipped => false
|
122
|
-
)
|
123
|
-
|
124
|
-
headers = serveable_file.headers
|
125
|
-
|
126
|
-
assert_nil headers['Vary']
|
127
|
-
assert_nil headers['Content-Encoding']
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_headers_sets_encoding_related_headers_for_gzipped_asset
|
131
|
-
serveable_file = ServeableFile.new(
|
132
|
-
:full_path_info => "/assets/application.css",
|
133
|
-
:path => "#{asset_root}/assets/application.css.gz",
|
134
|
-
:has_encoding_variants => true,
|
135
|
-
:is_gzipped => true
|
136
|
-
)
|
137
|
-
|
138
|
-
headers = serveable_file.headers
|
139
|
-
|
140
|
-
assert_equal 'Accept-Encoding', headers['Vary']
|
141
|
-
assert_equal 'gzip', headers['Content-Encoding']
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_headers_sets_vary_header_for_uncompressed_asset_with_gzipped_counterpart
|
145
|
-
serveable_file = ServeableFile.new(
|
146
|
-
:full_path_info => "/assets/application.css",
|
147
|
-
:path => "#{asset_root}/assets/application.css",
|
148
|
-
:has_encoding_variants => true,
|
149
|
-
:is_gzipped => false
|
150
|
-
)
|
151
|
-
|
152
|
-
headers = serveable_file.headers
|
153
|
-
|
154
|
-
assert_equal 'Accept-Encoding', headers['Vary']
|
155
|
-
assert_nil headers['Content-Encoding']
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_headers_sets_content_type_header_for_gzipped_asset
|
159
|
-
serveable_file = ServeableFile.new(
|
160
|
-
:full_path_info => "/assets/application.js",
|
161
|
-
:path => "#{asset_root}/assets/application.js.gz",
|
162
|
-
:has_encoding_variants => true,
|
163
|
-
:is_gzipped => true
|
164
|
-
)
|
165
|
-
|
166
|
-
headers = serveable_file.headers
|
167
|
-
|
168
|
-
assert_equal "application/javascript", headers['Content-Type']
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_response_body_returns_file_contents_in_array_as_required_by_rack
|
172
|
-
path = "#{asset_root}/thanks.html"
|
173
|
-
|
174
|
-
serveable_file = ServeableFile.new(
|
175
|
-
:path => path,
|
176
|
-
:has_encoding_variants => false
|
177
|
-
)
|
178
|
-
|
179
|
-
assert_equal [::File.read(path)], serveable_file.response_body
|
180
|
-
end
|
181
|
-
|
182
|
-
def test_has_encoding_variants_must_be_given_as_constructor_option_to_ensure_vary_encoding_header_can_be_determined
|
183
|
-
e = assert_raises ArgumentError do
|
184
|
-
ServeableFile.new({})
|
185
|
-
end
|
186
|
-
assert_equal ':has_encoding_variants option must be given', e.message
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_encoding_variants_returns_true_when_constructor_option_true
|
190
|
-
serveable_file = ServeableFile.new(:has_encoding_variants => true)
|
191
|
-
assert serveable_file.encoding_variants?
|
192
|
-
end
|
193
|
-
|
194
|
-
def test_encoding_variants_returns_false_when_constructor_option_false
|
195
|
-
serveable_file = ServeableFile.new(:has_encoding_variants => false)
|
196
|
-
assert !serveable_file.encoding_variants?
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_gzipped_returns_false_when_constructor_option_false
|
200
|
-
serveable_file = ServeableFile.new(:is_gzipped => false, :has_encoding_variants => true)
|
201
|
-
assert !serveable_file.gzipped?
|
202
|
-
end
|
203
|
-
|
204
|
-
def test_gzipped_returns_true_when_constructor_option_true
|
205
|
-
serveable_file = ServeableFile.new(:is_gzipped => true, :has_encoding_variants => true)
|
206
|
-
assert serveable_file.gzipped?
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_gzipped_defaults_to_false_when_no_constructor_option_given
|
210
|
-
serveable_file = ServeableFile.new({:has_encoding_variants => true})
|
211
|
-
assert !serveable_file.gzipped?
|
212
|
-
end
|
213
|
-
|
214
|
-
|
215
|
-
def test_serveable_files_with_same_options_are_equal
|
216
|
-
file1 = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
217
|
-
:full_path_info => '/hello/world.html',
|
218
|
-
:has_encoding_variants => true,
|
219
|
-
:is_gzipped => true
|
220
|
-
|
221
|
-
file2 = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
222
|
-
:full_path_info => '/hello/world.html',
|
223
|
-
:has_encoding_variants => true,
|
224
|
-
:is_gzipped => true
|
225
|
-
|
226
|
-
assert_equal file1, file2
|
227
|
-
assert_equal file2, file1
|
228
|
-
assert file1.eql?(file2)
|
229
|
-
assert file2.eql?(file1)
|
230
|
-
end
|
231
|
-
|
232
|
-
def test_serveable_files_with_different_paths_are_not_equal
|
233
|
-
file1 = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
234
|
-
:full_path_info => '/hello/world.html',
|
235
|
-
:has_encoding_variants => true,
|
236
|
-
:is_gzipped => true
|
237
|
-
|
238
|
-
file2 = ServeableFile.new :path => "#{asset_root}/foo/bar.html.gz",
|
239
|
-
:full_path_info => '/hello/world.html',
|
240
|
-
:has_encoding_variants => true,
|
241
|
-
:is_gzipped => true
|
242
|
-
|
243
|
-
assert_not_equal file1, file2
|
244
|
-
assert_not_equal file2, file1
|
245
|
-
assert !file1.eql?(file2)
|
246
|
-
assert !file2.eql?(file1)
|
247
|
-
end
|
248
|
-
|
249
|
-
def test_serveable_files_with_different_path_info_are_not_equal
|
250
|
-
file1 = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
251
|
-
:full_path_info => '/hello/world.html',
|
252
|
-
:has_encoding_variants => true,
|
253
|
-
:is_gzipped => true
|
254
|
-
|
255
|
-
file2 = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
256
|
-
:full_path_info => '/foo/bar.html',
|
257
|
-
:has_encoding_variants => true,
|
258
|
-
:is_gzipped => true
|
259
|
-
|
260
|
-
assert_not_equal file1, file2
|
261
|
-
assert_not_equal file2, file1
|
262
|
-
assert !file1.eql?(file2)
|
263
|
-
assert !file2.eql?(file1)
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_serveable_files_with_different_has_encoding_variants_are_not_equal
|
267
|
-
file1 = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
268
|
-
:full_path_info => '/hello/world.html',
|
269
|
-
:has_encoding_variants => true,
|
270
|
-
:is_gzipped => true
|
271
|
-
|
272
|
-
file2 = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
273
|
-
:full_path_info => '/hello/world.html',
|
274
|
-
:has_encoding_variants => false,
|
275
|
-
:is_gzipped => true
|
276
|
-
|
277
|
-
assert_not_equal file1, file2
|
278
|
-
assert_not_equal file2, file1
|
279
|
-
assert !file1.eql?(file2)
|
280
|
-
assert !file2.eql?(file1)
|
281
|
-
end
|
282
|
-
|
283
|
-
def test_serveable_files_with_different_is_gzipped_are_not_equal
|
284
|
-
file1 = ServeableFile.new :path => "#{asset_root}/hello/world.html",
|
285
|
-
:full_path_info => '/hello/world.html',
|
286
|
-
:has_encoding_variants => true,
|
287
|
-
:is_gzipped => false
|
288
|
-
|
289
|
-
file2 = ServeableFile.new :path => "#{asset_root}/hello/world.html",
|
290
|
-
:full_path_info => '/hello/world.html',
|
291
|
-
:has_encoding_variants => true,
|
292
|
-
:is_gzipped => true
|
293
|
-
|
294
|
-
assert_not_equal file1, file2
|
295
|
-
assert_not_equal file2, file1
|
296
|
-
assert !file1.eql?(file2)
|
297
|
-
assert !file2.eql?(file1)
|
298
|
-
end
|
299
|
-
|
300
|
-
def test_gzipped_serveable_file_does_not_equal_its_non_gzipped_counterpart
|
301
|
-
gzipped = ServeableFile.new :path => "#{asset_root}/hello/world.html.gz",
|
302
|
-
:full_path_info => '/hello/world.html',
|
303
|
-
:has_encoding_variants => true,
|
304
|
-
:is_gzipped => true
|
305
|
-
|
306
|
-
not_gzipped = ServeableFile.new :path => "#{asset_root}/hello/world.html",
|
307
|
-
:full_path_info => '/hello/world.html',
|
308
|
-
:has_encoding_variants => true,
|
309
|
-
:is_gzipped => false
|
310
|
-
|
311
|
-
assert_not_equal gzipped, not_gzipped
|
312
|
-
assert_not_equal not_gzipped, gzipped
|
313
|
-
assert !gzipped.eql?(not_gzipped)
|
314
|
-
assert !not_gzipped.eql?(gzipped)
|
315
|
-
end
|
316
|
-
|
317
|
-
def test_find_first_finds_static_file_as_directory
|
318
|
-
paths = ['/foo/bar.html', '/foo/bar/', '/foo/bar']
|
319
|
-
paths.each do |path|
|
320
|
-
serveable_file = ServeableFile.find_first(
|
321
|
-
:path_info => path,
|
322
|
-
:asset_compiler => NullAssetCompiler.new,
|
323
|
-
:asset_root => asset_root,
|
324
|
-
:include_gzipped => false
|
325
|
-
)
|
326
|
-
|
327
|
-
assert serveable_file, "ServeableFile should be found for path info '#{path}'"
|
328
|
-
assert_equal "#{asset_root}/foo/bar.html", serveable_file.path
|
329
|
-
assert_equal "/foo/bar.html", serveable_file.full_path_info
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
|
-
def test_find_first_finds_static_index_in_directory
|
334
|
-
paths = ['/foo/index.html', '/foo/', '/foo']
|
335
|
-
paths.each do |path|
|
336
|
-
serveable_file = ServeableFile.find_first(
|
337
|
-
:path_info => path,
|
338
|
-
:asset_compiler => NullAssetCompiler.new,
|
339
|
-
:asset_root => asset_root,
|
340
|
-
:include_gzipped => false
|
341
|
-
)
|
342
|
-
|
343
|
-
assert serveable_file, "ServeableFile should be found for path info '#{path}'"
|
344
|
-
assert_equal "#{asset_root}/foo/index.html", serveable_file.path
|
345
|
-
assert_equal "/foo/index.html", serveable_file.full_path_info
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
def test_find_first_finds_static_index_at_root
|
350
|
-
valid_root_paths = [
|
351
|
-
'/index.html', '/index', '/', ''
|
352
|
-
]
|
353
|
-
valid_root_paths.each do |root|
|
354
|
-
|
355
|
-
serveable_file = ServeableFile.find_first(
|
356
|
-
:path_info => root,
|
357
|
-
:asset_compiler => NullAssetCompiler.new,
|
358
|
-
:asset_root => asset_root,
|
359
|
-
:include_gzipped => false
|
360
|
-
)
|
361
|
-
|
362
|
-
assert serveable_file, "ServeableFile should be found for root path info '#{root}'"
|
363
|
-
assert_equal "#{asset_root}/index.html", serveable_file.path
|
364
|
-
assert_equal "/index.html", serveable_file.full_path_info
|
365
|
-
end
|
366
|
-
end
|
367
|
-
|
368
|
-
def test_find_first_finds_nothing_for_non_static_extension
|
369
|
-
assert_nil ServeableFile.find_first(
|
370
|
-
:path_info => '/about',
|
371
|
-
:asset_compiler => NullAssetCompiler.new,
|
372
|
-
:asset_root => asset_root
|
373
|
-
)
|
374
|
-
end
|
375
|
-
|
376
|
-
def test_find_first_finds_nothing_for_compileable_path_info
|
377
|
-
::Rails.configuration.assets.compile = true
|
378
|
-
|
379
|
-
asset_compiler = RailsAssetCompiler.new
|
380
|
-
|
381
|
-
path_info = '/assets/main.css'
|
382
|
-
|
383
|
-
assert asset_compiler.compiles?(path_info),
|
384
|
-
"asset compiler should compile '#{path_info}'"
|
385
|
-
|
386
|
-
assert_nil ServeableFile.find_first(
|
387
|
-
:path_info => path_info,
|
388
|
-
:asset_compiler => asset_compiler
|
389
|
-
)
|
390
|
-
end
|
391
|
-
|
392
|
-
def test_find_first_finds_gzip_variant
|
393
|
-
|
394
|
-
result = ServeableFile.find_first(
|
395
|
-
:path_info => "/assets/application.css",
|
396
|
-
:asset_compiler => NullAssetCompiler.new,
|
397
|
-
:asset_root => asset_root,
|
398
|
-
:include_gzipped => true
|
399
|
-
)
|
400
|
-
|
401
|
-
assert_equal "#{asset_root}/assets/application.css.gz", result.path,
|
402
|
-
"gzipped file variant should be found"
|
403
|
-
assert_equal "/assets/application.css", result.full_path_info
|
404
|
-
assert result.encoding_variants?
|
405
|
-
assert result.gzipped?
|
406
|
-
end
|
407
|
-
|
408
|
-
def test_find_first_finds_uncompressed_file_when_include_gzipped_false
|
409
|
-
result = ServeableFile.find_first(
|
410
|
-
:path_info => "/assets/application.css",
|
411
|
-
:asset_compiler => NullAssetCompiler.new,
|
412
|
-
:asset_root => asset_root,
|
413
|
-
:include_gzipped => false
|
414
|
-
)
|
415
|
-
|
416
|
-
assert_equal "#{asset_root}/assets/application.css", result.path,
|
417
|
-
"non-gzipped file variant should be found"
|
418
|
-
assert_equal "/assets/application.css", result.full_path_info
|
419
|
-
assert result.encoding_variants?
|
420
|
-
assert !result.gzipped?
|
421
|
-
end
|
422
|
-
|
423
|
-
def test_find_first_finds_uncompressed_file_that_has_no_gzip_variant
|
424
|
-
result = ServeableFile.find_first(
|
425
|
-
:path_info => "/thanks.html",
|
426
|
-
:asset_compiler => NullAssetCompiler.new,
|
427
|
-
:asset_root => asset_root,
|
428
|
-
:include_gzipped => true
|
429
|
-
)
|
430
|
-
|
431
|
-
assert_equal "#{asset_root}/thanks.html", result.path
|
432
|
-
assert_equal "/thanks.html", result.full_path_info
|
433
|
-
assert !result.encoding_variants?
|
434
|
-
assert !result.gzipped?
|
435
|
-
end
|
436
|
-
|
437
|
-
def test_find_first_finds_nothing_for_static_extension_and_non_existent_file
|
438
|
-
assert_nil ServeableFile.find_first(
|
439
|
-
:path_info => '/about.html',
|
440
|
-
:asset_compiler => NullAssetCompiler.new,
|
441
|
-
:asset_root => asset_root,
|
442
|
-
:include_gzipped => false
|
443
|
-
)
|
444
|
-
end
|
445
|
-
|
446
|
-
def test_has_static_extension_handles_non_lowercase_chars
|
447
|
-
['pNG', 'JPEG', 'HTML', 'HtM', 'GIF', 'Ico'].each do |extension|
|
448
|
-
assert ServeableFile.has_static_extension?("/some-asset.#{extension}")
|
449
|
-
end
|
450
|
-
end
|
451
|
-
|
452
|
-
def test_has_static_extension_returns_false_for_asset_paths_without_period
|
453
|
-
['/assets/somepng', '/indexhtml', '/assets/applicationcss'].each do |path|
|
454
|
-
assert !ServeableFile.has_static_extension?(path)
|
455
|
-
end
|
456
|
-
end
|
457
|
-
|
458
|
-
def test_has_static_extension_returns_true_for_fonts
|
459
|
-
font_extensions = ['woff', 'woff2', 'ttf', 'eot', 'otf']
|
460
|
-
font_extensions.each do |extension|
|
461
|
-
assert ServeableFile.has_static_extension?("/comic-sans.#{extension}"),
|
462
|
-
"'#{extension}' font extension not recognized"
|
463
|
-
end
|
464
|
-
end
|
465
|
-
|
466
|
-
def test_has_static_extension_returns_true_for_flash
|
467
|
-
assert ServeableFile.has_static_extension?('/splash-page-like-its-1999.swf'),
|
468
|
-
"Should handle flash .swf files"
|
469
|
-
end
|
470
|
-
|
471
|
-
def test_has_static_extension_returns_true_for_configured_extension
|
472
|
-
Rack::Zippy.static_extensions << 'csv'
|
473
|
-
assert ServeableFile.has_static_extension?('/static-file.csv'),
|
474
|
-
"Should handle files with user configured extensions"
|
475
|
-
end
|
476
|
-
|
477
|
-
private
|
478
|
-
|
479
|
-
def assert_last_modified(headers, expected)
|
480
|
-
assert_equal expected, headers['Last-Modified']
|
481
|
-
end
|
482
|
-
|
483
|
-
def assert_cache_friendly_last_modified(headers)
|
484
|
-
assert_last_modified headers, CACHE_FRIENDLY_LAST_MODIFIED
|
485
|
-
end
|
486
|
-
|
487
|
-
def assert_cache_max_age(headers, expected_duration)
|
488
|
-
duration_in_secs = DURATIONS_IN_SECS[expected_duration] || expected_duration
|
489
|
-
assert_equal "public, max-age=#{duration_in_secs}", headers['Cache-Control']
|
490
|
-
end
|
491
|
-
|
492
|
-
end
|
493
|
-
end
|
494
|
-
end
|