Mercurial > hg > soundsoftware-site
comparison .svn/pristine/94/94850f049cba8fd1d7b631af60e061c441dc4401.svn-base @ 1298:4f746d8966dd redmine_2.3_integration
Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:28:30 +0100 |
parents | 622f24f53b42 |
children |
comparison
equal
deleted
inserted
replaced
1297:0a574315af3e | 1298:4f746d8966dd |
---|---|
1 # encoding: utf-8 | |
2 # | |
3 # Redmine - project management software | |
4 # Copyright (C) 2006-2013 Jean-Philippe Lang | |
5 # | |
6 # This program is free software; you can redistribute it and/or | |
7 # modify it under the terms of the GNU General Public License | |
8 # as published by the Free Software Foundation; either version 2 | |
9 # of the License, or (at your option) any later version. | |
10 # | |
11 # This program is distributed in the hope that it will be useful, | |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # GNU General Public License for more details. | |
15 # | |
16 # You should have received a copy of the GNU General Public License | |
17 # along with this program; if not, write to the Free Software | |
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
19 | |
20 require File.expand_path('../../test_helper', __FILE__) | |
21 | |
22 class AttachmentsControllerTest < ActionController::TestCase | |
23 fixtures :users, :projects, :roles, :members, :member_roles, | |
24 :enabled_modules, :issues, :trackers, :attachments, | |
25 :versions, :wiki_pages, :wikis, :documents | |
26 | |
27 def setup | |
28 User.current = nil | |
29 set_fixtures_attachments_directory | |
30 end | |
31 | |
32 def teardown | |
33 set_tmp_attachments_directory | |
34 end | |
35 | |
36 def test_show_diff | |
37 ['inline', 'sbs'].each do |dt| | |
38 # 060719210727_changeset_utf8.diff | |
39 get :show, :id => 14, :type => dt | |
40 assert_response :success | |
41 assert_template 'diff' | |
42 assert_equal 'text/html', @response.content_type | |
43 assert_tag 'th', | |
44 :attributes => {:class => /filename/}, | |
45 :content => /issues_controller.rb\t\(révision 1484\)/ | |
46 assert_tag 'td', | |
47 :attributes => {:class => /line-code/}, | |
48 :content => /Demande créée avec succès/ | |
49 end | |
50 set_tmp_attachments_directory | |
51 end | |
52 | |
53 def test_show_diff_replace_cannot_convert_content | |
54 with_settings :repositories_encodings => 'UTF-8' do | |
55 ['inline', 'sbs'].each do |dt| | |
56 # 060719210727_changeset_iso8859-1.diff | |
57 get :show, :id => 5, :type => dt | |
58 assert_response :success | |
59 assert_template 'diff' | |
60 assert_equal 'text/html', @response.content_type | |
61 assert_tag 'th', | |
62 :attributes => {:class => "filename"}, | |
63 :content => /issues_controller.rb\t\(r\?vision 1484\)/ | |
64 assert_tag 'td', | |
65 :attributes => {:class => /line-code/}, | |
66 :content => /Demande cr\?\?e avec succ\?s/ | |
67 end | |
68 end | |
69 set_tmp_attachments_directory | |
70 end | |
71 | |
72 def test_show_diff_latin_1 | |
73 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do | |
74 ['inline', 'sbs'].each do |dt| | |
75 # 060719210727_changeset_iso8859-1.diff | |
76 get :show, :id => 5, :type => dt | |
77 assert_response :success | |
78 assert_template 'diff' | |
79 assert_equal 'text/html', @response.content_type | |
80 assert_tag 'th', | |
81 :attributes => {:class => "filename"}, | |
82 :content => /issues_controller.rb\t\(révision 1484\)/ | |
83 assert_tag 'td', | |
84 :attributes => {:class => /line-code/}, | |
85 :content => /Demande créée avec succès/ | |
86 end | |
87 end | |
88 set_tmp_attachments_directory | |
89 end | |
90 | |
91 def test_save_diff_type | |
92 user1 = User.find(1) | |
93 user1.pref[:diff_type] = nil | |
94 user1.preference.save | |
95 user = User.find(1) | |
96 assert_nil user.pref[:diff_type] | |
97 | |
98 @request.session[:user_id] = 1 # admin | |
99 get :show, :id => 5 | |
100 assert_response :success | |
101 assert_template 'diff' | |
102 user.reload | |
103 assert_equal "inline", user.pref[:diff_type] | |
104 get :show, :id => 5, :type => 'sbs' | |
105 assert_response :success | |
106 assert_template 'diff' | |
107 user.reload | |
108 assert_equal "sbs", user.pref[:diff_type] | |
109 end | |
110 | |
111 def test_diff_show_filename_in_mercurial_export | |
112 set_tmp_attachments_directory | |
113 a = Attachment.new(:container => Issue.find(1), | |
114 :file => uploaded_test_file("hg-export.diff", "text/plain"), | |
115 :author => User.find(1)) | |
116 assert a.save | |
117 assert_equal 'hg-export.diff', a.filename | |
118 | |
119 get :show, :id => a.id, :type => 'inline' | |
120 assert_response :success | |
121 assert_template 'diff' | |
122 assert_equal 'text/html', @response.content_type | |
123 assert_select 'th.filename', :text => 'test1.txt' | |
124 end | |
125 | |
126 def test_show_text_file | |
127 get :show, :id => 4 | |
128 assert_response :success | |
129 assert_template 'file' | |
130 assert_equal 'text/html', @response.content_type | |
131 set_tmp_attachments_directory | |
132 end | |
133 | |
134 def test_show_text_file_utf_8 | |
135 set_tmp_attachments_directory | |
136 a = Attachment.new(:container => Issue.find(1), | |
137 :file => uploaded_test_file("japanese-utf-8.txt", "text/plain"), | |
138 :author => User.find(1)) | |
139 assert a.save | |
140 assert_equal 'japanese-utf-8.txt', a.filename | |
141 | |
142 str_japanese = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e" | |
143 str_japanese.force_encoding('UTF-8') if str_japanese.respond_to?(:force_encoding) | |
144 | |
145 get :show, :id => a.id | |
146 assert_response :success | |
147 assert_template 'file' | |
148 assert_equal 'text/html', @response.content_type | |
149 assert_tag :tag => 'th', | |
150 :content => '1', | |
151 :attributes => { :class => 'line-num' }, | |
152 :sibling => { :tag => 'td', :content => /#{str_japanese}/ } | |
153 end | |
154 | |
155 def test_show_text_file_replace_cannot_convert_content | |
156 set_tmp_attachments_directory | |
157 with_settings :repositories_encodings => 'UTF-8' do | |
158 a = Attachment.new(:container => Issue.find(1), | |
159 :file => uploaded_test_file("iso8859-1.txt", "text/plain"), | |
160 :author => User.find(1)) | |
161 assert a.save | |
162 assert_equal 'iso8859-1.txt', a.filename | |
163 | |
164 get :show, :id => a.id | |
165 assert_response :success | |
166 assert_template 'file' | |
167 assert_equal 'text/html', @response.content_type | |
168 assert_tag :tag => 'th', | |
169 :content => '7', | |
170 :attributes => { :class => 'line-num' }, | |
171 :sibling => { :tag => 'td', :content => /Demande cr\?\?e avec succ\?s/ } | |
172 end | |
173 end | |
174 | |
175 def test_show_text_file_latin_1 | |
176 set_tmp_attachments_directory | |
177 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do | |
178 a = Attachment.new(:container => Issue.find(1), | |
179 :file => uploaded_test_file("iso8859-1.txt", "text/plain"), | |
180 :author => User.find(1)) | |
181 assert a.save | |
182 assert_equal 'iso8859-1.txt', a.filename | |
183 | |
184 get :show, :id => a.id | |
185 assert_response :success | |
186 assert_template 'file' | |
187 assert_equal 'text/html', @response.content_type | |
188 assert_tag :tag => 'th', | |
189 :content => '7', | |
190 :attributes => { :class => 'line-num' }, | |
191 :sibling => { :tag => 'td', :content => /Demande créée avec succès/ } | |
192 end | |
193 end | |
194 | |
195 def test_show_text_file_should_send_if_too_big | |
196 Setting.file_max_size_displayed = 512 | |
197 Attachment.find(4).update_attribute :filesize, 754.kilobyte | |
198 | |
199 get :show, :id => 4 | |
200 assert_response :success | |
201 assert_equal 'application/x-ruby', @response.content_type | |
202 set_tmp_attachments_directory | |
203 end | |
204 | |
205 def test_show_other | |
206 get :show, :id => 6 | |
207 assert_response :success | |
208 assert_equal 'application/octet-stream', @response.content_type | |
209 set_tmp_attachments_directory | |
210 end | |
211 | |
212 def test_show_file_from_private_issue_without_permission | |
213 get :show, :id => 15 | |
214 assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2F15' | |
215 set_tmp_attachments_directory | |
216 end | |
217 | |
218 def test_show_file_from_private_issue_with_permission | |
219 @request.session[:user_id] = 2 | |
220 get :show, :id => 15 | |
221 assert_response :success | |
222 assert_tag 'h2', :content => /private.diff/ | |
223 set_tmp_attachments_directory | |
224 end | |
225 | |
226 def test_show_file_without_container_should_be_allowed_to_author | |
227 set_tmp_attachments_directory | |
228 attachment = Attachment.create!(:file => uploaded_test_file("testfile.txt", "text/plain"), :author_id => 2) | |
229 | |
230 @request.session[:user_id] = 2 | |
231 get :show, :id => attachment.id | |
232 assert_response 200 | |
233 end | |
234 | |
235 def test_show_file_without_container_should_be_denied_to_other_users | |
236 set_tmp_attachments_directory | |
237 attachment = Attachment.create!(:file => uploaded_test_file("testfile.txt", "text/plain"), :author_id => 2) | |
238 | |
239 @request.session[:user_id] = 3 | |
240 get :show, :id => attachment.id | |
241 assert_response 403 | |
242 end | |
243 | |
244 def test_show_invalid_should_respond_with_404 | |
245 get :show, :id => 999 | |
246 assert_response 404 | |
247 end | |
248 | |
249 def test_download_text_file | |
250 get :download, :id => 4 | |
251 assert_response :success | |
252 assert_equal 'application/x-ruby', @response.content_type | |
253 set_tmp_attachments_directory | |
254 end | |
255 | |
256 def test_download_version_file_with_issue_tracking_disabled | |
257 Project.find(1).disable_module! :issue_tracking | |
258 get :download, :id => 9 | |
259 assert_response :success | |
260 end | |
261 | |
262 def test_download_should_assign_content_type_if_blank | |
263 Attachment.find(4).update_attribute(:content_type, '') | |
264 | |
265 get :download, :id => 4 | |
266 assert_response :success | |
267 assert_equal 'text/x-ruby', @response.content_type | |
268 set_tmp_attachments_directory | |
269 end | |
270 | |
271 def test_download_missing_file | |
272 get :download, :id => 2 | |
273 assert_response 404 | |
274 set_tmp_attachments_directory | |
275 end | |
276 | |
277 def test_download_should_be_denied_without_permission | |
278 get :download, :id => 7 | |
279 assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fdownload%2F7' | |
280 set_tmp_attachments_directory | |
281 end | |
282 | |
283 if convert_installed? | |
284 def test_thumbnail | |
285 Attachment.clear_thumbnails | |
286 @request.session[:user_id] = 2 | |
287 | |
288 get :thumbnail, :id => 16 | |
289 assert_response :success | |
290 assert_equal 'image/png', response.content_type | |
291 end | |
292 | |
293 def test_thumbnail_should_not_exceed_maximum_size | |
294 Redmine::Thumbnail.expects(:generate).with {|source, target, size| size == 800} | |
295 | |
296 @request.session[:user_id] = 2 | |
297 get :thumbnail, :id => 16, :size => 2000 | |
298 end | |
299 | |
300 def test_thumbnail_should_round_size | |
301 Redmine::Thumbnail.expects(:generate).with {|source, target, size| size == 250} | |
302 | |
303 @request.session[:user_id] = 2 | |
304 get :thumbnail, :id => 16, :size => 260 | |
305 end | |
306 | |
307 def test_thumbnail_should_return_404_for_non_image_attachment | |
308 @request.session[:user_id] = 2 | |
309 | |
310 get :thumbnail, :id => 15 | |
311 assert_response 404 | |
312 end | |
313 | |
314 def test_thumbnail_should_return_404_if_thumbnail_generation_failed | |
315 Attachment.any_instance.stubs(:thumbnail).returns(nil) | |
316 @request.session[:user_id] = 2 | |
317 | |
318 get :thumbnail, :id => 16 | |
319 assert_response 404 | |
320 end | |
321 | |
322 def test_thumbnail_should_be_denied_without_permission | |
323 get :thumbnail, :id => 16 | |
324 assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fthumbnail%2F16' | |
325 end | |
326 else | |
327 puts '(ImageMagick convert not available)' | |
328 end | |
329 | |
330 def test_destroy_issue_attachment | |
331 set_tmp_attachments_directory | |
332 issue = Issue.find(3) | |
333 @request.session[:user_id] = 2 | |
334 | |
335 assert_difference 'issue.attachments.count', -1 do | |
336 assert_difference 'Journal.count' do | |
337 delete :destroy, :id => 1 | |
338 assert_redirected_to '/projects/ecookbook' | |
339 end | |
340 end | |
341 assert_nil Attachment.find_by_id(1) | |
342 j = Journal.first(:order => 'id DESC') | |
343 assert_equal issue, j.journalized | |
344 assert_equal 'attachment', j.details.first.property | |
345 assert_equal '1', j.details.first.prop_key | |
346 assert_equal 'error281.txt', j.details.first.old_value | |
347 assert_equal User.find(2), j.user | |
348 end | |
349 | |
350 def test_destroy_wiki_page_attachment | |
351 set_tmp_attachments_directory | |
352 @request.session[:user_id] = 2 | |
353 assert_difference 'Attachment.count', -1 do | |
354 delete :destroy, :id => 3 | |
355 assert_response 302 | |
356 end | |
357 end | |
358 | |
359 def test_destroy_project_attachment | |
360 set_tmp_attachments_directory | |
361 @request.session[:user_id] = 2 | |
362 assert_difference 'Attachment.count', -1 do | |
363 delete :destroy, :id => 8 | |
364 assert_response 302 | |
365 end | |
366 end | |
367 | |
368 def test_destroy_version_attachment | |
369 set_tmp_attachments_directory | |
370 @request.session[:user_id] = 2 | |
371 assert_difference 'Attachment.count', -1 do | |
372 delete :destroy, :id => 9 | |
373 assert_response 302 | |
374 end | |
375 end | |
376 | |
377 def test_destroy_without_permission | |
378 set_tmp_attachments_directory | |
379 assert_no_difference 'Attachment.count' do | |
380 delete :destroy, :id => 3 | |
381 end | |
382 assert_response 302 | |
383 assert Attachment.find_by_id(3) | |
384 end | |
385 end |