Mercurial > hg > soundsoftware-site
comparison .svn/pristine/42/42cbd8a4f24d085f0d8c0a431c99b911f57d4034.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 # Redmine - project management software | |
2 # Copyright (C) 2006-2013 Jean-Philippe Lang | |
3 # | |
4 # This program is free software; you can redistribute it and/or | |
5 # modify it under the terms of the GNU General Public License | |
6 # as published by the Free Software Foundation; either version 2 | |
7 # of the License, or (at your option) any later version. | |
8 # | |
9 # This program is distributed in the hope that it will be useful, | |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 # GNU General Public License for more details. | |
13 # | |
14 # You should have received a copy of the GNU General Public License | |
15 # along with this program; if not, write to the Free Software | |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 | |
18 require File.expand_path('../../test_helper', __FILE__) | |
19 | |
20 class RepositoriesGitControllerTest < ActionController::TestCase | |
21 tests RepositoriesController | |
22 | |
23 fixtures :projects, :users, :roles, :members, :member_roles, | |
24 :repositories, :enabled_modules | |
25 | |
26 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s | |
27 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin? | |
28 PRJ_ID = 3 | |
29 CHAR_1_HEX = "\xc3\x9c" | |
30 NUM_REV = 28 | |
31 | |
32 ## Git, Mercurial and CVS path encodings are binary. | |
33 ## Subversion supports URL encoding for path. | |
34 ## Redmine Mercurial adapter and extension use URL encoding. | |
35 ## Git accepts only binary path in command line parameter. | |
36 ## So, there is no way to use binary command line parameter in JRuby. | |
37 JRUBY_SKIP = (RUBY_PLATFORM == 'java') | |
38 JRUBY_SKIP_STR = "TODO: This test fails in JRuby" | |
39 | |
40 def setup | |
41 @ruby19_non_utf8_pass = | |
42 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8') | |
43 | |
44 User.current = nil | |
45 @project = Project.find(PRJ_ID) | |
46 @repository = Repository::Git.create( | |
47 :project => @project, | |
48 :url => REPOSITORY_PATH, | |
49 :path_encoding => 'ISO-8859-1' | |
50 ) | |
51 assert @repository | |
52 @char_1 = CHAR_1_HEX.dup | |
53 if @char_1.respond_to?(:force_encoding) | |
54 @char_1.force_encoding('UTF-8') | |
55 end | |
56 end | |
57 | |
58 def test_create_and_update | |
59 @request.session[:user_id] = 1 | |
60 assert_difference 'Repository.count' do | |
61 post :create, :project_id => 'subproject1', | |
62 :repository_scm => 'Git', | |
63 :repository => { | |
64 :url => '/test', | |
65 :is_default => '0', | |
66 :identifier => 'test-create', | |
67 :extra_report_last_commit => '1', | |
68 } | |
69 end | |
70 assert_response 302 | |
71 repository = Repository.first(:order => 'id DESC') | |
72 assert_kind_of Repository::Git, repository | |
73 assert_equal '/test', repository.url | |
74 assert_equal true, repository.extra_report_last_commit | |
75 | |
76 put :update, :id => repository.id, | |
77 :repository => { | |
78 :extra_report_last_commit => '0' | |
79 } | |
80 assert_response 302 | |
81 repo2 = Repository.find(repository.id) | |
82 assert_equal false, repo2.extra_report_last_commit | |
83 end | |
84 | |
85 if File.directory?(REPOSITORY_PATH) | |
86 ## Ruby uses ANSI api to fork a process on Windows. | |
87 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem | |
88 ## and these are incompatible with ASCII. | |
89 ## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10 | |
90 ## http://code.google.com/p/msysgit/issues/detail?id=80 | |
91 ## So, Latin-1 path tests fail on Japanese Windows | |
92 WINDOWS_PASS = (Redmine::Platform.mswin? && | |
93 Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10])) | |
94 WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10" | |
95 | |
96 def test_get_new | |
97 @request.session[:user_id] = 1 | |
98 @project.repository.destroy | |
99 get :new, :project_id => 'subproject1', :repository_scm => 'Git' | |
100 assert_response :success | |
101 assert_template 'new' | |
102 assert_kind_of Repository::Git, assigns(:repository) | |
103 assert assigns(:repository).new_record? | |
104 end | |
105 | |
106 def test_browse_root | |
107 assert_equal 0, @repository.changesets.count | |
108 @repository.fetch_changesets | |
109 @project.reload | |
110 assert_equal NUM_REV, @repository.changesets.count | |
111 | |
112 get :show, :id => PRJ_ID | |
113 assert_response :success | |
114 assert_template 'show' | |
115 assert_not_nil assigns(:entries) | |
116 assert_equal 9, assigns(:entries).size | |
117 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'} | |
118 assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'} | |
119 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'} | |
120 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'} | |
121 assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'} | |
122 assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'} | |
123 assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'} | |
124 assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'} | |
125 assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'} | |
126 assert_not_nil assigns(:changesets) | |
127 assert assigns(:changesets).size > 0 | |
128 end | |
129 | |
130 def test_browse_branch | |
131 assert_equal 0, @repository.changesets.count | |
132 @repository.fetch_changesets | |
133 @project.reload | |
134 assert_equal NUM_REV, @repository.changesets.count | |
135 get :show, :id => PRJ_ID, :rev => 'test_branch' | |
136 assert_response :success | |
137 assert_template 'show' | |
138 assert_not_nil assigns(:entries) | |
139 assert_equal 4, assigns(:entries).size | |
140 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'} | |
141 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'} | |
142 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'} | |
143 assert assigns(:entries).detect {|e| e.name == 'test.txt' && e.kind == 'file'} | |
144 assert_not_nil assigns(:changesets) | |
145 assert assigns(:changesets).size > 0 | |
146 end | |
147 | |
148 def test_browse_tag | |
149 assert_equal 0, @repository.changesets.count | |
150 @repository.fetch_changesets | |
151 @project.reload | |
152 assert_equal NUM_REV, @repository.changesets.count | |
153 [ | |
154 "tag00.lightweight", | |
155 "tag01.annotated", | |
156 ].each do |t1| | |
157 get :show, :id => PRJ_ID, :rev => t1 | |
158 assert_response :success | |
159 assert_template 'show' | |
160 assert_not_nil assigns(:entries) | |
161 assert assigns(:entries).size > 0 | |
162 assert_not_nil assigns(:changesets) | |
163 assert assigns(:changesets).size > 0 | |
164 end | |
165 end | |
166 | |
167 def test_browse_directory | |
168 assert_equal 0, @repository.changesets.count | |
169 @repository.fetch_changesets | |
170 @project.reload | |
171 assert_equal NUM_REV, @repository.changesets.count | |
172 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param] | |
173 assert_response :success | |
174 assert_template 'show' | |
175 assert_not_nil assigns(:entries) | |
176 assert_equal ['edit.png'], assigns(:entries).collect(&:name) | |
177 entry = assigns(:entries).detect {|e| e.name == 'edit.png'} | |
178 assert_not_nil entry | |
179 assert_equal 'file', entry.kind | |
180 assert_equal 'images/edit.png', entry.path | |
181 assert_not_nil assigns(:changesets) | |
182 assert assigns(:changesets).size > 0 | |
183 end | |
184 | |
185 def test_browse_at_given_revision | |
186 assert_equal 0, @repository.changesets.count | |
187 @repository.fetch_changesets | |
188 @project.reload | |
189 assert_equal NUM_REV, @repository.changesets.count | |
190 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param], | |
191 :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518' | |
192 assert_response :success | |
193 assert_template 'show' | |
194 assert_not_nil assigns(:entries) | |
195 assert_equal ['delete.png'], assigns(:entries).collect(&:name) | |
196 assert_not_nil assigns(:changesets) | |
197 assert assigns(:changesets).size > 0 | |
198 end | |
199 | |
200 def test_changes | |
201 get :changes, :id => PRJ_ID, | |
202 :path => repository_path_hash(['images', 'edit.png'])[:param] | |
203 assert_response :success | |
204 assert_template 'changes' | |
205 assert_tag :tag => 'h2', :content => 'edit.png' | |
206 end | |
207 | |
208 def test_entry_show | |
209 get :entry, :id => PRJ_ID, | |
210 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param] | |
211 assert_response :success | |
212 assert_template 'entry' | |
213 # Line 19 | |
214 assert_tag :tag => 'th', | |
215 :content => '11', | |
216 :attributes => { :class => 'line-num' }, | |
217 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ } | |
218 end | |
219 | |
220 def test_entry_show_latin_1 | |
221 if @ruby19_non_utf8_pass | |
222 puts_ruby19_non_utf8_pass() | |
223 elsif WINDOWS_PASS | |
224 puts WINDOWS_SKIP_STR | |
225 elsif JRUBY_SKIP | |
226 puts JRUBY_SKIP_STR | |
227 else | |
228 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do | |
229 ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| | |
230 get :entry, :id => PRJ_ID, | |
231 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param], | |
232 :rev => r1 | |
233 assert_response :success | |
234 assert_template 'entry' | |
235 assert_tag :tag => 'th', | |
236 :content => '1', | |
237 :attributes => { :class => 'line-num' }, | |
238 :sibling => { :tag => 'td', | |
239 :content => /test-#{@char_1}.txt/ } | |
240 end | |
241 end | |
242 end | |
243 end | |
244 | |
245 def test_entry_download | |
246 get :entry, :id => PRJ_ID, | |
247 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param], | |
248 :format => 'raw' | |
249 assert_response :success | |
250 # File content | |
251 assert @response.body.include?('WITHOUT ANY WARRANTY') | |
252 end | |
253 | |
254 def test_directory_entry | |
255 get :entry, :id => PRJ_ID, | |
256 :path => repository_path_hash(['sources'])[:param] | |
257 assert_response :success | |
258 assert_template 'show' | |
259 assert_not_nil assigns(:entry) | |
260 assert_equal 'sources', assigns(:entry).name | |
261 end | |
262 | |
263 def test_diff | |
264 assert_equal true, @repository.is_default | |
265 assert_nil @repository.identifier | |
266 assert_equal 0, @repository.changesets.count | |
267 @repository.fetch_changesets | |
268 @project.reload | |
269 assert_equal NUM_REV, @repository.changesets.count | |
270 # Full diff of changeset 2f9c0091 | |
271 ['inline', 'sbs'].each do |dt| | |
272 get :diff, | |
273 :id => PRJ_ID, | |
274 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', | |
275 :type => dt | |
276 assert_response :success | |
277 assert_template 'diff' | |
278 # Line 22 removed | |
279 assert_tag :tag => 'th', | |
280 :content => /22/, | |
281 :sibling => { :tag => 'td', | |
282 :attributes => { :class => /diff_out/ }, | |
283 :content => /def remove/ } | |
284 assert_tag :tag => 'h2', :content => /2f9c0091/ | |
285 end | |
286 end | |
287 | |
288 def test_diff_with_rev_and_path | |
289 assert_equal 0, @repository.changesets.count | |
290 @repository.fetch_changesets | |
291 @project.reload | |
292 assert_equal NUM_REV, @repository.changesets.count | |
293 with_settings :diff_max_lines_displayed => 1000 do | |
294 # Full diff of changeset 2f9c0091 | |
295 ['inline', 'sbs'].each do |dt| | |
296 get :diff, | |
297 :id => PRJ_ID, | |
298 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', | |
299 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param], | |
300 :type => dt | |
301 assert_response :success | |
302 assert_template 'diff' | |
303 # Line 22 removed | |
304 assert_tag :tag => 'th', | |
305 :content => '22', | |
306 :sibling => { :tag => 'td', | |
307 :attributes => { :class => /diff_out/ }, | |
308 :content => /def remove/ } | |
309 assert_tag :tag => 'h2', :content => /2f9c0091/ | |
310 end | |
311 end | |
312 end | |
313 | |
314 def test_diff_truncated | |
315 assert_equal 0, @repository.changesets.count | |
316 @repository.fetch_changesets | |
317 @project.reload | |
318 assert_equal NUM_REV, @repository.changesets.count | |
319 | |
320 with_settings :diff_max_lines_displayed => 5 do | |
321 # Truncated diff of changeset 2f9c0091 | |
322 with_cache do | |
323 with_settings :default_language => 'en' do | |
324 get :diff, :id => PRJ_ID, :type => 'inline', | |
325 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' | |
326 assert_response :success | |
327 assert @response.body.include?("... This diff was truncated") | |
328 end | |
329 with_settings :default_language => 'fr' do | |
330 get :diff, :id => PRJ_ID, :type => 'inline', | |
331 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' | |
332 assert_response :success | |
333 assert ! @response.body.include?("... This diff was truncated") | |
334 assert @response.body.include?("... Ce diff") | |
335 end | |
336 end | |
337 end | |
338 end | |
339 | |
340 def test_diff_two_revs | |
341 assert_equal 0, @repository.changesets.count | |
342 @repository.fetch_changesets | |
343 @project.reload | |
344 assert_equal NUM_REV, @repository.changesets.count | |
345 ['inline', 'sbs'].each do |dt| | |
346 get :diff, | |
347 :id => PRJ_ID, | |
348 :rev => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1', | |
349 :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', | |
350 :type => dt | |
351 assert_response :success | |
352 assert_template 'diff' | |
353 diff = assigns(:diff) | |
354 assert_not_nil diff | |
355 assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/ | |
356 assert_tag :tag => "form", | |
357 :attributes => { | |
358 :action => "/projects/subproject1/repository/revisions/" + | |
359 "61b685fbe55ab05b5ac68402d5720c1a6ac973d1/diff" | |
360 } | |
361 assert_tag :tag => 'input', | |
362 :attributes => { | |
363 :id => "rev_to", | |
364 :name => "rev_to", | |
365 :type => "hidden", | |
366 :value => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' | |
367 } | |
368 end | |
369 end | |
370 | |
371 def test_diff_path_in_subrepo | |
372 repo = Repository::Git.create( | |
373 :project => @project, | |
374 :url => REPOSITORY_PATH, | |
375 :identifier => 'test-diff-path', | |
376 :path_encoding => 'ISO-8859-1' | |
377 ); | |
378 assert repo | |
379 assert_equal false, repo.is_default | |
380 assert_equal 'test-diff-path', repo.identifier | |
381 get :diff, | |
382 :id => PRJ_ID, | |
383 :repository_id => 'test-diff-path', | |
384 :rev => '61b685fbe55ab05b', | |
385 :rev_to => '2f9c0091c754a91a', | |
386 :type => 'inline' | |
387 assert_response :success | |
388 assert_template 'diff' | |
389 diff = assigns(:diff) | |
390 assert_not_nil diff | |
391 assert_tag :tag => "form", | |
392 :attributes => { | |
393 :action => "/projects/subproject1/repository/test-diff-path/" + | |
394 "revisions/61b685fbe55ab05b/diff" | |
395 } | |
396 assert_tag :tag => 'input', | |
397 :attributes => { | |
398 :id => "rev_to", | |
399 :name => "rev_to", | |
400 :type => "hidden", | |
401 :value => '2f9c0091c754a91a' | |
402 } | |
403 end | |
404 | |
405 def test_diff_latin_1 | |
406 if @ruby19_non_utf8_pass | |
407 puts_ruby19_non_utf8_pass() | |
408 else | |
409 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do | |
410 ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| | |
411 ['inline', 'sbs'].each do |dt| | |
412 get :diff, :id => PRJ_ID, :rev => r1, :type => dt | |
413 assert_response :success | |
414 assert_template 'diff' | |
415 assert_tag :tag => 'thead', | |
416 :descendant => { | |
417 :tag => 'th', | |
418 :attributes => { :class => 'filename' } , | |
419 :content => /latin-1-dir\/test-#{@char_1}.txt/ , | |
420 }, | |
421 :sibling => { | |
422 :tag => 'tbody', | |
423 :descendant => { | |
424 :tag => 'td', | |
425 :attributes => { :class => /diff_in/ }, | |
426 :content => /test-#{@char_1}.txt/ | |
427 } | |
428 } | |
429 end | |
430 end | |
431 end | |
432 end | |
433 end | |
434 | |
435 def test_diff_should_show_filenames | |
436 get :diff, :id => PRJ_ID, :rev => 'deff712f05a90d96edbd70facc47d944be5897e3', :type => 'inline' | |
437 assert_response :success | |
438 assert_template 'diff' | |
439 # modified file | |
440 assert_select 'th.filename', :text => 'sources/watchers_controller.rb' | |
441 # deleted file | |
442 assert_select 'th.filename', :text => 'test.txt' | |
443 end | |
444 | |
445 def test_save_diff_type | |
446 user1 = User.find(1) | |
447 user1.pref[:diff_type] = nil | |
448 user1.preference.save | |
449 user = User.find(1) | |
450 assert_nil user.pref[:diff_type] | |
451 | |
452 @request.session[:user_id] = 1 # admin | |
453 get :diff, | |
454 :id => PRJ_ID, | |
455 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' | |
456 assert_response :success | |
457 assert_template 'diff' | |
458 user.reload | |
459 assert_equal "inline", user.pref[:diff_type] | |
460 get :diff, | |
461 :id => PRJ_ID, | |
462 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', | |
463 :type => 'sbs' | |
464 assert_response :success | |
465 assert_template 'diff' | |
466 user.reload | |
467 assert_equal "sbs", user.pref[:diff_type] | |
468 end | |
469 | |
470 def test_annotate | |
471 get :annotate, :id => PRJ_ID, | |
472 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param] | |
473 assert_response :success | |
474 assert_template 'annotate' | |
475 | |
476 # Line 23, changeset 2f9c0091 | |
477 assert_select 'tr' do | |
478 assert_select 'th.line-num', :text => '23' | |
479 assert_select 'td.revision', :text => /2f9c0091/ | |
480 assert_select 'td.author', :text => 'jsmith' | |
481 assert_select 'td', :text => /remove_watcher/ | |
482 end | |
483 end | |
484 | |
485 def test_annotate_at_given_revision | |
486 assert_equal 0, @repository.changesets.count | |
487 @repository.fetch_changesets | |
488 @project.reload | |
489 assert_equal NUM_REV, @repository.changesets.count | |
490 get :annotate, :id => PRJ_ID, :rev => 'deff7', | |
491 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param] | |
492 assert_response :success | |
493 assert_template 'annotate' | |
494 assert_tag :tag => 'h2', :content => /@ deff712f/ | |
495 end | |
496 | |
497 def test_annotate_binary_file | |
498 get :annotate, :id => PRJ_ID, | |
499 :path => repository_path_hash(['images', 'edit.png'])[:param] | |
500 assert_response 500 | |
501 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, | |
502 :content => /cannot be annotated/ | |
503 end | |
504 | |
505 def test_annotate_error_when_too_big | |
506 with_settings :file_max_size_displayed => 1 do | |
507 get :annotate, :id => PRJ_ID, | |
508 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param], | |
509 :rev => 'deff712f' | |
510 assert_response 500 | |
511 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, | |
512 :content => /exceeds the maximum text file size/ | |
513 | |
514 get :annotate, :id => PRJ_ID, | |
515 :path => repository_path_hash(['README'])[:param], | |
516 :rev => '7234cb2' | |
517 assert_response :success | |
518 assert_template 'annotate' | |
519 end | |
520 end | |
521 | |
522 def test_annotate_latin_1 | |
523 if @ruby19_non_utf8_pass | |
524 puts_ruby19_non_utf8_pass() | |
525 elsif WINDOWS_PASS | |
526 puts WINDOWS_SKIP_STR | |
527 elsif JRUBY_SKIP | |
528 puts JRUBY_SKIP_STR | |
529 else | |
530 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do | |
531 ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| | |
532 get :annotate, :id => PRJ_ID, | |
533 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param], | |
534 :rev => r1 | |
535 assert_tag :tag => 'th', | |
536 :content => '1', | |
537 :attributes => { :class => 'line-num' }, | |
538 :sibling => { :tag => 'td', | |
539 :content => /test-#{@char_1}.txt/ } | |
540 end | |
541 end | |
542 end | |
543 end | |
544 | |
545 def test_revisions | |
546 assert_equal 0, @repository.changesets.count | |
547 @repository.fetch_changesets | |
548 @project.reload | |
549 assert_equal NUM_REV, @repository.changesets.count | |
550 get :revisions, :id => PRJ_ID | |
551 assert_response :success | |
552 assert_template 'revisions' | |
553 assert_tag :tag => 'form', | |
554 :attributes => { | |
555 :method => 'get', | |
556 :action => '/projects/subproject1/repository/revision' | |
557 } | |
558 end | |
559 | |
560 def test_revision | |
561 assert_equal 0, @repository.changesets.count | |
562 @repository.fetch_changesets | |
563 @project.reload | |
564 assert_equal NUM_REV, @repository.changesets.count | |
565 ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r| | |
566 get :revision, :id => PRJ_ID, :rev => r | |
567 assert_response :success | |
568 assert_template 'revision' | |
569 end | |
570 end | |
571 | |
572 def test_empty_revision | |
573 assert_equal 0, @repository.changesets.count | |
574 @repository.fetch_changesets | |
575 @project.reload | |
576 assert_equal NUM_REV, @repository.changesets.count | |
577 ['', ' ', nil].each do |r| | |
578 get :revision, :id => PRJ_ID, :rev => r | |
579 assert_response 404 | |
580 assert_error_tag :content => /was not found/ | |
581 end | |
582 end | |
583 | |
584 def test_destroy_valid_repository | |
585 @request.session[:user_id] = 1 # admin | |
586 assert_equal 0, @repository.changesets.count | |
587 @repository.fetch_changesets | |
588 @project.reload | |
589 assert_equal NUM_REV, @repository.changesets.count | |
590 | |
591 assert_difference 'Repository.count', -1 do | |
592 delete :destroy, :id => @repository.id | |
593 end | |
594 assert_response 302 | |
595 @project.reload | |
596 assert_nil @project.repository | |
597 end | |
598 | |
599 def test_destroy_invalid_repository | |
600 @request.session[:user_id] = 1 # admin | |
601 @project.repository.destroy | |
602 @repository = Repository::Git.create!( | |
603 :project => @project, | |
604 :url => "/invalid", | |
605 :path_encoding => 'ISO-8859-1' | |
606 ) | |
607 @repository.fetch_changesets | |
608 @repository.reload | |
609 assert_equal 0, @repository.changesets.count | |
610 | |
611 assert_difference 'Repository.count', -1 do | |
612 delete :destroy, :id => @repository.id | |
613 end | |
614 assert_response 302 | |
615 @project.reload | |
616 assert_nil @project.repository | |
617 end | |
618 | |
619 private | |
620 | |
621 def puts_ruby19_non_utf8_pass | |
622 puts "TODO: This test fails in Ruby 1.9 " + | |
623 "and Encoding.default_external is not UTF-8. " + | |
624 "Current value is '#{Encoding.default_external.to_s}'" | |
625 end | |
626 else | |
627 puts "Git test repository NOT FOUND. Skipping functional tests !!!" | |
628 def test_fake; assert true end | |
629 end | |
630 | |
631 private | |
632 def with_cache(&block) | |
633 before = ActionController::Base.perform_caching | |
634 ActionController::Base.perform_caching = true | |
635 block.call | |
636 ActionController::Base.perform_caching = before | |
637 end | |
638 end |