##// END OF EJS Templates
scm: git: add test of fetching invalid revision in unit model test (#7146)....
Toshi MARUYAMA -
r5669:4c963cc9dc25
parent child
Show More
@@ -1,347 +1,387
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19
20 20 class RepositoryGitTest < ActiveSupport::TestCase
21 21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
22 22
23 23 # No '..' in the repository path
24 24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
25 25 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
26 26
27 27 FELIX_HEX = "Felix Sch\xC3\xA4fer"
28 28 CHAR_1_HEX = "\xc3\x9c"
29 29
30 30 ## Ruby uses ANSI api to fork a process on Windows.
31 31 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
32 32 ## and these are incompatible with ASCII.
33 33 # WINDOWS_PASS = Redmine::Platform.mswin?
34 34 WINDOWS_PASS = false
35 35
36 36 if File.directory?(REPOSITORY_PATH)
37 37 def setup
38 38 klass = Repository::Git
39 39 assert_equal "Git", klass.scm_name
40 40 assert klass.scm_adapter_class
41 41 assert_not_equal "", klass.scm_command
42 42 assert_equal true, klass.scm_available
43 43
44 44 @project = Project.find(3)
45 45 @repository = Repository::Git.create(
46 46 :project => @project,
47 47 :url => REPOSITORY_PATH,
48 48 :path_encoding => 'ISO-8859-1'
49 49 )
50 50 assert @repository
51 51 @char_1 = CHAR_1_HEX.dup
52 52 if @char_1.respond_to?(:force_encoding)
53 53 @char_1.force_encoding('UTF-8')
54 54 end
55 55 end
56 56
57 57 def test_fetch_changesets_from_scratch
58 58 assert_nil @repository.extra_info
59 59
60 60 @repository.fetch_changesets
61 61 @repository.reload
62 62
63 63 assert_equal 21, @repository.changesets.count
64 64 assert_equal 33, @repository.changes.count
65 65
66 66 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
67 67 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
68 68 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
69 69 assert_equal User.find_by_login('jsmith'), commit.user
70 70 # TODO: add a commit with commit time <> author time to the test repository
71 71 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
72 72 assert_equal "2007-12-14".to_date, commit.commit_date
73 73 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
74 74 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
75 75 assert_equal 3, commit.changes.count
76 76 change = commit.changes.sort_by(&:path).first
77 77 assert_equal "README", change.path
78 78 assert_equal "A", change.action
79 79
80 80 assert_equal 4, @repository.extra_info["branches"].size
81 81 end
82 82
83 83 def test_fetch_changesets_incremental
84 84 @repository.fetch_changesets
85 85 @repository.reload
86 86 assert_equal 21, @repository.changesets.count
87 87 assert_equal 33, @repository.changes.count
88 88 extra_info_db = @repository.extra_info["branches"]
89 89 assert_equal 4, extra_info_db.size
90 90 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
91 91 extra_info_db["latin-1-path-encoding"]["last_scmid"]
92 92 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
93 93 extra_info_db["master"]["last_scmid"]
94 94
95 95 del_revs = [
96 96 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
97 97 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
98 98 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
99 99 "deff712f05a90d96edbd70facc47d944be5897e3",
100 100 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
101 101 "7e61ac704deecde634b51e59daa8110435dcb3da",
102 102 ]
103 103 @repository.changesets.each do |rev|
104 104 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
105 105 end
106 106 @repository.reload
107 107 cs1 = @repository.changesets
108 108 assert_equal 15, cs1.count
109 109 h = @repository.extra_info.dup
110 110 h["branches"]["master"]["last_scmid"] =
111 111 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
112 112 @repository.merge_extra_info(h)
113 113 @repository.save
114 114 @repository.reload
115 115 extra_info_db_1 = @repository.extra_info["branches"]
116 116 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
117 117 extra_info_db_1["master"]["last_scmid"]
118 118
119 119 @repository.fetch_changesets
120 120 assert_equal 21, @repository.changesets.count
121 121 end
122 122
123 def test_fetch_changesets_invalid_rev
124 @repository.fetch_changesets
125 @repository.reload
126 assert_equal 21, @repository.changesets.count
127 assert_equal 33, @repository.changes.count
128 extra_info_db = @repository.extra_info["branches"]
129 assert_equal 4, extra_info_db.size
130 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
131 extra_info_db["latin-1-path-encoding"]["last_scmid"]
132 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
133 extra_info_db["master"]["last_scmid"]
134
135 del_revs = [
136 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
137 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
138 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
139 "deff712f05a90d96edbd70facc47d944be5897e3",
140 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
141 "7e61ac704deecde634b51e59daa8110435dcb3da",
142 ]
143 @repository.changesets.each do |rev|
144 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
145 end
146 @repository.reload
147 cs1 = @repository.changesets
148 assert_equal 15, cs1.count
149 h = @repository.extra_info.dup
150 h["branches"]["master"]["last_scmid"] =
151 "abcd1234efgh"
152 @repository.merge_extra_info(h)
153 @repository.save
154 @repository.reload
155 extra_info_db_1 = @repository.extra_info["branches"]
156 assert_equal "abcd1234efgh",
157 extra_info_db_1["master"]["last_scmid"]
158
159 @repository.fetch_changesets
160 assert_equal 15, @repository.changesets.count
161 end
162
123 163 def test_latest_changesets
124 164 @repository.fetch_changesets
125 165 @repository.reload
126 166 # with limit
127 167 changesets = @repository.latest_changesets('', nil, 2)
128 168 assert_equal 2, changesets.size
129 169
130 170 # with path
131 171 changesets = @repository.latest_changesets('images', nil)
132 172 assert_equal [
133 173 'deff712f05a90d96edbd70facc47d944be5897e3',
134 174 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
135 175 '7234cb2750b63f47bff735edc50a1c0a433c2518',
136 176 ], changesets.collect(&:revision)
137 177
138 178 changesets = @repository.latest_changesets('README', nil)
139 179 assert_equal [
140 180 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
141 181 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
142 182 '713f4944648826f558cf548222f813dabe7cbb04',
143 183 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
144 184 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
145 185 '7234cb2750b63f47bff735edc50a1c0a433c2518',
146 186 ], changesets.collect(&:revision)
147 187
148 188 # with path, revision and limit
149 189 changesets = @repository.latest_changesets('images', '899a15dba')
150 190 assert_equal [
151 191 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
152 192 '7234cb2750b63f47bff735edc50a1c0a433c2518',
153 193 ], changesets.collect(&:revision)
154 194
155 195 changesets = @repository.latest_changesets('images', '899a15dba', 1)
156 196 assert_equal [
157 197 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
158 198 ], changesets.collect(&:revision)
159 199
160 200 changesets = @repository.latest_changesets('README', '899a15dba')
161 201 assert_equal [
162 202 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
163 203 '7234cb2750b63f47bff735edc50a1c0a433c2518',
164 204 ], changesets.collect(&:revision)
165 205
166 206 changesets = @repository.latest_changesets('README', '899a15dba', 1)
167 207 assert_equal [
168 208 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
169 209 ], changesets.collect(&:revision)
170 210
171 211 # with path, tag and limit
172 212 changesets = @repository.latest_changesets('images', 'tag01.annotated')
173 213 assert_equal [
174 214 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
175 215 '7234cb2750b63f47bff735edc50a1c0a433c2518',
176 216 ], changesets.collect(&:revision)
177 217
178 218 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
179 219 assert_equal [
180 220 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
181 221 ], changesets.collect(&:revision)
182 222
183 223 changesets = @repository.latest_changesets('README', 'tag01.annotated')
184 224 assert_equal [
185 225 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
186 226 '7234cb2750b63f47bff735edc50a1c0a433c2518',
187 227 ], changesets.collect(&:revision)
188 228
189 229 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
190 230 assert_equal [
191 231 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
192 232 ], changesets.collect(&:revision)
193 233
194 234 # with path, branch and limit
195 235 changesets = @repository.latest_changesets('images', 'test_branch')
196 236 assert_equal [
197 237 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
198 238 '7234cb2750b63f47bff735edc50a1c0a433c2518',
199 239 ], changesets.collect(&:revision)
200 240
201 241 changesets = @repository.latest_changesets('images', 'test_branch', 1)
202 242 assert_equal [
203 243 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
204 244 ], changesets.collect(&:revision)
205 245
206 246 changesets = @repository.latest_changesets('README', 'test_branch')
207 247 assert_equal [
208 248 '713f4944648826f558cf548222f813dabe7cbb04',
209 249 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
210 250 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
211 251 '7234cb2750b63f47bff735edc50a1c0a433c2518',
212 252 ], changesets.collect(&:revision)
213 253
214 254 changesets = @repository.latest_changesets('README', 'test_branch', 2)
215 255 assert_equal [
216 256 '713f4944648826f558cf548222f813dabe7cbb04',
217 257 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
218 258 ], changesets.collect(&:revision)
219 259
220 260 # latin-1 encoding path
221 261 changesets = @repository.latest_changesets(
222 262 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
223 263 assert_equal [
224 264 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
225 265 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
226 266 ], changesets.collect(&:revision)
227 267
228 268 changesets = @repository.latest_changesets(
229 269 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
230 270 assert_equal [
231 271 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
232 272 ], changesets.collect(&:revision)
233 273 end
234 274
235 275 def test_latest_changesets_latin_1_dir
236 276 if WINDOWS_PASS
237 277 #
238 278 else
239 279 @repository.fetch_changesets
240 280 @repository.reload
241 281 changesets = @repository.latest_changesets(
242 282 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
243 283 assert_equal [
244 284 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
245 285 ], changesets.collect(&:revision)
246 286 end
247 287 end
248 288
249 289 def test_find_changeset_by_name
250 290 @repository.fetch_changesets
251 291 @repository.reload
252 292 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
253 293 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
254 294 @repository.find_changeset_by_name(r).revision
255 295 end
256 296 end
257 297
258 298 def test_find_changeset_by_empty_name
259 299 @repository.fetch_changesets
260 300 @repository.reload
261 301 ['', ' ', nil].each do |r|
262 302 assert_nil @repository.find_changeset_by_name(r)
263 303 end
264 304 end
265 305
266 306 def test_identifier
267 307 @repository.fetch_changesets
268 308 @repository.reload
269 309 c = @repository.changesets.find_by_revision(
270 310 '7234cb2750b63f47bff735edc50a1c0a433c2518')
271 311 assert_equal c.scmid, c.identifier
272 312 end
273 313
274 314 def test_format_identifier
275 315 @repository.fetch_changesets
276 316 @repository.reload
277 317 c = @repository.changesets.find_by_revision(
278 318 '7234cb2750b63f47bff735edc50a1c0a433c2518')
279 319 assert_equal '7234cb27', c.format_identifier
280 320 end
281 321
282 322 def test_activities
283 323 c = Changeset.new(:repository => @repository,
284 324 :committed_on => Time.now,
285 325 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
286 326 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
287 327 :comments => 'test')
288 328 assert c.event_title.include?('abc7234c:')
289 329 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
290 330 end
291 331
292 332 def test_log_utf8
293 333 @repository.fetch_changesets
294 334 @repository.reload
295 335 str_felix_hex = FELIX_HEX.dup
296 336 if str_felix_hex.respond_to?(:force_encoding)
297 337 str_felix_hex.force_encoding('UTF-8')
298 338 end
299 339 c = @repository.changesets.find_by_revision(
300 340 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
301 341 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
302 342 end
303 343
304 344 def test_previous
305 345 @repository.fetch_changesets
306 346 @repository.reload
307 347 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
308 348 changeset = @repository.find_changeset_by_name(r1)
309 349 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
310 350 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
311 351 end
312 352 end
313 353 end
314 354
315 355 def test_previous_nil
316 356 @repository.fetch_changesets
317 357 @repository.reload
318 358 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb2|.each do |r1|
319 359 changeset = @repository.find_changeset_by_name(r1)
320 360 assert_nil changeset.previous
321 361 end
322 362 end
323 363
324 364 def test_next
325 365 @repository.fetch_changesets
326 366 @repository.reload
327 367 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
328 368 changeset = @repository.find_changeset_by_name(r2)
329 369 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
330 370 assert_equal @repository.find_changeset_by_name(r1), changeset.next
331 371 end
332 372 end
333 373 end
334 374
335 375 def test_next_nil
336 376 @repository.fetch_changesets
337 377 @repository.reload
338 378 %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
339 379 changeset = @repository.find_changeset_by_name(r1)
340 380 assert_nil changeset.next
341 381 end
342 382 end
343 383 else
344 384 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
345 385 def test_fake; assert true end
346 386 end
347 387 end
General Comments 0
You need to be logged in to leave comments. Login now