To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / .svn / pristine / 74 / 74843b67cd322d5f1fa051b32a2e14dd00a341ce.svn-base @ 1297:0a574315af3e
History | View | Annotate | Download (23.2 KB)
| 1 | 1296:038ba2d95de8 | Chris | # Redmine - project management software |
|---|---|---|---|
| 2 | # Copyright (C) 2006-2012 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 |