comparison test/unit/repository_cvs_test.rb @ 441:cbce1fd3b1b7 redmine-1.2

Update to Redmine 1.2-stable branch (Redmine SVN rev 6000)
author Chris Cannam
date Mon, 06 Jun 2011 14:24:13 +0100
parents 051f544170fe
children cbb26bc654de
comparison
equal deleted inserted replaced
245:051f544170fe 441:cbce1fd3b1b7
1 # redMine - project management software 1 # Redmine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 # 3 #
4 # This program is free software; you can redistribute it and/or 4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License 5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2 6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version. 7 # of the License, or (at your option) any later version.
8 # 8 #
9 # This program is distributed in the hope that it will be useful, 9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details. 12 # GNU General Public License for more details.
13 # 13 #
14 # You should have received a copy of the GNU General Public License 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 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. 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 require File.expand_path('../../test_helper', __FILE__) 18 require File.expand_path('../../test_helper', __FILE__)
19 require 'pp' 19 require 'pp'
20 class RepositoryCvsTest < ActiveSupport::TestCase 20 class RepositoryCvsTest < ActiveSupport::TestCase
21 fixtures :projects 21 fixtures :projects
22 22
23 # No '..' in the repository path 23 # No '..' in the repository path
24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository' 24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
25 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin? 25 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
26 # CVS module 26 # CVS module
27 MODULE_NAME = 'test' 27 MODULE_NAME = 'test'
28 28 CHANGESETS_NUM = 7
29
29 def setup 30 def setup
30 @project = Project.find(3) 31 @project = Project.find(3)
31 @repository = Repository::Cvs.create(:project => @project, 32 @repository = Repository::Cvs.create(:project => @project,
32 :root_url => REPOSITORY_PATH, 33 :root_url => REPOSITORY_PATH,
33 :url => MODULE_NAME, 34 :url => MODULE_NAME,
34 :log_encoding => 'UTF-8') 35 :log_encoding => 'UTF-8')
35 assert @repository 36 assert @repository
36 end 37 end
37 38
38 if File.directory?(REPOSITORY_PATH) 39 if File.directory?(REPOSITORY_PATH)
39 def test_fetch_changesets_from_scratch 40 def test_fetch_changesets_from_scratch
40 assert_equal 0, @repository.changesets.count 41 assert_equal 0, @repository.changesets.count
41 @repository.fetch_changesets 42 @repository.fetch_changesets
42 @repository.reload 43 @repository.reload
43 44
44 assert_equal 5, @repository.changesets.count 45 assert_equal CHANGESETS_NUM, @repository.changesets.count
45 assert_equal 14, @repository.changes.count 46 assert_equal 16, @repository.changes.count
46 assert_not_nil @repository.changesets.find_by_comments('Two files changed') 47 assert_not_nil @repository.changesets.find_by_comments('Two files changed')
47 48
48 r2 = @repository.changesets.find_by_revision('2') 49 r2 = @repository.changesets.find_by_revision('2')
49 assert_equal 'v1-20071213-162510', r2.scmid 50 assert_equal 'v1-20071213-162510', r2.scmid
50 end 51 end
51 52
52 def test_fetch_changesets_incremental 53 def test_fetch_changesets_incremental
53 assert_equal 0, @repository.changesets.count 54 assert_equal 0, @repository.changesets.count
54 @repository.fetch_changesets 55 @repository.fetch_changesets
55 # Remove changesets with revision > 3 56 # Remove changesets with revision > 3
56 @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 3} 57 @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 3}
67 latest_rev = @repository.latest_changeset 68 latest_rev = @repository.latest_changeset
68 assert_equal rev3_committed_on, latest_rev.committed_on 69 assert_equal rev3_committed_on, latest_rev.committed_on
69 70
70 @repository.fetch_changesets 71 @repository.fetch_changesets
71 @repository.reload 72 @repository.reload
72 assert_equal 5, @repository.changesets.count 73 assert_equal CHANGESETS_NUM, @repository.changesets.count
73 74
74 assert_equal %w|5 4 3 2 1|, @repository.changesets.collect(&:revision) 75 assert_equal %w|7 6 5 4 3 2 1|, @repository.changesets.collect(&:revision)
75 rev5_commit = @repository.changesets.find(:first, :order => 'committed_on DESC') 76 rev5_commit = @repository.changesets.find_by_revision('5')
76 assert_equal 'HEAD-20071213-163001', rev5_commit.scmid 77 assert_equal 'HEAD-20071213-163001', rev5_commit.scmid
77 # 2007-12-14 01:30:01 +0900 78 # 2007-12-14 01:30:01 +0900
78 rev5_committed_on = Time.gm(2007, 12, 13, 16, 30, 1) 79 rev5_committed_on = Time.gm(2007, 12, 13, 16, 30, 1)
79 assert_equal rev5_committed_on, rev5_commit.committed_on 80 assert_equal rev5_committed_on, rev5_commit.committed_on
80 end 81 end
81 82
82 def test_deleted_files_should_not_be_listed 83 def test_deleted_files_should_not_be_listed
83 assert_equal 0, @repository.changesets.count 84 assert_equal 0, @repository.changesets.count
84 @repository.fetch_changesets 85 @repository.fetch_changesets
85 @repository.reload 86 @repository.reload
86 assert_equal 5, @repository.changesets.count 87 assert_equal CHANGESETS_NUM, @repository.changesets.count
87 88
88 entries = @repository.entries('sources') 89 entries = @repository.entries('sources')
89 assert entries.detect {|e| e.name == 'watchers_controller.rb'} 90 assert entries.detect {|e| e.name == 'watchers_controller.rb'}
90 assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'} 91 assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
91 end 92 end
93
94 def test_entries_rev3
95 @repository.fetch_changesets
96 @repository.reload
97 entries = @repository.entries('', '3')
98 assert_equal 3, entries.size
99 assert_equal entries[2].name, "README"
100 assert_equal entries[2].lastrev.time, Time.gm(2007, 12, 13, 16, 27, 22)
101 assert_equal entries[2].lastrev.identifier, '3'
102 assert_equal entries[2].lastrev.revision, '3'
103 assert_equal entries[2].lastrev.author, 'LANG'
104 end
105
106 def test_entries_invalid_path
107 @repository.fetch_changesets
108 @repository.reload
109 assert_nil @repository.entries('missing')
110 assert_nil @repository.entries('missing', '3')
111 end
112
113 def test_entries_invalid_revision
114 @repository.fetch_changesets
115 @repository.reload
116 assert_nil @repository.entries('', '123')
117 end
118
119 def test_cat
120 @repository.fetch_changesets
121 @repository.reload
122 buf = @repository.cat('README')
123 assert buf
124 lines = buf.split("\n")
125 assert_equal 3, lines.length
126 buf = lines[1].gsub(/\r$/, "")
127 assert_equal 'with one change', buf
128 buf = @repository.cat('README', '1')
129 assert buf
130 lines = buf.split("\n")
131 assert_equal 1, lines.length
132 buf = lines[0].gsub(/\r$/, "")
133 assert_equal 'CVS test repository', buf
134 assert_nil @repository.cat('missing.rb')
135
136 # sources/welcome_controller.rb is removed at revision 5.
137 assert @repository.cat('sources/welcome_controller.rb', '4')
138 assert @repository.cat('sources/welcome_controller.rb', '5').blank?
139
140 # invalid revision
141 assert @repository.cat('README', '123').blank?
142 end
143
144 def test_annotate
145 @repository.fetch_changesets
146 @repository.reload
147 ann = @repository.annotate('README')
148 assert ann
149 assert_equal 3, ann.revisions.length
150 assert_equal '1.2', ann.revisions[1].revision
151 assert_equal 'LANG', ann.revisions[1].author
152 assert_equal 'with one change', ann.lines[1]
153
154 ann = @repository.annotate('README', '1')
155 assert ann
156 assert_equal 1, ann.revisions.length
157 assert_equal '1.1', ann.revisions[0].revision
158 assert_equal 'LANG', ann.revisions[0].author
159 assert_equal 'CVS test repository', ann.lines[0]
160
161 # invalid revision
162 assert_nil @repository.annotate('README', '123')
163 end
164
92 else 165 else
93 puts "CVS test repository NOT FOUND. Skipping unit tests !!!" 166 puts "CVS test repository NOT FOUND. Skipping unit tests !!!"
94 def test_fake; assert true end 167 def test_fake; assert true end
95 end 168 end
96 end 169 end