annotate test/unit/repository_subversion_test.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents cbb26bc654de
children 433d4f72a19b
rev   line source
Chris@441 1 # Redmine - project management software
Chris@441 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@441 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@441 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class RepositorySubversionTest < ActiveSupport::TestCase
Chris@441 21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
Chris@441 22
Chris@909 23 NUM_REV = 11
Chris@909 24
Chris@0 25 def setup
Chris@245 26 @project = Project.find(3)
Chris@441 27 @repository = Repository::Subversion.create(:project => @project,
Chris@441 28 :url => self.class.subversion_repository_url)
Chris@441 29 assert @repository
Chris@0 30 end
Chris@441 31
Chris@0 32 if repository_configured?('subversion')
Chris@0 33 def test_fetch_changesets_from_scratch
Chris@909 34 assert_equal 0, @repository.changesets.count
Chris@0 35 @repository.fetch_changesets
Chris@909 36 @project.reload
Chris@441 37
Chris@909 38 assert_equal NUM_REV, @repository.changesets.count
Chris@0 39 assert_equal 20, @repository.changes.count
Chris@0 40 assert_equal 'Initial import.', @repository.changesets.find_by_revision('1').comments
Chris@0 41 end
Chris@441 42
Chris@0 43 def test_fetch_changesets_incremental
Chris@909 44 assert_equal 0, @repository.changesets.count
Chris@0 45 @repository.fetch_changesets
Chris@909 46 @project.reload
Chris@909 47 assert_equal NUM_REV, @repository.changesets.count
Chris@909 48
Chris@0 49 # Remove changesets with revision > 5
Chris@0 50 @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 5}
Chris@909 51 @project.reload
Chris@0 52 assert_equal 5, @repository.changesets.count
Chris@441 53
Chris@0 54 @repository.fetch_changesets
Chris@909 55 @project.reload
Chris@909 56 assert_equal NUM_REV, @repository.changesets.count
Chris@0 57 end
Chris@441 58
Chris@0 59 def test_latest_changesets
Chris@909 60 assert_equal 0, @repository.changesets.count
Chris@0 61 @repository.fetch_changesets
Chris@909 62 @project.reload
Chris@909 63 assert_equal NUM_REV, @repository.changesets.count
Chris@441 64
Chris@0 65 # with limit
Chris@0 66 changesets = @repository.latest_changesets('', nil, 2)
Chris@0 67 assert_equal 2, changesets.size
Chris@0 68 assert_equal @repository.latest_changesets('', nil).slice(0,2), changesets
Chris@441 69
Chris@0 70 # with path
Chris@0 71 changesets = @repository.latest_changesets('subversion_test/folder', nil)
Chris@0 72 assert_equal ["10", "9", "7", "6", "5", "2"], changesets.collect(&:revision)
Chris@441 73
Chris@0 74 # with path and revision
Chris@0 75 changesets = @repository.latest_changesets('subversion_test/folder', 8)
Chris@0 76 assert_equal ["7", "6", "5", "2"], changesets.collect(&:revision)
Chris@0 77 end
Chris@0 78
Chris@0 79 def test_directory_listing_with_square_brackets_in_path
Chris@909 80 assert_equal 0, @repository.changesets.count
Chris@0 81 @repository.fetch_changesets
Chris@909 82 @project.reload
Chris@909 83 assert_equal NUM_REV, @repository.changesets.count
Chris@441 84
Chris@0 85 entries = @repository.entries('subversion_test/[folder_with_brackets]')
Chris@0 86 assert_not_nil entries, 'Expect to find entries in folder_with_brackets'
Chris@0 87 assert_equal 1, entries.size, 'Expect one entry in folder_with_brackets'
Chris@0 88 assert_equal 'README.txt', entries.first.name
Chris@0 89 end
Chris@0 90
Chris@0 91 def test_directory_listing_with_square_brackets_in_base
Chris@245 92 @project = Project.find(3)
Chris@441 93 @repository = Repository::Subversion.create(
Chris@441 94 :project => @project,
Chris@441 95 :url => "file:///#{self.class.repository_path('subversion')}/subversion_test/[folder_with_brackets]")
Chris@0 96
Chris@909 97 assert_equal 0, @repository.changesets.count
Chris@0 98 @repository.fetch_changesets
Chris@909 99 @project.reload
Chris@0 100
Chris@0 101 assert_equal 1, @repository.changesets.count, 'Expected to see 1 revision'
Chris@0 102 assert_equal 2, @repository.changes.count, 'Expected to see 2 changes, dir add and file add'
Chris@0 103
Chris@0 104 entries = @repository.entries('')
Chris@0 105 assert_not_nil entries, 'Expect to find entries'
Chris@0 106 assert_equal 1, entries.size, 'Expect a single entry'
Chris@0 107 assert_equal 'README.txt', entries.first.name
Chris@0 108 end
Chris@119 109
Chris@119 110 def test_identifier
Chris@909 111 assert_equal 0, @repository.changesets.count
Chris@119 112 @repository.fetch_changesets
Chris@909 113 @project.reload
Chris@909 114 assert_equal NUM_REV, @repository.changesets.count
Chris@119 115 c = @repository.changesets.find_by_revision('1')
Chris@119 116 assert_equal c.revision, c.identifier
Chris@119 117 end
Chris@119 118
Chris@119 119 def test_find_changeset_by_empty_name
Chris@909 120 assert_equal 0, @repository.changesets.count
Chris@119 121 @repository.fetch_changesets
Chris@909 122 @project.reload
Chris@909 123 assert_equal NUM_REV, @repository.changesets.count
Chris@119 124 ['', ' ', nil].each do |r|
Chris@119 125 assert_nil @repository.find_changeset_by_name(r)
Chris@119 126 end
Chris@119 127 end
Chris@119 128
Chris@119 129 def test_identifier_nine_digit
Chris@119 130 c = Changeset.new(:repository => @repository, :committed_on => Time.now,
Chris@119 131 :revision => '123456789', :comments => 'test')
Chris@119 132 assert_equal c.identifier, c.revision
Chris@119 133 end
Chris@119 134
Chris@119 135 def test_format_identifier
Chris@909 136 assert_equal 0, @repository.changesets.count
Chris@119 137 @repository.fetch_changesets
Chris@909 138 @project.reload
Chris@909 139 assert_equal NUM_REV, @repository.changesets.count
Chris@119 140 c = @repository.changesets.find_by_revision('1')
Chris@119 141 assert_equal c.format_identifier, c.revision
Chris@119 142 end
Chris@119 143
Chris@119 144 def test_format_identifier_nine_digit
Chris@119 145 c = Changeset.new(:repository => @repository, :committed_on => Time.now,
Chris@119 146 :revision => '123456789', :comments => 'test')
Chris@119 147 assert_equal c.format_identifier, c.revision
Chris@119 148 end
Chris@119 149
Chris@119 150 def test_activities
Chris@119 151 c = Changeset.new(:repository => @repository, :committed_on => Time.now,
Chris@119 152 :revision => '1', :comments => 'test')
Chris@119 153 assert c.event_title.include?('1:')
Chris@119 154 assert_equal '1', c.event_url[:rev]
Chris@119 155 end
Chris@119 156
Chris@119 157 def test_activities_nine_digit
Chris@119 158 c = Changeset.new(:repository => @repository, :committed_on => Time.now,
Chris@119 159 :revision => '123456789', :comments => 'test')
Chris@119 160 assert c.event_title.include?('123456789:')
Chris@119 161 assert_equal '123456789', c.event_url[:rev]
Chris@119 162 end
Chris@245 163
Chris@245 164 def test_log_encoding_ignore_setting
Chris@245 165 with_settings :commit_logs_encoding => 'windows-1252' do
Chris@245 166 s1 = "\xC2\x80"
Chris@245 167 s2 = "\xc3\x82\xc2\x80"
Chris@245 168 if s1.respond_to?(:force_encoding)
Chris@441 169 s1.force_encoding('ISO-8859-1')
Chris@441 170 s2.force_encoding('UTF-8')
Chris@441 171 assert_equal s1.encode('UTF-8'), s2
Chris@245 172 end
Chris@245 173 c = Changeset.new(:repository => @repository,
Chris@441 174 :comments => s2,
Chris@441 175 :revision => '123',
Chris@245 176 :committed_on => Time.now)
Chris@245 177 assert c.save
Chris@245 178 assert_equal s2, c.comments
Chris@245 179 end
Chris@245 180 end
Chris@245 181
Chris@245 182 def test_previous
Chris@909 183 assert_equal 0, @repository.changesets.count
Chris@245 184 @repository.fetch_changesets
Chris@909 185 @project.reload
Chris@909 186 assert_equal NUM_REV, @repository.changesets.count
Chris@245 187 changeset = @repository.find_changeset_by_name('3')
Chris@245 188 assert_equal @repository.find_changeset_by_name('2'), changeset.previous
Chris@245 189 end
Chris@245 190
Chris@245 191 def test_previous_nil
Chris@909 192 assert_equal 0, @repository.changesets.count
Chris@245 193 @repository.fetch_changesets
Chris@909 194 @project.reload
Chris@909 195 assert_equal NUM_REV, @repository.changesets.count
Chris@245 196 changeset = @repository.find_changeset_by_name('1')
Chris@245 197 assert_nil changeset.previous
Chris@245 198 end
Chris@245 199
Chris@245 200 def test_next
Chris@909 201 assert_equal 0, @repository.changesets.count
Chris@245 202 @repository.fetch_changesets
Chris@909 203 @project.reload
Chris@909 204 assert_equal NUM_REV, @repository.changesets.count
Chris@245 205 changeset = @repository.find_changeset_by_name('2')
Chris@245 206 assert_equal @repository.find_changeset_by_name('3'), changeset.next
Chris@245 207 end
Chris@245 208
Chris@245 209 def test_next_nil
Chris@909 210 assert_equal 0, @repository.changesets.count
Chris@245 211 @repository.fetch_changesets
Chris@909 212 @project.reload
Chris@909 213 assert_equal NUM_REV, @repository.changesets.count
Chris@245 214 changeset = @repository.find_changeset_by_name('11')
Chris@245 215 assert_nil changeset.next
Chris@245 216 end
Chris@0 217 else
Chris@0 218 puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
Chris@0 219 def test_fake; assert true end
Chris@0 220 end
Chris@0 221 end