paperclip 3.5.4 → 4.3.7
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/.hound.yml +1066 -0
- data/.rubocop.yml +1 -0
- data/.travis.yml +11 -17
- data/Appraisals +6 -14
- data/CONTRIBUTING.md +13 -8
- data/Gemfile +16 -3
- data/LICENSE +1 -3
- data/NEWS +167 -49
- data/README.md +294 -75
- data/RELEASING.md +17 -0
- data/Rakefile +6 -8
- data/features/basic_integration.feature +24 -6
- data/features/step_definitions/attachment_steps.rb +30 -22
- data/features/step_definitions/html_steps.rb +2 -2
- data/features/step_definitions/rails_steps.rb +44 -14
- data/features/step_definitions/web_steps.rb +1 -103
- data/features/support/env.rb +2 -2
- data/features/support/file_helpers.rb +2 -2
- data/features/support/fixtures/gemfile.txt +1 -1
- data/features/support/rails.rb +2 -1
- data/gemfiles/3.2.gemfile +14 -6
- data/gemfiles/4.1.gemfile +19 -0
- data/gemfiles/4.2.gemfile +19 -0
- data/lib/generators/paperclip/paperclip_generator.rb +0 -2
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
- data/lib/paperclip/attachment.rb +132 -38
- data/lib/paperclip/attachment_registry.rb +1 -1
- data/lib/paperclip/callbacks.rb +11 -1
- data/lib/paperclip/content_type_detector.rb +25 -22
- data/lib/paperclip/deprecations.rb +42 -0
- data/lib/paperclip/errors.rb +5 -0
- data/lib/paperclip/file_command_content_type_detector.rb +6 -8
- data/lib/paperclip/geometry_detector_factory.rb +3 -1
- data/lib/paperclip/geometry_parser_factory.rb +1 -1
- data/lib/paperclip/has_attached_file.rb +10 -0
- data/lib/paperclip/interpolations/plural_cache.rb +6 -5
- data/lib/paperclip/interpolations.rb +25 -12
- data/lib/paperclip/io_adapters/abstract_adapter.rb +3 -1
- data/lib/paperclip/io_adapters/attachment_adapter.rb +4 -4
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +5 -10
- data/lib/paperclip/io_adapters/stringio_adapter.rb +6 -10
- data/lib/paperclip/io_adapters/uri_adapter.rb +30 -11
- data/lib/paperclip/locales/de.yml +18 -0
- data/lib/paperclip/locales/en.yml +1 -0
- data/lib/paperclip/locales/es.yml +18 -0
- data/lib/paperclip/locales/ja.yml +18 -0
- data/lib/paperclip/locales/pt-BR.yml +18 -0
- data/lib/paperclip/locales/zh-CN.yml +18 -0
- data/lib/paperclip/locales/zh-HK.yml +18 -0
- data/lib/paperclip/locales/zh-TW.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 +89 -0
- data/lib/paperclip/processor.rb +0 -37
- data/lib/paperclip/processor_helpers.rb +50 -0
- data/lib/paperclip/rails_environment.rb +25 -0
- data/lib/paperclip/schema.rb +10 -2
- data/lib/paperclip/storage/filesystem.rb +1 -1
- data/lib/paperclip/storage/fog.rb +18 -7
- data/lib/paperclip/storage/s3.rb +53 -22
- data/lib/paperclip/style.rb +8 -2
- data/lib/paperclip/tempfile_factory.rb +5 -1
- data/lib/paperclip/thumbnail.rb +12 -10
- data/lib/paperclip/url_generator.rb +11 -3
- data/lib/paperclip/validators/attachment_content_type_validator.rb +4 -0
- data/lib/paperclip/validators/attachment_file_name_validator.rb +80 -0
- data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +29 -0
- data/lib/paperclip/validators/attachment_presence_validator.rb +4 -0
- data/lib/paperclip/validators/attachment_size_validator.rb +11 -3
- data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +27 -0
- data/lib/paperclip/validators.rb +10 -3
- data/lib/paperclip/version.rb +1 -1
- data/lib/paperclip.rb +26 -8
- data/lib/tasks/paperclip.rake +17 -2
- data/paperclip.gemspec +16 -14
- data/shoulda_macros/paperclip.rb +0 -1
- data/spec/paperclip/attachment_definitions_spec.rb +13 -0
- data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +20 -21
- data/spec/paperclip/attachment_registry_spec.rb +130 -0
- data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +438 -397
- data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +16 -19
- data/spec/paperclip/deprecations_spec.rb +65 -0
- data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +5 -6
- 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} +50 -52
- data/spec/paperclip/glue_spec.rb +44 -0
- data/{test/has_attached_file_test.rb → spec/paperclip/has_attached_file_spec.rb} +45 -28
- data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +134 -126
- data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +70 -46
- data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +78 -0
- 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} +26 -17
- 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} +36 -40
- data/{test/io_adapters/http_url_proxy_adapter_test.rb → spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb} +31 -29
- 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} +20 -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} +53 -28
- 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/spec/paperclip/media_type_spoof_detector_spec.rb +79 -0
- 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} +53 -48
- data/spec/paperclip/plural_cache_spec.rb +37 -0
- data/spec/paperclip/processor_helpers_spec.rb +57 -0
- data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
- data/spec/paperclip/rails_environment_spec.rb +33 -0
- data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
- data/spec/paperclip/schema_spec.rb +248 -0
- data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
- data/spec/paperclip/storage/fog_spec.rb +535 -0
- data/spec/paperclip/storage/s3_live_spec.rb +182 -0
- data/spec/paperclip/storage/s3_spec.rb +1526 -0
- data/spec/paperclip/style_spec.rb +255 -0
- data/spec/paperclip/tempfile_factory_spec.rb +33 -0
- data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +123 -107
- data/spec/paperclip/url_generator_spec.rb +211 -0
- 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} +20 -20
- data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +65 -58
- data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +52 -0
- data/spec/paperclip/validators_spec.rb +164 -0
- data/spec/spec_helper.rb +43 -0
- data/spec/support/assertions.rb +71 -0
- data/spec/support/deprecations.rb +9 -0
- data/spec/support/fake_model.rb +25 -0
- data/spec/support/fake_rails.rb +12 -0
- data/spec/support/fixtures/empty.html +1 -0
- data/spec/support/fixtures/empty.xlsx +0 -0
- data/spec/support/fixtures/spaced file.jpg +0 -0
- data/spec/support/matchers/accept.rb +5 -0
- data/spec/support/matchers/exist.rb +5 -0
- data/spec/support/matchers/have_column.rb +23 -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 +334 -219
- data/RUNNING_TESTS.md +0 -4
- data/gemfiles/3.0.gemfile +0 -11
- data/gemfiles/3.1.gemfile +0 -11
- data/gemfiles/4.0.gemfile +0 -11
- data/test/attachment_definitions_test.rb +0 -12
- data/test/attachment_registry_test.rb +0 -88
- 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 -232
- data/test/io_adapters/abstract_adapter_test.rb +0 -58
- 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 -24
- data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -110
- data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -69
- data/test/matchers/validate_attachment_size_matcher_test.rb +0 -86
- data/test/meta_class_test.rb +0 -32
- data/test/paperclip_missing_attachment_styles_test.rb +0 -90
- data/test/plural_cache_test.rb +0 -36
- data/test/schema_test.rb +0 -200
- data/test/storage/fog_test.rb +0 -473
- data/test/storage/s3_live_test.rb +0 -179
- data/test/storage/s3_test.rb +0 -1356
- data/test/style_test.rb +0 -213
- data/test/support/mock_model.rb +0 -2
- data/test/tempfile_factory_test.rb +0 -17
- data/test/url_generator_test.rb +0 -187
- data/test/validators/attachment_content_type_validator_test.rb +0 -324
- data/test/validators_test.rb +0 -61
- /data/{test → spec}/database.yml +0 -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/fog.yml +0 -0
- /data/{test → spec/support}/fixtures/rotated.jpg +0 -0
- /data/{test → spec/support}/fixtures/s3.yml +0 -0
- /data/{test → 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/{test → spec}/support/mock_attachment.rb +0 -0
- /data/{test → spec}/support/mock_interpolator.rb +0 -0
- /data/{test → spec}/support/mock_url_generator_builder.rb +0 -0
@@ -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
|
data/test/validators_test.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
require './test/helper'
|
2
|
-
|
3
|
-
class ValidatorsTest < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
rebuild_model
|
6
|
-
end
|
7
|
-
|
8
|
-
context "using the helper" do
|
9
|
-
setup do
|
10
|
-
Dummy.validates_attachment :avatar, :presence => true, :content_type => { :content_type => "image/jpeg" }, :size => { :in => 0..10.kilobytes }
|
11
|
-
end
|
12
|
-
|
13
|
-
should "add the attachment_presence validator to the class" do
|
14
|
-
assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_presence }
|
15
|
-
end
|
16
|
-
|
17
|
-
should "add the attachment_content_type validator to the class" do
|
18
|
-
assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_content_type }
|
19
|
-
end
|
20
|
-
|
21
|
-
should "add the attachment_size validator to the class" do
|
22
|
-
assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_size }
|
23
|
-
end
|
24
|
-
|
25
|
-
should 'prevent you from attaching a file that violates that validation' do
|
26
|
-
Dummy.class_eval{ validate(:name) { raise "DO NOT RUN THIS" } }
|
27
|
-
dummy = Dummy.new(:avatar => File.new(fixture_file("12k.png")))
|
28
|
-
assert_equal [:avatar_content_type, :avatar, :avatar_file_size], dummy.errors.keys
|
29
|
-
assert_raise(RuntimeError){ dummy.valid? }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "using the helper with a conditional" do
|
34
|
-
setup do
|
35
|
-
Dummy.validates_attachment :avatar, :presence => true,
|
36
|
-
:content_type => { :content_type => "image/jpeg" },
|
37
|
-
:size => { :in => 0..10.kilobytes },
|
38
|
-
:if => :title_present?
|
39
|
-
end
|
40
|
-
|
41
|
-
should "validate the attachment if title is present" do
|
42
|
-
Dummy.class_eval do
|
43
|
-
def title_present?
|
44
|
-
true
|
45
|
-
end
|
46
|
-
end
|
47
|
-
dummy = Dummy.new(:avatar => File.new(fixture_file("12k.png")))
|
48
|
-
assert_equal [:avatar_content_type, :avatar, :avatar_file_size], dummy.errors.keys
|
49
|
-
end
|
50
|
-
|
51
|
-
should "not validate attachment if tile is not present" do
|
52
|
-
Dummy.class_eval do
|
53
|
-
def title_present?
|
54
|
-
false
|
55
|
-
end
|
56
|
-
end
|
57
|
-
dummy = Dummy.new(:avatar => File.new(fixture_file("12k.png")))
|
58
|
-
assert_equal [], dummy.errors.keys
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
/data/{test → spec}/database.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|