##// END OF EJS Templates
scm: git: add latest changesets branch test in unit model test (#5357)....
Toshi MARUYAMA -
r4936:7c7bbf6d1845
parent child
Show More
@@ -1,210 +1,236
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
2 # Copyright (C) 2006-2007 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
19
20 class RepositoryGitTest < ActiveSupport::TestCase
20 class RepositoryGitTest < ActiveSupport::TestCase
21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
22
22
23 # No '..' in the repository path
23 # No '..' in the repository path
24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
25 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
25 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
26
26
27 FELIX_HEX = "Felix Sch\xC3\xA4fer"
27 FELIX_HEX = "Felix Sch\xC3\xA4fer"
28
28
29 def setup
29 def setup
30 @project = Project.find(3)
30 @project = Project.find(3)
31 @repository = Repository::Git.create(
31 @repository = Repository::Git.create(
32 :project => @project,
32 :project => @project,
33 :url => REPOSITORY_PATH,
33 :url => REPOSITORY_PATH,
34 :path_encoding => 'ISO-8859-1'
34 :path_encoding => 'ISO-8859-1'
35 )
35 )
36 assert @repository
36 assert @repository
37 end
37 end
38
38
39 if File.directory?(REPOSITORY_PATH)
39 if File.directory?(REPOSITORY_PATH)
40 def test_fetch_changesets_from_scratch
40 def test_fetch_changesets_from_scratch
41 @repository.fetch_changesets
41 @repository.fetch_changesets
42 @repository.reload
42 @repository.reload
43
43
44 assert_equal 20, @repository.changesets.count
44 assert_equal 20, @repository.changesets.count
45 assert_equal 30, @repository.changes.count
45 assert_equal 30, @repository.changes.count
46
46
47 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
47 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
48 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
48 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
49 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
49 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
50 assert_equal User.find_by_login('jsmith'), commit.user
50 assert_equal User.find_by_login('jsmith'), commit.user
51 # TODO: add a commit with commit time <> author time to the test repository
51 # TODO: add a commit with commit time <> author time to the test repository
52 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
52 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
53 assert_equal "2007-12-14".to_date, commit.commit_date
53 assert_equal "2007-12-14".to_date, commit.commit_date
54 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
54 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
55 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
55 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
56 assert_equal 3, commit.changes.count
56 assert_equal 3, commit.changes.count
57 change = commit.changes.sort_by(&:path).first
57 change = commit.changes.sort_by(&:path).first
58 assert_equal "README", change.path
58 assert_equal "README", change.path
59 assert_equal "A", change.action
59 assert_equal "A", change.action
60 end
60 end
61
61
62 def test_fetch_changesets_incremental
62 def test_fetch_changesets_incremental
63 @repository.fetch_changesets
63 @repository.fetch_changesets
64 # Remove the 3 latest changesets
64 # Remove the 3 latest changesets
65 @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 7).each(&:destroy)
65 @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 7).each(&:destroy)
66 @repository.reload
66 @repository.reload
67 cs1 = @repository.changesets
67 cs1 = @repository.changesets
68 assert_equal 13, cs1.count
68 assert_equal 13, cs1.count
69
69
70 rev_a_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
70 rev_a_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
71 assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.revision
71 assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.revision
72 # Mon Jul 5 22:34:26 2010 +0200
72 # Mon Jul 5 22:34:26 2010 +0200
73 rev_a_committed_on = Time.gm(2010, 7, 5, 20, 34, 26)
73 rev_a_committed_on = Time.gm(2010, 7, 5, 20, 34, 26)
74 assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.scmid
74 assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.scmid
75 assert_equal rev_a_committed_on, rev_a_commit.committed_on
75 assert_equal rev_a_committed_on, rev_a_commit.committed_on
76 latest_rev = @repository.latest_changeset
76 latest_rev = @repository.latest_changeset
77 assert_equal rev_a_committed_on, latest_rev.committed_on
77 assert_equal rev_a_committed_on, latest_rev.committed_on
78
78
79 @repository.fetch_changesets
79 @repository.fetch_changesets
80 assert_equal 20, @repository.changesets.count
80 assert_equal 20, @repository.changesets.count
81 end
81 end
82
82
83 def test_latest_changesets
83 def test_latest_changesets
84 @repository.fetch_changesets
84 @repository.fetch_changesets
85 @repository.reload
85 @repository.reload
86 # with limit
86 # with limit
87 changesets = @repository.latest_changesets('', nil, 2)
87 changesets = @repository.latest_changesets('', nil, 2)
88 assert_equal 2, changesets.size
88 assert_equal 2, changesets.size
89
89
90 # with path
90 # with path
91 changesets = @repository.latest_changesets('images', nil)
91 changesets = @repository.latest_changesets('images', nil)
92 assert_equal [
92 assert_equal [
93 'deff712f05a90d96edbd70facc47d944be5897e3',
93 'deff712f05a90d96edbd70facc47d944be5897e3',
94 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
94 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
95 '7234cb2750b63f47bff735edc50a1c0a433c2518',
95 '7234cb2750b63f47bff735edc50a1c0a433c2518',
96 ], changesets.collect(&:revision)
96 ], changesets.collect(&:revision)
97
97
98 changesets = @repository.latest_changesets('README', nil)
98 changesets = @repository.latest_changesets('README', nil)
99 assert_equal [
99 assert_equal [
100 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
100 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
101 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
101 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
102 '713f4944648826f558cf548222f813dabe7cbb04',
102 '713f4944648826f558cf548222f813dabe7cbb04',
103 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
103 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
104 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
104 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
105 '7234cb2750b63f47bff735edc50a1c0a433c2518',
105 '7234cb2750b63f47bff735edc50a1c0a433c2518',
106 ], changesets.collect(&:revision)
106 ], changesets.collect(&:revision)
107
107
108 # with path, revision and limit
108 # with path, revision and limit
109 changesets = @repository.latest_changesets('images', '899a15dba')
109 changesets = @repository.latest_changesets('images', '899a15dba')
110 assert_equal [
110 assert_equal [
111 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
111 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
112 '7234cb2750b63f47bff735edc50a1c0a433c2518',
112 '7234cb2750b63f47bff735edc50a1c0a433c2518',
113 ], changesets.collect(&:revision)
113 ], changesets.collect(&:revision)
114
114
115 changesets = @repository.latest_changesets('images', '899a15dba', 1)
115 changesets = @repository.latest_changesets('images', '899a15dba', 1)
116 assert_equal [
116 assert_equal [
117 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
117 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
118 ], changesets.collect(&:revision)
118 ], changesets.collect(&:revision)
119
119
120 changesets = @repository.latest_changesets('README', '899a15dba')
120 changesets = @repository.latest_changesets('README', '899a15dba')
121 assert_equal [
121 assert_equal [
122 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
122 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
123 '7234cb2750b63f47bff735edc50a1c0a433c2518',
123 '7234cb2750b63f47bff735edc50a1c0a433c2518',
124 ], changesets.collect(&:revision)
124 ], changesets.collect(&:revision)
125
125
126 changesets = @repository.latest_changesets('README', '899a15dba', 1)
126 changesets = @repository.latest_changesets('README', '899a15dba', 1)
127 assert_equal [
127 assert_equal [
128 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
128 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
129 ], changesets.collect(&:revision)
129 ], changesets.collect(&:revision)
130
130
131 # with path, tag and limit
131 # with path, tag and limit
132 changesets = @repository.latest_changesets('images', 'tag01.annotated')
132 changesets = @repository.latest_changesets('images', 'tag01.annotated')
133 assert_equal [
133 assert_equal [
134 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
134 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
135 '7234cb2750b63f47bff735edc50a1c0a433c2518',
135 '7234cb2750b63f47bff735edc50a1c0a433c2518',
136 ], changesets.collect(&:revision)
136 ], changesets.collect(&:revision)
137
137
138 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
138 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
139 assert_equal [
139 assert_equal [
140 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
140 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
141 ], changesets.collect(&:revision)
141 ], changesets.collect(&:revision)
142
142
143 changesets = @repository.latest_changesets('README', 'tag01.annotated')
143 changesets = @repository.latest_changesets('README', 'tag01.annotated')
144 assert_equal [
144 assert_equal [
145 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
145 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
146 '7234cb2750b63f47bff735edc50a1c0a433c2518',
146 '7234cb2750b63f47bff735edc50a1c0a433c2518',
147 ], changesets.collect(&:revision)
147 ], changesets.collect(&:revision)
148
148
149 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
149 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
150 assert_equal [
150 assert_equal [
151 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
151 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
152 ], changesets.collect(&:revision)
152 ], changesets.collect(&:revision)
153
154 # with path, branch and limit
155 changesets = @repository.latest_changesets('images', 'test_branch')
156 assert_equal [
157 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
158 '7234cb2750b63f47bff735edc50a1c0a433c2518',
159 ], changesets.collect(&:revision)
160
161 changesets = @repository.latest_changesets('images', 'test_branch', 1)
162 assert_equal [
163 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
164 ], changesets.collect(&:revision)
165
166 changesets = @repository.latest_changesets('README', 'test_branch')
167 assert_equal [
168 '713f4944648826f558cf548222f813dabe7cbb04',
169 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
170 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
171 '7234cb2750b63f47bff735edc50a1c0a433c2518',
172 ], changesets.collect(&:revision)
173
174 changesets = @repository.latest_changesets('README', 'test_branch', 2)
175 assert_equal [
176 '713f4944648826f558cf548222f813dabe7cbb04',
177 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
178 ], changesets.collect(&:revision)
153 end
179 end
154
180
155 def test_find_changeset_by_name
181 def test_find_changeset_by_name
156 @repository.fetch_changesets
182 @repository.fetch_changesets
157 @repository.reload
183 @repository.reload
158 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
184 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
159 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
185 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
160 @repository.find_changeset_by_name(r).revision
186 @repository.find_changeset_by_name(r).revision
161 end
187 end
162 end
188 end
163
189
164 def test_find_changeset_by_empty_name
190 def test_find_changeset_by_empty_name
165 @repository.fetch_changesets
191 @repository.fetch_changesets
166 @repository.reload
192 @repository.reload
167 ['', ' ', nil].each do |r|
193 ['', ' ', nil].each do |r|
168 assert_nil @repository.find_changeset_by_name(r)
194 assert_nil @repository.find_changeset_by_name(r)
169 end
195 end
170 end
196 end
171
197
172 def test_identifier
198 def test_identifier
173 @repository.fetch_changesets
199 @repository.fetch_changesets
174 @repository.reload
200 @repository.reload
175 c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
201 c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
176 assert_equal c.scmid, c.identifier
202 assert_equal c.scmid, c.identifier
177 end
203 end
178
204
179 def test_format_identifier
205 def test_format_identifier
180 @repository.fetch_changesets
206 @repository.fetch_changesets
181 @repository.reload
207 @repository.reload
182 c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
208 c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
183 assert_equal '7234cb27', c.format_identifier
209 assert_equal '7234cb27', c.format_identifier
184 end
210 end
185
211
186 def test_activities
212 def test_activities
187 c = Changeset.new(:repository => @repository,
213 c = Changeset.new(:repository => @repository,
188 :committed_on => Time.now,
214 :committed_on => Time.now,
189 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
215 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
190 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
216 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
191 :comments => 'test')
217 :comments => 'test')
192 assert c.event_title.include?('abc7234c:')
218 assert c.event_title.include?('abc7234c:')
193 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
219 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
194 end
220 end
195
221
196 def test_log_utf8
222 def test_log_utf8
197 @repository.fetch_changesets
223 @repository.fetch_changesets
198 @repository.reload
224 @repository.reload
199 str_felix_hex = FELIX_HEX
225 str_felix_hex = FELIX_HEX
200 if str_felix_hex.respond_to?(:force_encoding)
226 if str_felix_hex.respond_to?(:force_encoding)
201 str_felix_hex.force_encoding('UTF-8')
227 str_felix_hex.force_encoding('UTF-8')
202 end
228 end
203 c = @repository.changesets.find_by_revision('ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
229 c = @repository.changesets.find_by_revision('ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
204 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
230 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
205 end
231 end
206 else
232 else
207 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
233 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
208 def test_fake; assert true end
234 def test_fake; assert true end
209 end
235 end
210 end
236 end
General Comments 0
You need to be logged in to leave comments. Login now