paperclip 4.1.1 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of paperclip might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +0 -6
- data/.travis.yml +4 -13
- data/Appraisals +0 -10
- data/CONTRIBUTING.md +10 -5
- data/Gemfile +8 -4
- data/NEWS +1 -1
- data/README.md +51 -10
- data/Rakefile +6 -8
- data/features/basic_integration.feature +5 -5
- data/features/step_definitions/attachment_steps.rb +4 -4
- data/features/step_definitions/rails_steps.rb +4 -4
- data/features/step_definitions/web_steps.rb +2 -2
- data/features/support/env.rb +2 -2
- data/features/support/fixtures/gemfile.txt +1 -1
- data/features/support/rails.rb +2 -1
- data/gemfiles/3.2.gemfile +5 -3
- data/gemfiles/4.0.gemfile +5 -3
- data/gemfiles/4.1.gemfile +5 -3
- data/lib/generators/paperclip/paperclip_generator.rb +0 -2
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
- data/lib/paperclip.rb +4 -1
- data/lib/paperclip/attachment.rb +90 -29
- data/lib/paperclip/content_type_detector.rb +1 -1
- data/lib/paperclip/geometry_detector_factory.rb +3 -1
- data/lib/paperclip/has_attached_file.rb +2 -1
- data/lib/paperclip/interpolations.rb +8 -0
- data/lib/paperclip/io_adapters/abstract_adapter.rb +1 -1
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +1 -1
- data/lib/paperclip/io_adapters/stringio_adapter.rb +5 -11
- data/lib/paperclip/locales/de.yml +18 -0
- data/lib/paperclip/locales/es.yml +18 -0
- data/lib/paperclip/matchers/have_attached_file_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
- data/lib/paperclip/media_type_spoof_detector.rb +10 -2
- data/lib/paperclip/storage/filesystem.rb +1 -1
- data/lib/paperclip/storage/s3.rb +26 -4
- data/lib/paperclip/style.rb +1 -1
- data/lib/paperclip/thumbnail.rb +6 -6
- data/lib/paperclip/validators.rb +5 -3
- data/lib/paperclip/validators/attachment_size_validator.rb +7 -3
- data/lib/paperclip/version.rb +1 -1
- data/lib/tasks/paperclip.rake +1 -2
- data/paperclip.gemspec +5 -3
- data/shoulda_macros/paperclip.rb +0 -1
- data/{test → spec}/database.yml +0 -0
- data/spec/paperclip/attachment_definitions_spec.rb +13 -0
- data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +20 -21
- data/{test/attachment_registry_test.rb → spec/paperclip/attachment_registry_spec.rb} +10 -11
- data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +367 -360
- data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +8 -8
- data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +5 -5
- data/spec/paperclip/filename_cleaner_spec.rb +14 -0
- data/spec/paperclip/geometry_detector_spec.rb +39 -0
- data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
- data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +49 -51
- data/{test/has_attached_file_test.rb → spec/paperclip/has_attached_file_spec.rb} +18 -27
- data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +134 -126
- data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +54 -40
- data/{test/io_adapters/abstract_adapter_test.rb → spec/paperclip/io_adapters/abstract_adapter_spec.rb} +21 -10
- data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +27 -29
- data/{test/io_adapters/data_uri_adapter_test.rb → spec/paperclip/io_adapters/data_uri_adapter_spec.rb} +22 -18
- data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
- data/{test/io_adapters/file_adapter_test.rb → spec/paperclip/io_adapters/file_adapter_spec.rb} +32 -28
- data/{test/io_adapters/http_url_proxy_adapter_test.rb → spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb} +22 -22
- data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
- data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
- data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +10 -7
- data/{test/io_adapters/stringio_adapter_test.rb → spec/paperclip/io_adapters/stringio_adapter_spec.rb} +16 -17
- data/{test/io_adapters/uploaded_file_adapter_test.rb → spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb} +41 -41
- data/{test/io_adapters/uri_adapter_test.rb → spec/paperclip/io_adapters/uri_adapter_spec.rb} +22 -22
- data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
- data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +99 -0
- data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
- data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
- data/{test/media_type_spoof_detector_test.rb → spec/paperclip/media_type_spoof_detector_spec.rb} +13 -8
- data/spec/paperclip/meta_class_spec.rb +30 -0
- data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
- data/{test/paperclip_test.rb → spec/paperclip/paperclip_spec.rb} +47 -47
- data/{test/plural_cache_test.rb → spec/paperclip/plural_cache_spec.rb} +6 -6
- data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
- data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
- data/spec/paperclip/schema_spec.rb +206 -0
- data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
- data/{test/storage/fog_test.rb → spec/paperclip/storage/fog_spec.rb} +145 -140
- data/spec/paperclip/storage/s3_live_spec.rb +182 -0
- data/spec/paperclip/storage/s3_spec.rb +1475 -0
- data/spec/paperclip/style_spec.rb +255 -0
- data/spec/paperclip/tempfile_factory_spec.rb +29 -0
- data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +107 -107
- data/{test/url_generator_test.rb → spec/paperclip/url_generator_spec.rb} +55 -56
- data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
- data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
- data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +19 -19
- data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +65 -58
- data/{test/validators/media_type_spoof_detection_validator_test.rb → spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb} +8 -8
- data/spec/paperclip/validators_spec.rb +164 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/assertions.rb +71 -0
- data/spec/support/fake_model.rb +21 -0
- data/spec/support/fake_rails.rb +12 -0
- data/{test → spec/support}/fixtures/12k.png +0 -0
- data/{test → spec/support}/fixtures/50x50.png +0 -0
- data/{test → spec/support}/fixtures/5k.png +0 -0
- data/{test → spec/support}/fixtures/animated +0 -0
- data/{test → spec/support}/fixtures/animated.gif +0 -0
- data/{test → spec/support}/fixtures/animated.unknown +0 -0
- data/{test → spec/support}/fixtures/bad.png +0 -0
- data/{test → spec/support}/fixtures/empty.html +0 -0
- data/{test → spec/support}/fixtures/fog.yml +0 -0
- data/{test → spec/support}/fixtures/rotated.jpg +0 -0
- data/{test → spec/support}/fixtures/s3.yml +0 -0
- data/spec/support/fixtures/spaced file.jpg +0 -0
- data/test/fixtures/spaced file.png b/data/spec/support/fixtures/spaced → file.png +0 -0
- data/{test → spec/support}/fixtures/text.txt +0 -0
- data/{test → spec/support}/fixtures/twopage.pdf +0 -0
- data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
- data/spec/support/matchers/accept.rb +5 -0
- data/spec/support/matchers/exist.rb +5 -0
- data/{test → spec}/support/mock_attachment.rb +0 -0
- data/{test → spec}/support/mock_interpolator.rb +0 -0
- data/{test → spec}/support/mock_model.rb +0 -0
- data/{test → spec}/support/mock_url_generator_builder.rb +0 -0
- data/spec/support/model_reconstruction.rb +60 -0
- data/spec/support/rails_helpers.rb +7 -0
- data/spec/support/test_data.rb +13 -0
- data/spec/support/version_helper.rb +9 -0
- metadata +256 -210
- data/gemfiles/3.0.gemfile +0 -11
- data/gemfiles/3.1.gemfile +0 -11
- data/test/attachment_definitions_test.rb +0 -13
- data/test/filename_cleaner_test.rb +0 -14
- data/test/generator_test.rb +0 -84
- data/test/geometry_detector_test.rb +0 -24
- data/test/helper.rb +0 -239
- data/test/io_adapters/empty_string_adapter_test.rb +0 -18
- data/test/io_adapters/identity_adapter_test.rb +0 -8
- data/test/matchers/have_attached_file_matcher_test.rb +0 -25
- data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -111
- data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -70
- data/test/matchers/validate_attachment_size_matcher_test.rb +0 -87
- data/test/meta_class_test.rb +0 -32
- data/test/paperclip_missing_attachment_styles_test.rb +0 -90
- data/test/schema_test.rb +0 -206
- data/test/storage/s3_live_test.rb +0 -179
- data/test/storage/s3_test.rb +0 -1357
- data/test/style_test.rb +0 -251
- data/test/tempfile_factory_test.rb +0 -29
- data/test/validators/attachment_content_type_validator_test.rb +0 -324
- data/test/validators/attachment_file_name_validator_test.rb +0 -162
- data/test/validators_test.rb +0 -101
data/test/style_test.rb
DELETED
@@ -1,251 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require './test/helper'
|
3
|
-
|
4
|
-
class StyleTest < Test::Unit::TestCase
|
5
|
-
|
6
|
-
context "A style rule" do
|
7
|
-
setup do
|
8
|
-
@attachment = attachment :path => ":basename.:extension",
|
9
|
-
:styles => { :foo => {:geometry => "100x100#", :format => :png} },
|
10
|
-
:whiny => true
|
11
|
-
@style = @attachment.styles[:foo]
|
12
|
-
end
|
13
|
-
|
14
|
-
should "be held as a Style object" do
|
15
|
-
assert_kind_of Paperclip::Style, @style
|
16
|
-
end
|
17
|
-
|
18
|
-
should "get processors from the attachment definition" do
|
19
|
-
assert_equal [:thumbnail], @style.processors
|
20
|
-
end
|
21
|
-
|
22
|
-
should "have the right geometry" do
|
23
|
-
assert_equal "100x100#", @style.geometry
|
24
|
-
end
|
25
|
-
|
26
|
-
should "be whiny if the attachment is" do
|
27
|
-
assert @style.whiny?
|
28
|
-
end
|
29
|
-
|
30
|
-
should "respond to hash notation" do
|
31
|
-
assert_equal [:thumbnail], @style[:processors]
|
32
|
-
assert_equal "100x100#", @style[:geometry]
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "A style rule with properties supplied as procs" do
|
37
|
-
setup do
|
38
|
-
@attachment = attachment :path => ":basename.:extension",
|
39
|
-
:whiny_thumbnails => true,
|
40
|
-
:processors => lambda {|a| [:test]},
|
41
|
-
:styles => {
|
42
|
-
:foo => lambda{|a| "300x300#"},
|
43
|
-
:bar => {
|
44
|
-
:geometry => lambda{|a| "300x300#"},
|
45
|
-
:convert_options => lambda{|a| "-do_stuff"},
|
46
|
-
:source_file_options => lambda{|a| "-do_extra_stuff"}
|
47
|
-
}
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
should "call procs when they are needed" do
|
52
|
-
assert_equal "300x300#", @attachment.styles[:foo].geometry
|
53
|
-
assert_equal "300x300#", @attachment.styles[:bar].geometry
|
54
|
-
assert_equal [:test], @attachment.styles[:foo].processors
|
55
|
-
assert_equal [:test], @attachment.styles[:bar].processors
|
56
|
-
assert_equal "-do_stuff", @attachment.styles[:bar].convert_options
|
57
|
-
assert_equal "-do_extra_stuff", @attachment.styles[:bar].source_file_options
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context "An attachment with style rules in various forms" do
|
62
|
-
setup do
|
63
|
-
styles = {}
|
64
|
-
styles[:aslist] = ["100x100", :png]
|
65
|
-
styles[:ashash] = {:geometry => "100x100", :format => :png}
|
66
|
-
styles[:asstring] = "100x100"
|
67
|
-
@attachment = attachment :path => ":basename.:extension",
|
68
|
-
:styles => styles
|
69
|
-
end
|
70
|
-
should "have the right number of styles" do
|
71
|
-
assert_kind_of Hash, @attachment.styles
|
72
|
-
assert_equal 3, @attachment.styles.size
|
73
|
-
end
|
74
|
-
|
75
|
-
should "have styles as Style objects" do
|
76
|
-
[:aslist, :ashash, :aslist].each do |s|
|
77
|
-
assert_kind_of Paperclip::Style, @attachment.styles[s]
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
should "have the right geometries" do
|
82
|
-
[:aslist, :ashash, :aslist].each do |s|
|
83
|
-
assert_equal @attachment.styles[s].geometry, "100x100"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
should "have the right formats" do
|
88
|
-
assert_equal @attachment.styles[:aslist].format, :png
|
89
|
-
assert_equal @attachment.styles[:ashash].format, :png
|
90
|
-
assert_nil @attachment.styles[:asstring].format
|
91
|
-
end
|
92
|
-
|
93
|
-
should "retain order" do
|
94
|
-
assert_equal [:aslist, :ashash, :asstring], @attachment.styles.keys
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context "An attachment with :convert_options" do
|
99
|
-
should "not have called extra_options_for(:thumb/:large) on initialization" do
|
100
|
-
@attachment = attachment :path => ":basename.:extension",
|
101
|
-
:styles => {:thumb => "100x100", :large => "400x400"},
|
102
|
-
:convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"}
|
103
|
-
@attachment.expects(:extra_options_for).never
|
104
|
-
@style = @attachment.styles[:thumb]
|
105
|
-
end
|
106
|
-
|
107
|
-
should "call extra_options_for(:thumb/:large) when convert options are requested" do
|
108
|
-
@attachment = attachment :path => ":basename.:extension",
|
109
|
-
:styles => {:thumb => "100x100", :large => "400x400"},
|
110
|
-
:convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"}
|
111
|
-
@style = @attachment.styles[:thumb]
|
112
|
-
@file = StringIO.new("...")
|
113
|
-
@file.stubs(:original_filename).returns("file.jpg")
|
114
|
-
|
115
|
-
@attachment.expects(:extra_options_for).with(:thumb)
|
116
|
-
@attachment.styles[:thumb].convert_options
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
context "An attachment with :source_file_options" do
|
121
|
-
should "not have called extra_source_file_options_for(:thumb/:large) on initialization" do
|
122
|
-
@attachment = attachment :path => ":basename.:extension",
|
123
|
-
:styles => {:thumb => "100x100", :large => "400x400"},
|
124
|
-
:source_file_options => {:all => "-density 400", :thumb => "-depth 8"}
|
125
|
-
@attachment.expects(:extra_source_file_options_for).never
|
126
|
-
@style = @attachment.styles[:thumb]
|
127
|
-
end
|
128
|
-
|
129
|
-
should "call extra_options_for(:thumb/:large) when convert options are requested" do
|
130
|
-
@attachment = attachment :path => ":basename.:extension",
|
131
|
-
:styles => {:thumb => "100x100", :large => "400x400"},
|
132
|
-
:source_file_options => {:all => "-density 400", :thumb => "-depth 8"}
|
133
|
-
@style = @attachment.styles[:thumb]
|
134
|
-
@file = StringIO.new("...")
|
135
|
-
@file.stubs(:original_filename).returns("file.jpg")
|
136
|
-
|
137
|
-
@attachment.expects(:extra_source_file_options_for).with(:thumb)
|
138
|
-
@attachment.styles[:thumb].source_file_options
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
context "A style rule with its own :processors" do
|
143
|
-
setup do
|
144
|
-
@attachment = attachment :path => ":basename.:extension",
|
145
|
-
:styles => {
|
146
|
-
:foo => {
|
147
|
-
:geometry => "100x100#",
|
148
|
-
:format => :png,
|
149
|
-
:processors => [:test]
|
150
|
-
}
|
151
|
-
},
|
152
|
-
:processors => [:thumbnail]
|
153
|
-
@style = @attachment.styles[:foo]
|
154
|
-
end
|
155
|
-
|
156
|
-
should "not get processors from the attachment" do
|
157
|
-
@attachment.expects(:processors).never
|
158
|
-
assert_not_equal [:thumbnail], @style.processors
|
159
|
-
end
|
160
|
-
|
161
|
-
should "report its own processors" do
|
162
|
-
assert_equal [:test], @style.processors
|
163
|
-
end
|
164
|
-
|
165
|
-
end
|
166
|
-
|
167
|
-
context "A style rule with :processors supplied as procs" do
|
168
|
-
setup do
|
169
|
-
@attachment = attachment :path => ":basename.:extension",
|
170
|
-
:styles => {
|
171
|
-
:foo => {
|
172
|
-
:geometry => "100x100#",
|
173
|
-
:format => :png,
|
174
|
-
:processors => lambda{|a| [:test]}
|
175
|
-
}
|
176
|
-
},
|
177
|
-
:processors => [:thumbnail]
|
178
|
-
end
|
179
|
-
|
180
|
-
should "defer processing of procs until they are needed" do
|
181
|
-
assert_kind_of Proc, @attachment.styles[:foo].instance_variable_get("@processors")
|
182
|
-
end
|
183
|
-
|
184
|
-
should "call procs when they are needed" do
|
185
|
-
assert_equal [:test], @attachment.styles[:foo].processors
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
context "An attachment with :convert_options and :source_file_options in :styles" do
|
190
|
-
setup do
|
191
|
-
@attachment = attachment :path => ":basename.:extension",
|
192
|
-
:styles => {
|
193
|
-
:thumb => "100x100",
|
194
|
-
:large => {:geometry => "400x400",
|
195
|
-
:convert_options => "-do_stuff",
|
196
|
-
:source_file_options => "-do_extra_stuff"
|
197
|
-
}
|
198
|
-
}
|
199
|
-
@file = StringIO.new("...")
|
200
|
-
@file.stubs(:original_filename).returns("file.jpg")
|
201
|
-
end
|
202
|
-
|
203
|
-
should "have empty options for :thumb style" do
|
204
|
-
assert_equal "", @attachment.styles[:thumb].processor_options[:convert_options]
|
205
|
-
assert_equal "", @attachment.styles[:thumb].processor_options[:source_file_options]
|
206
|
-
end
|
207
|
-
|
208
|
-
should "have the right options for :large style" do
|
209
|
-
assert_equal "-do_stuff", @attachment.styles[:large].processor_options[:convert_options]
|
210
|
-
assert_equal "-do_extra_stuff", @attachment.styles[:large].processor_options[:source_file_options]
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
context "A style rule supplied with default format" do
|
215
|
-
setup do
|
216
|
-
@attachment = attachment :default_format => :png,
|
217
|
-
:styles => {
|
218
|
-
:asstring => "300x300#",
|
219
|
-
:aslist => ["300x300#", :jpg],
|
220
|
-
:ashash => {
|
221
|
-
:geometry => "300x300#",
|
222
|
-
:convert_options => "-do_stuff"
|
223
|
-
}
|
224
|
-
}
|
225
|
-
end
|
226
|
-
|
227
|
-
should "have the right number of styles" do
|
228
|
-
assert_kind_of Hash, @attachment.styles
|
229
|
-
assert_equal 3, @attachment.styles.size
|
230
|
-
end
|
231
|
-
|
232
|
-
should "have styles as Style objects" do
|
233
|
-
[:aslist, :ashash, :aslist].each do |s|
|
234
|
-
assert_kind_of Paperclip::Style, @attachment.styles[s]
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
should "have the right geometries" do
|
239
|
-
[:aslist, :ashash, :aslist].each do |s|
|
240
|
-
assert_equal @attachment.styles[s].geometry, "300x300#"
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
should "have the right formats" do
|
245
|
-
assert_equal @attachment.styles[:aslist].format, :jpg
|
246
|
-
assert_equal @attachment.styles[:ashash].format, :png
|
247
|
-
assert_equal @attachment.styles[:asstring].format, :png
|
248
|
-
end
|
249
|
-
|
250
|
-
end
|
251
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
|
3
|
-
class Paperclip::TempfileFactoryTest < Test::Unit::TestCase
|
4
|
-
should "be able to generate a tempfile with the right name" do
|
5
|
-
file = subject.generate("omg.png")
|
6
|
-
assert File.extname(file.path), "png"
|
7
|
-
end
|
8
|
-
|
9
|
-
should "be able to generate a tempfile with the right name with a tilde at the beginning" do
|
10
|
-
file = subject.generate("~omg.png")
|
11
|
-
assert File.extname(file.path), "png"
|
12
|
-
end
|
13
|
-
|
14
|
-
should "be able to generate a tempfile with the right name with a tilde at the end" do
|
15
|
-
file = subject.generate("omg.png~")
|
16
|
-
assert File.extname(file.path), "png"
|
17
|
-
end
|
18
|
-
|
19
|
-
should "be able to generate a tempfile from a file with a really long name" do
|
20
|
-
filename = "#{"longfilename" * 100}.png"
|
21
|
-
file = subject.generate(filename)
|
22
|
-
assert File.extname(file.path), "png"
|
23
|
-
end
|
24
|
-
|
25
|
-
should 'be able to take nothing as a parameter and not error' do
|
26
|
-
file = subject.generate
|
27
|
-
assert File.exists?(file.path)
|
28
|
-
end
|
29
|
-
end
|
@@ -1,324 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
|
3
|
-
class AttachmentContentTypeValidatorTest < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
rebuild_model
|
6
|
-
@dummy = Dummy.new
|
7
|
-
super
|
8
|
-
end
|
9
|
-
|
10
|
-
def build_validator(options)
|
11
|
-
@validator = Paperclip::Validators::AttachmentContentTypeValidator.new(options.merge(
|
12
|
-
:attributes => :avatar
|
13
|
-
))
|
14
|
-
end
|
15
|
-
|
16
|
-
context "with a nil content type" do
|
17
|
-
setup do
|
18
|
-
build_validator :content_type => "image/jpg"
|
19
|
-
@dummy.stubs(:avatar_content_type => nil)
|
20
|
-
@validator.validate(@dummy)
|
21
|
-
end
|
22
|
-
|
23
|
-
should "not set an error message" do
|
24
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "with :allow_nil option" do
|
29
|
-
context "as true" do
|
30
|
-
setup do
|
31
|
-
build_validator :content_type => "image/png", :allow_nil => true
|
32
|
-
@dummy.stubs(:avatar_content_type => nil)
|
33
|
-
@validator.validate(@dummy)
|
34
|
-
end
|
35
|
-
|
36
|
-
should "allow avatar_content_type as nil" do
|
37
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "as false" do
|
42
|
-
setup do
|
43
|
-
build_validator :content_type => "image/png", :allow_nil => false
|
44
|
-
@dummy.stubs(:avatar_content_type => nil)
|
45
|
-
@validator.validate(@dummy)
|
46
|
-
end
|
47
|
-
|
48
|
-
should "not allow avatar_content_type as nil" do
|
49
|
-
assert @dummy.errors[:avatar_content_type].present?
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
context "with a failing validation" do
|
55
|
-
setup do
|
56
|
-
build_validator :content_type => "image/png", :allow_nil => false
|
57
|
-
@dummy.stubs(:avatar_content_type => nil)
|
58
|
-
@validator.validate(@dummy)
|
59
|
-
end
|
60
|
-
|
61
|
-
should "add error to the base object" do
|
62
|
-
assert @dummy.errors[:avatar].present?,
|
63
|
-
"Error not added to base attribute"
|
64
|
-
end
|
65
|
-
|
66
|
-
should "add error to base object as a string" do
|
67
|
-
assert_kind_of String, @dummy.errors[:avatar].first,
|
68
|
-
"Error added to base attribute as something other than a String"
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "with a successful validation" do
|
73
|
-
setup do
|
74
|
-
build_validator :content_type => "image/png", :allow_nil => false
|
75
|
-
@dummy.stubs(:avatar_content_type => "image/png")
|
76
|
-
@validator.validate(@dummy)
|
77
|
-
end
|
78
|
-
|
79
|
-
should "not add error to the base object" do
|
80
|
-
assert @dummy.errors[:avatar].blank?,
|
81
|
-
"Error was added to base attribute"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context "with :allow_blank option" do
|
86
|
-
context "as true" do
|
87
|
-
setup do
|
88
|
-
build_validator :content_type => "image/png", :allow_blank => true
|
89
|
-
@dummy.stubs(:avatar_content_type => "")
|
90
|
-
@validator.validate(@dummy)
|
91
|
-
end
|
92
|
-
|
93
|
-
should "allow avatar_content_type as blank" do
|
94
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context "as false" do
|
99
|
-
setup do
|
100
|
-
build_validator :content_type => "image/png", :allow_blank => false
|
101
|
-
@dummy.stubs(:avatar_content_type => "")
|
102
|
-
@validator.validate(@dummy)
|
103
|
-
end
|
104
|
-
|
105
|
-
should "not allow avatar_content_type as blank" do
|
106
|
-
assert @dummy.errors[:avatar_content_type].present?
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context "whitelist format" do
|
112
|
-
context "with an allowed type" do
|
113
|
-
context "as a string" do
|
114
|
-
setup do
|
115
|
-
build_validator :content_type => "image/jpg"
|
116
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
117
|
-
@validator.validate(@dummy)
|
118
|
-
end
|
119
|
-
|
120
|
-
should "not set an error message" do
|
121
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
context "as an regexp" do
|
126
|
-
setup do
|
127
|
-
build_validator :content_type => /^image\/.*/
|
128
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
129
|
-
@validator.validate(@dummy)
|
130
|
-
end
|
131
|
-
|
132
|
-
should "not set an error message" do
|
133
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context "as a list" do
|
138
|
-
setup do
|
139
|
-
build_validator :content_type => ["image/png", "image/jpg", "image/jpeg"]
|
140
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
141
|
-
@validator.validate(@dummy)
|
142
|
-
end
|
143
|
-
|
144
|
-
should "not set an error message" do
|
145
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
context "with a disallowed type" do
|
151
|
-
context "as a string" do
|
152
|
-
setup do
|
153
|
-
build_validator :content_type => "image/png"
|
154
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
155
|
-
@validator.validate(@dummy)
|
156
|
-
end
|
157
|
-
|
158
|
-
should "set a correct default error message" do
|
159
|
-
assert @dummy.errors[:avatar_content_type].present?
|
160
|
-
assert_includes @dummy.errors[:avatar_content_type], "is invalid"
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
context "as a regexp" do
|
165
|
-
setup do
|
166
|
-
build_validator :content_type => /^text\/.*/
|
167
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
168
|
-
@validator.validate(@dummy)
|
169
|
-
end
|
170
|
-
|
171
|
-
should "set a correct default error message" do
|
172
|
-
assert @dummy.errors[:avatar_content_type].present?
|
173
|
-
assert_includes @dummy.errors[:avatar_content_type], "is invalid"
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
context "with :message option" do
|
178
|
-
context "without interpolation" do
|
179
|
-
setup do
|
180
|
-
build_validator :content_type => "image/png", :message => "should be a PNG image"
|
181
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
182
|
-
@validator.validate(@dummy)
|
183
|
-
end
|
184
|
-
|
185
|
-
should "set a correct error message" do
|
186
|
-
assert_includes @dummy.errors[:avatar_content_type], "should be a PNG image"
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
context "with interpolation" do
|
191
|
-
setup do
|
192
|
-
build_validator :content_type => "image/png", :message => "should have content type %{types}"
|
193
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
194
|
-
@validator.validate(@dummy)
|
195
|
-
end
|
196
|
-
|
197
|
-
should "set a correct error message" do
|
198
|
-
assert_includes @dummy.errors[:avatar_content_type], "should have content type image/png"
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
context "blacklist format" do
|
206
|
-
context "with an allowed type" do
|
207
|
-
context "as a string" do
|
208
|
-
setup do
|
209
|
-
build_validator :not => "image/gif"
|
210
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
211
|
-
@validator.validate(@dummy)
|
212
|
-
end
|
213
|
-
|
214
|
-
should "not set an error message" do
|
215
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
context "as an regexp" do
|
220
|
-
setup do
|
221
|
-
build_validator :not => /^text\/.*/
|
222
|
-
@dummy.stubs(:avatar_content_type => "image/jpg")
|
223
|
-
@validator.validate(@dummy)
|
224
|
-
end
|
225
|
-
|
226
|
-
should "not set an error message" do
|
227
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
context "as a list" do
|
232
|
-
setup do
|
233
|
-
build_validator :not => ["image/png", "image/jpg", "image/jpeg"]
|
234
|
-
@dummy.stubs(:avatar_content_type => "image/gif")
|
235
|
-
@validator.validate(@dummy)
|
236
|
-
end
|
237
|
-
|
238
|
-
should "not set an error message" do
|
239
|
-
assert @dummy.errors[:avatar_content_type].blank?
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
context "with a disallowed type" do
|
245
|
-
context "as a string" do
|
246
|
-
setup do
|
247
|
-
build_validator :not => "image/png"
|
248
|
-
@dummy.stubs(:avatar_content_type => "image/png")
|
249
|
-
@validator.validate(@dummy)
|
250
|
-
end
|
251
|
-
|
252
|
-
should "set a correct default error message" do
|
253
|
-
assert @dummy.errors[:avatar_content_type].present?
|
254
|
-
assert_includes @dummy.errors[:avatar_content_type], "is invalid"
|
255
|
-
end
|
256
|
-
end
|
257
|
-
|
258
|
-
context "as a regexp" do
|
259
|
-
setup do
|
260
|
-
build_validator :not => /^text\/.*/
|
261
|
-
@dummy.stubs(:avatar_content_type => "text/plain")
|
262
|
-
@validator.validate(@dummy)
|
263
|
-
end
|
264
|
-
|
265
|
-
should "set a correct default error message" do
|
266
|
-
assert @dummy.errors[:avatar_content_type].present?
|
267
|
-
assert_includes @dummy.errors[:avatar_content_type], "is invalid"
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
context "with :message option" do
|
272
|
-
context "without interpolation" do
|
273
|
-
setup do
|
274
|
-
build_validator :not => "image/png", :message => "should not be a PNG image"
|
275
|
-
@dummy.stubs(:avatar_content_type => "image/png")
|
276
|
-
@validator.validate(@dummy)
|
277
|
-
end
|
278
|
-
|
279
|
-
should "set a correct error message" do
|
280
|
-
assert_includes @dummy.errors[:avatar_content_type], "should not be a PNG image"
|
281
|
-
end
|
282
|
-
end
|
283
|
-
|
284
|
-
context "with interpolation" do
|
285
|
-
setup do
|
286
|
-
build_validator :not => "image/png", :message => "should not have content type %{types}"
|
287
|
-
@dummy.stubs(:avatar_content_type => "image/png")
|
288
|
-
@validator.validate(@dummy)
|
289
|
-
end
|
290
|
-
|
291
|
-
should "set a correct error message" do
|
292
|
-
assert_includes @dummy.errors[:avatar_content_type], "should not have content type image/png"
|
293
|
-
end
|
294
|
-
end
|
295
|
-
end
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
context "using the helper" do
|
300
|
-
setup do
|
301
|
-
Dummy.validates_attachment_content_type :avatar, :content_type => "image/jpg"
|
302
|
-
end
|
303
|
-
|
304
|
-
should "add the validator to the class" do
|
305
|
-
assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_content_type }
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
context "given options" do
|
310
|
-
should "raise argument error if no required argument was given" do
|
311
|
-
assert_raises(ArgumentError) do
|
312
|
-
build_validator :message => "Some message"
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
|
-
should "not raise argument error if :content_type was given" do
|
317
|
-
build_validator :content_type => "image/jpg"
|
318
|
-
end
|
319
|
-
|
320
|
-
should "not raise argument error if :not was given" do
|
321
|
-
build_validator :not => "image/jpg"
|
322
|
-
end
|
323
|
-
end
|
324
|
-
end
|