To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / .svn / pristine / 42 / 42cbd8a4f24d085f0d8c0a431c99b911f57d4034.svn-base @ 1298:4f746d8966dd

History | View | Annotate | Download (23.2 KB)

1 1295:622f24f53b42 Chris
# 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