##// END OF EJS Templates
Rails4: replace deprecated Relation#first with finder options at AttachmentTest...
Toshi MARUYAMA -
r12225:8a6f4c3880a5
parent child
Show More
@@ -1,290 +1,289
1 1 # encoding: utf-8
2 2 #
3 3 # Redmine - project management software
4 4 # Copyright (C) 2006-2013 Jean-Philippe Lang
5 5 #
6 6 # This program is free software; you can redistribute it and/or
7 7 # modify it under the terms of the GNU General Public License
8 8 # as published by the Free Software Foundation; either version 2
9 9 # of the License, or (at your option) any later version.
10 10 #
11 11 # This program is distributed in the hope that it will be useful,
12 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 14 # GNU General Public License for more details.
15 15 #
16 16 # You should have received a copy of the GNU General Public License
17 17 # along with this program; if not, write to the Free Software
18 18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 19
20 20 require File.expand_path('../../test_helper', __FILE__)
21 21
22 22 class AttachmentTest < ActiveSupport::TestCase
23 23 fixtures :users, :projects, :roles, :members, :member_roles,
24 24 :enabled_modules, :issues, :trackers, :attachments
25 25
26 26 class MockFile
27 27 attr_reader :original_filename, :content_type, :content, :size
28 28
29 29 def initialize(attributes)
30 30 @original_filename = attributes[:original_filename]
31 31 @content_type = attributes[:content_type]
32 32 @content = attributes[:content] || "Content"
33 33 @size = content.size
34 34 end
35 35 end
36 36
37 37 def setup
38 38 set_tmp_attachments_directory
39 39 end
40 40
41 41 def test_container_for_new_attachment_should_be_nil
42 42 assert_nil Attachment.new.container
43 43 end
44 44
45 45 def test_filename_should_remove_eols
46 46 assert_equal "line_feed", Attachment.new(:filename => "line\nfeed").filename
47 47 assert_equal "line_feed", Attachment.new(:filename => "some\npath/line\nfeed").filename
48 48 assert_equal "carriage_return", Attachment.new(:filename => "carriage\rreturn").filename
49 49 assert_equal "carriage_return", Attachment.new(:filename => "some\rpath/carriage\rreturn").filename
50 50 end
51 51
52 52 def test_create
53 53 a = Attachment.new(:container => Issue.find(1),
54 54 :file => uploaded_test_file("testfile.txt", "text/plain"),
55 55 :author => User.find(1))
56 56 assert a.save
57 57 assert_equal 'testfile.txt', a.filename
58 58 assert_equal 59, a.filesize
59 59 assert_equal 'text/plain', a.content_type
60 60 assert_equal 0, a.downloads
61 61 assert_equal '1478adae0d4eb06d35897518540e25d6', a.digest
62 62
63 63 assert a.disk_directory
64 64 assert_match %r{\A\d{4}/\d{2}\z}, a.disk_directory
65 65
66 66 assert File.exist?(a.diskfile)
67 67 assert_equal 59, File.size(a.diskfile)
68 68 end
69 69
70 70 def test_copy_should_preserve_attributes
71 71 a = Attachment.find(1)
72 72 copy = a.copy
73 73
74 74 assert_save copy
75 75 copy = Attachment.order('id DESC').first
76 76 %w(filename filesize content_type author_id created_on description digest disk_filename disk_directory diskfile).each do |attribute|
77 77 assert_equal a.send(attribute), copy.send(attribute), "#{attribute} was different"
78 78 end
79 79 end
80 80
81 81 def test_size_should_be_validated_for_new_file
82 82 with_settings :attachment_max_size => 0 do
83 83 a = Attachment.new(:container => Issue.find(1),
84 84 :file => uploaded_test_file("testfile.txt", "text/plain"),
85 85 :author => User.find(1))
86 86 assert !a.save
87 87 end
88 88 end
89 89
90 90 def test_size_should_not_be_validated_when_copying
91 91 a = Attachment.create!(:container => Issue.find(1),
92 92 :file => uploaded_test_file("testfile.txt", "text/plain"),
93 93 :author => User.find(1))
94 94 with_settings :attachment_max_size => 0 do
95 95 copy = a.copy
96 96 assert copy.save
97 97 end
98 98 end
99 99
100 100 def test_description_length_should_be_validated
101 101 a = Attachment.new(:description => 'a' * 300)
102 102 assert !a.save
103 103 assert_not_equal [], a.errors[:description]
104 104 end
105 105
106 106 def test_destroy
107 107 a = Attachment.new(:container => Issue.find(1),
108 108 :file => uploaded_test_file("testfile.txt", "text/plain"),
109 109 :author => User.find(1))
110 110 assert a.save
111 111 assert_equal 'testfile.txt', a.filename
112 112 assert_equal 59, a.filesize
113 113 assert_equal 'text/plain', a.content_type
114 114 assert_equal 0, a.downloads
115 115 assert_equal '1478adae0d4eb06d35897518540e25d6', a.digest
116 116 diskfile = a.diskfile
117 117 assert File.exist?(diskfile)
118 118 assert_equal 59, File.size(a.diskfile)
119 119 assert a.destroy
120 120 assert !File.exist?(diskfile)
121 121 end
122 122
123 123 def test_destroy_should_not_delete_file_referenced_by_other_attachment
124 124 a = Attachment.create!(:container => Issue.find(1),
125 125 :file => uploaded_test_file("testfile.txt", "text/plain"),
126 126 :author => User.find(1))
127 127 diskfile = a.diskfile
128 128
129 129 copy = a.copy
130 130 copy.save!
131 131
132 132 assert File.exists?(diskfile)
133 133 a.destroy
134 134 assert File.exists?(diskfile)
135 135 copy.destroy
136 136 assert !File.exists?(diskfile)
137 137 end
138 138
139 139 def test_create_should_auto_assign_content_type
140 140 a = Attachment.new(:container => Issue.find(1),
141 141 :file => uploaded_test_file("testfile.txt", ""),
142 142 :author => User.find(1))
143 143 assert a.save
144 144 assert_equal 'text/plain', a.content_type
145 145 end
146 146
147 147 def test_identical_attachments_at_the_same_time_should_not_overwrite
148 148 a1 = Attachment.create!(:container => Issue.find(1),
149 149 :file => uploaded_test_file("testfile.txt", ""),
150 150 :author => User.find(1))
151 151 a2 = Attachment.create!(:container => Issue.find(1),
152 152 :file => uploaded_test_file("testfile.txt", ""),
153 153 :author => User.find(1))
154 154 assert a1.disk_filename != a2.disk_filename
155 155 end
156 156
157 157 def test_filename_should_be_basenamed
158 158 a = Attachment.new(:file => MockFile.new(:original_filename => "path/to/the/file"))
159 159 assert_equal 'file', a.filename
160 160 end
161 161
162 162 def test_filename_should_be_sanitized
163 163 a = Attachment.new(:file => MockFile.new(:original_filename => "valid:[] invalid:?%*|\"'<>chars"))
164 164 assert_equal 'valid_[] invalid_chars', a.filename
165 165 end
166 166
167 167 def test_diskfilename
168 168 assert Attachment.disk_filename("test_file.txt") =~ /^\d{12}_test_file.txt$/
169 169 assert_equal 'test_file.txt', Attachment.disk_filename("test_file.txt")[13..-1]
170 170 assert_equal '770c509475505f37c2b8fb6030434d6b.txt', Attachment.disk_filename("test_accentuΓ©.txt")[13..-1]
171 171 assert_equal 'f8139524ebb8f32e51976982cd20a85d', Attachment.disk_filename("test_accentuΓ©")[13..-1]
172 172 assert_equal 'cbb5b0f30978ba03731d61f9f6d10011', Attachment.disk_filename("test_accentuΓ©.Γ§a")[13..-1]
173 173 end
174 174
175 175 def test_title
176 176 a = Attachment.new(:filename => "test.png")
177 177 assert_equal "test.png", a.title
178 178
179 179 a = Attachment.new(:filename => "test.png", :description => "Cool image")
180 180 assert_equal "test.png (Cool image)", a.title
181 181 end
182 182
183 183 def test_prune_should_destroy_old_unattached_attachments
184 184 Attachment.create!(:file => uploaded_test_file("testfile.txt", ""), :author_id => 1, :created_on => 2.days.ago)
185 185 Attachment.create!(:file => uploaded_test_file("testfile.txt", ""), :author_id => 1, :created_on => 2.days.ago)
186 186 Attachment.create!(:file => uploaded_test_file("testfile.txt", ""), :author_id => 1)
187 187
188 188 assert_difference 'Attachment.count', -2 do
189 189 Attachment.prune
190 190 end
191 191 end
192 192
193 193 def test_move_from_root_to_target_directory_should_move_root_files
194 194 a = Attachment.find(20)
195 195 assert a.disk_directory.blank?
196 196 # Create a real file for this fixture
197 197 File.open(a.diskfile, "w") do |f|
198 198 f.write "test file at the root of files directory"
199 199 end
200 200 assert a.readable?
201 201 Attachment.move_from_root_to_target_directory
202 202
203 203 a.reload
204 204 assert_equal '2012/05', a.disk_directory
205 205 assert a.readable?
206 206 end
207 207
208 208 test "Attachmnet.attach_files should attach the file" do
209 209 issue = Issue.first
210 210 assert_difference 'Attachment.count' do
211 211 Attachment.attach_files(issue,
212 212 '1' => {
213 213 'file' => uploaded_test_file('testfile.txt', 'text/plain'),
214 214 'description' => 'test'
215 215 })
216 216 end
217
218 attachment = Attachment.first(:order => 'id DESC')
217 attachment = Attachment.order('id DESC').first
219 218 assert_equal issue, attachment.container
220 219 assert_equal 'testfile.txt', attachment.filename
221 220 assert_equal 59, attachment.filesize
222 221 assert_equal 'test', attachment.description
223 222 assert_equal 'text/plain', attachment.content_type
224 223 assert File.exists?(attachment.diskfile)
225 224 assert_equal 59, File.size(attachment.diskfile)
226 225 end
227 226
228 227 test "Attachmnet.attach_files should add unsaved files to the object as unsaved attachments" do
229 228 # Max size of 0 to force Attachment creation failures
230 229 with_settings(:attachment_max_size => 0) do
231 230 @project = Project.find(1)
232 231 response = Attachment.attach_files(@project, {
233 232 '1' => {'file' => mock_file, 'description' => 'test'},
234 233 '2' => {'file' => mock_file, 'description' => 'test'}
235 234 })
236 235
237 236 assert response[:unsaved].present?
238 237 assert_equal 2, response[:unsaved].length
239 238 assert response[:unsaved].first.new_record?
240 239 assert response[:unsaved].second.new_record?
241 240 assert_equal response[:unsaved], @project.unsaved_attachments
242 241 end
243 242 end
244 243
245 244 def test_latest_attach
246 245 set_fixtures_attachments_directory
247 246 a1 = Attachment.find(16)
248 247 assert_equal "testfile.png", a1.filename
249 248 assert a1.readable?
250 249 assert (! a1.visible?(User.anonymous))
251 250 assert a1.visible?(User.find(2))
252 251 a2 = Attachment.find(17)
253 252 assert_equal "testfile.PNG", a2.filename
254 253 assert a2.readable?
255 254 assert (! a2.visible?(User.anonymous))
256 255 assert a2.visible?(User.find(2))
257 256 assert a1.created_on < a2.created_on
258 257
259 258 la1 = Attachment.latest_attach([a1, a2], "testfile.png")
260 259 assert_equal 17, la1.id
261 260 la2 = Attachment.latest_attach([a1, a2], "Testfile.PNG")
262 261 assert_equal 17, la2.id
263 262
264 263 set_tmp_attachments_directory
265 264 end
266 265
267 266 def test_thumbnailable_should_be_true_for_images
268 267 assert_equal true, Attachment.new(:filename => 'test.jpg').thumbnailable?
269 268 end
270 269
271 270 def test_thumbnailable_should_be_true_for_non_images
272 271 assert_equal false, Attachment.new(:filename => 'test.txt').thumbnailable?
273 272 end
274 273
275 274 if convert_installed?
276 275 def test_thumbnail_should_generate_the_thumbnail
277 276 set_fixtures_attachments_directory
278 277 attachment = Attachment.find(16)
279 278 Attachment.clear_thumbnails
280 279
281 280 assert_difference "Dir.glob(File.join(Attachment.thumbnails_storage_path, '*.thumb')).size" do
282 281 thumbnail = attachment.thumbnail
283 282 assert_equal "16_8e0294de2441577c529f170b6fb8f638_100.thumb", File.basename(thumbnail)
284 283 assert File.exists?(thumbnail)
285 284 end
286 285 end
287 286 else
288 287 puts '(ImageMagick convert not available)'
289 288 end
290 289 end
General Comments 0
You need to be logged in to leave comments. Login now