##// END OF EJS Templates
scm: git: replace RAILS_ROOT to Rails.root in unit model test....
Toshi MARUYAMA -
r5924:8ca1d90980f8
parent child
Show More
@@ -1,452 +1,451
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 # No '..' in the repository path
24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
23 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
25 24 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
26 25
27 26 FELIX_HEX = "Felix Sch\xC3\xA4fer"
28 27 CHAR_1_HEX = "\xc3\x9c"
29 28
30 29 ## Ruby uses ANSI api to fork a process on Windows.
31 30 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
32 31 ## and these are incompatible with ASCII.
33 32 # WINDOWS_PASS = Redmine::Platform.mswin?
34 33 WINDOWS_PASS = false
35 34
36 35 ## Git, Mercurial and CVS path encodings are binary.
37 36 ## Subversion supports URL encoding for path.
38 37 ## Redmine Mercurial adapter and extension use URL encoding.
39 38 ## Git accepts only binary path in command line parameter.
40 39 ## So, there is no way to use binary command line parameter in JRuby.
41 40 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
42 41 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
43 42
44 43 if File.directory?(REPOSITORY_PATH)
45 44 def setup
46 45 klass = Repository::Git
47 46 assert_equal "Git", klass.scm_name
48 47 assert klass.scm_adapter_class
49 48 assert_not_equal "", klass.scm_command
50 49 assert_equal true, klass.scm_available
51 50
52 51 @project = Project.find(3)
53 52 @repository = Repository::Git.create(
54 53 :project => @project,
55 54 :url => REPOSITORY_PATH,
56 55 :path_encoding => 'ISO-8859-1'
57 56 )
58 57 assert @repository
59 58 @char_1 = CHAR_1_HEX.dup
60 59 if @char_1.respond_to?(:force_encoding)
61 60 @char_1.force_encoding('UTF-8')
62 61 end
63 62 end
64 63
65 64 def test_fetch_changesets_from_scratch
66 65 assert_nil @repository.extra_info
67 66
68 67 @repository.fetch_changesets
69 68 @repository.reload
70 69
71 70 assert_equal 21, @repository.changesets.count
72 71 assert_equal 33, @repository.changes.count
73 72
74 73 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
75 74 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
76 75 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
77 76 assert_equal User.find_by_login('jsmith'), commit.user
78 77 # TODO: add a commit with commit time <> author time to the test repository
79 78 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
80 79 assert_equal "2007-12-14".to_date, commit.commit_date
81 80 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
82 81 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
83 82 assert_equal 3, commit.changes.count
84 83 change = commit.changes.sort_by(&:path).first
85 84 assert_equal "README", change.path
86 85 assert_equal "A", change.action
87 86
88 87 assert_equal 4, @repository.extra_info["branches"].size
89 88 end
90 89
91 90 def test_fetch_changesets_incremental
92 91 @repository.fetch_changesets
93 92 @repository.reload
94 93 assert_equal 21, @repository.changesets.count
95 94 assert_equal 33, @repository.changes.count
96 95 extra_info_db = @repository.extra_info["branches"]
97 96 assert_equal 4, extra_info_db.size
98 97 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
99 98 extra_info_db["latin-1-path-encoding"]["last_scmid"]
100 99 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
101 100 extra_info_db["master"]["last_scmid"]
102 101
103 102 del_revs = [
104 103 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
105 104 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
106 105 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
107 106 "deff712f05a90d96edbd70facc47d944be5897e3",
108 107 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
109 108 "7e61ac704deecde634b51e59daa8110435dcb3da",
110 109 ]
111 110 @repository.changesets.each do |rev|
112 111 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
113 112 end
114 113 @repository.reload
115 114 cs1 = @repository.changesets
116 115 assert_equal 15, cs1.count
117 116 h = @repository.extra_info.dup
118 117 h["branches"]["master"]["last_scmid"] =
119 118 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
120 119 @repository.merge_extra_info(h)
121 120 @repository.save
122 121 @repository.reload
123 122 extra_info_db_1 = @repository.extra_info["branches"]
124 123 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
125 124 extra_info_db_1["master"]["last_scmid"]
126 125
127 126 @repository.fetch_changesets
128 127 assert_equal 21, @repository.changesets.count
129 128 end
130 129
131 130 def test_fetch_changesets_invalid_rev
132 131 @repository.fetch_changesets
133 132 @repository.reload
134 133 assert_equal 21, @repository.changesets.count
135 134 assert_equal 33, @repository.changes.count
136 135 extra_info_db = @repository.extra_info["branches"]
137 136 assert_equal 4, extra_info_db.size
138 137 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
139 138 extra_info_db["latin-1-path-encoding"]["last_scmid"]
140 139 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
141 140 extra_info_db["master"]["last_scmid"]
142 141
143 142 del_revs = [
144 143 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
145 144 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
146 145 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
147 146 "deff712f05a90d96edbd70facc47d944be5897e3",
148 147 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
149 148 "7e61ac704deecde634b51e59daa8110435dcb3da",
150 149 ]
151 150 @repository.changesets.each do |rev|
152 151 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
153 152 end
154 153 @repository.reload
155 154 cs1 = @repository.changesets
156 155 assert_equal 15, cs1.count
157 156 h = @repository.extra_info.dup
158 157 h["branches"]["master"]["last_scmid"] =
159 158 "abcd1234efgh"
160 159 @repository.merge_extra_info(h)
161 160 @repository.save
162 161 @repository.reload
163 162 extra_info_db_1 = @repository.extra_info["branches"]
164 163 assert_equal "abcd1234efgh",
165 164 extra_info_db_1["master"]["last_scmid"]
166 165
167 166 @repository.fetch_changesets
168 167 assert_equal 15, @repository.changesets.count
169 168 end
170 169
171 170 def test_db_consistent_ordering_init
172 171 assert_nil @repository.extra_info
173 172 @repository.fetch_changesets
174 173 @repository.reload
175 174 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
176 175 end
177 176
178 177 def test_db_consistent_ordering_before_1_2
179 178 assert_nil @repository.extra_info
180 179 @repository.fetch_changesets
181 180 @repository.reload
182 181 assert_equal 21, @repository.changesets.count
183 182 assert_not_nil @repository.extra_info
184 183 @repository.write_attribute(:extra_info, nil)
185 184 @repository.save
186 185 assert_nil @repository.extra_info
187 186 assert_equal 21, @repository.changesets.count
188 187 @repository.fetch_changesets
189 188 @repository.reload
190 189 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
191 190
192 191 del_revs = [
193 192 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
194 193 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
195 194 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
196 195 "deff712f05a90d96edbd70facc47d944be5897e3",
197 196 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
198 197 "7e61ac704deecde634b51e59daa8110435dcb3da",
199 198 ]
200 199 @repository.changesets.each do |rev|
201 200 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
202 201 end
203 202 @repository.reload
204 203 cs1 = @repository.changesets
205 204 assert_equal 15, cs1.count
206 205 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
207 206 h = @repository.extra_info.dup
208 207 h["branches"]["master"]["last_scmid"] =
209 208 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
210 209 @repository.merge_extra_info(h)
211 210 @repository.save
212 211 @repository.reload
213 212 extra_info_db_1 = @repository.extra_info["branches"]
214 213 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
215 214 extra_info_db_1["master"]["last_scmid"]
216 215
217 216 @repository.fetch_changesets
218 217 assert_equal 21, @repository.changesets.count
219 218 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
220 219 end
221 220
222 221 def test_latest_changesets
223 222 @repository.fetch_changesets
224 223 @repository.reload
225 224 # with limit
226 225 changesets = @repository.latest_changesets('', nil, 2)
227 226 assert_equal 2, changesets.size
228 227
229 228 # with path
230 229 changesets = @repository.latest_changesets('images', nil)
231 230 assert_equal [
232 231 'deff712f05a90d96edbd70facc47d944be5897e3',
233 232 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
234 233 '7234cb2750b63f47bff735edc50a1c0a433c2518',
235 234 ], changesets.collect(&:revision)
236 235
237 236 changesets = @repository.latest_changesets('README', nil)
238 237 assert_equal [
239 238 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
240 239 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
241 240 '713f4944648826f558cf548222f813dabe7cbb04',
242 241 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
243 242 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
244 243 '7234cb2750b63f47bff735edc50a1c0a433c2518',
245 244 ], changesets.collect(&:revision)
246 245
247 246 # with path, revision and limit
248 247 changesets = @repository.latest_changesets('images', '899a15dba')
249 248 assert_equal [
250 249 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
251 250 '7234cb2750b63f47bff735edc50a1c0a433c2518',
252 251 ], changesets.collect(&:revision)
253 252
254 253 changesets = @repository.latest_changesets('images', '899a15dba', 1)
255 254 assert_equal [
256 255 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
257 256 ], changesets.collect(&:revision)
258 257
259 258 changesets = @repository.latest_changesets('README', '899a15dba')
260 259 assert_equal [
261 260 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
262 261 '7234cb2750b63f47bff735edc50a1c0a433c2518',
263 262 ], changesets.collect(&:revision)
264 263
265 264 changesets = @repository.latest_changesets('README', '899a15dba', 1)
266 265 assert_equal [
267 266 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
268 267 ], changesets.collect(&:revision)
269 268
270 269 # with path, tag and limit
271 270 changesets = @repository.latest_changesets('images', 'tag01.annotated')
272 271 assert_equal [
273 272 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
274 273 '7234cb2750b63f47bff735edc50a1c0a433c2518',
275 274 ], changesets.collect(&:revision)
276 275
277 276 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
278 277 assert_equal [
279 278 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
280 279 ], changesets.collect(&:revision)
281 280
282 281 changesets = @repository.latest_changesets('README', 'tag01.annotated')
283 282 assert_equal [
284 283 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
285 284 '7234cb2750b63f47bff735edc50a1c0a433c2518',
286 285 ], changesets.collect(&:revision)
287 286
288 287 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
289 288 assert_equal [
290 289 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
291 290 ], changesets.collect(&:revision)
292 291
293 292 # with path, branch and limit
294 293 changesets = @repository.latest_changesets('images', 'test_branch')
295 294 assert_equal [
296 295 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
297 296 '7234cb2750b63f47bff735edc50a1c0a433c2518',
298 297 ], changesets.collect(&:revision)
299 298
300 299 changesets = @repository.latest_changesets('images', 'test_branch', 1)
301 300 assert_equal [
302 301 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
303 302 ], changesets.collect(&:revision)
304 303
305 304 changesets = @repository.latest_changesets('README', 'test_branch')
306 305 assert_equal [
307 306 '713f4944648826f558cf548222f813dabe7cbb04',
308 307 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
309 308 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
310 309 '7234cb2750b63f47bff735edc50a1c0a433c2518',
311 310 ], changesets.collect(&:revision)
312 311
313 312 changesets = @repository.latest_changesets('README', 'test_branch', 2)
314 313 assert_equal [
315 314 '713f4944648826f558cf548222f813dabe7cbb04',
316 315 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
317 316 ], changesets.collect(&:revision)
318 317
319 318 if JRUBY_SKIP
320 319 puts JRUBY_SKIP_STR
321 320 else
322 321 # latin-1 encoding path
323 322 changesets = @repository.latest_changesets(
324 323 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
325 324 assert_equal [
326 325 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
327 326 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
328 327 ], changesets.collect(&:revision)
329 328
330 329 changesets = @repository.latest_changesets(
331 330 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
332 331 assert_equal [
333 332 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
334 333 ], changesets.collect(&:revision)
335 334 end
336 335 end
337 336
338 337 def test_latest_changesets_latin_1_dir
339 338 if WINDOWS_PASS
340 339 #
341 340 elsif JRUBY_SKIP
342 341 puts JRUBY_SKIP_STR
343 342 else
344 343 @repository.fetch_changesets
345 344 @repository.reload
346 345 changesets = @repository.latest_changesets(
347 346 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
348 347 assert_equal [
349 348 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
350 349 ], changesets.collect(&:revision)
351 350 end
352 351 end
353 352
354 353 def test_find_changeset_by_name
355 354 @repository.fetch_changesets
356 355 @repository.reload
357 356 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
358 357 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
359 358 @repository.find_changeset_by_name(r).revision
360 359 end
361 360 end
362 361
363 362 def test_find_changeset_by_empty_name
364 363 @repository.fetch_changesets
365 364 @repository.reload
366 365 ['', ' ', nil].each do |r|
367 366 assert_nil @repository.find_changeset_by_name(r)
368 367 end
369 368 end
370 369
371 370 def test_identifier
372 371 @repository.fetch_changesets
373 372 @repository.reload
374 373 c = @repository.changesets.find_by_revision(
375 374 '7234cb2750b63f47bff735edc50a1c0a433c2518')
376 375 assert_equal c.scmid, c.identifier
377 376 end
378 377
379 378 def test_format_identifier
380 379 @repository.fetch_changesets
381 380 @repository.reload
382 381 c = @repository.changesets.find_by_revision(
383 382 '7234cb2750b63f47bff735edc50a1c0a433c2518')
384 383 assert_equal '7234cb27', c.format_identifier
385 384 end
386 385
387 386 def test_activities
388 387 c = Changeset.new(:repository => @repository,
389 388 :committed_on => Time.now,
390 389 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
391 390 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
392 391 :comments => 'test')
393 392 assert c.event_title.include?('abc7234c:')
394 393 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
395 394 end
396 395
397 396 def test_log_utf8
398 397 @repository.fetch_changesets
399 398 @repository.reload
400 399 str_felix_hex = FELIX_HEX.dup
401 400 if str_felix_hex.respond_to?(:force_encoding)
402 401 str_felix_hex.force_encoding('UTF-8')
403 402 end
404 403 c = @repository.changesets.find_by_revision(
405 404 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
406 405 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
407 406 end
408 407
409 408 def test_previous
410 409 @repository.fetch_changesets
411 410 @repository.reload
412 411 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
413 412 changeset = @repository.find_changeset_by_name(r1)
414 413 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
415 414 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
416 415 end
417 416 end
418 417 end
419 418
420 419 def test_previous_nil
421 420 @repository.fetch_changesets
422 421 @repository.reload
423 422 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb2|.each do |r1|
424 423 changeset = @repository.find_changeset_by_name(r1)
425 424 assert_nil changeset.previous
426 425 end
427 426 end
428 427
429 428 def test_next
430 429 @repository.fetch_changesets
431 430 @repository.reload
432 431 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
433 432 changeset = @repository.find_changeset_by_name(r2)
434 433 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
435 434 assert_equal @repository.find_changeset_by_name(r1), changeset.next
436 435 end
437 436 end
438 437 end
439 438
440 439 def test_next_nil
441 440 @repository.fetch_changesets
442 441 @repository.reload
443 442 %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
444 443 changeset = @repository.find_changeset_by_name(r1)
445 444 assert_nil changeset.next
446 445 end
447 446 end
448 447 else
449 448 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
450 449 def test_fake; assert true end
451 450 end
452 451 end
General Comments 0
You need to be logged in to leave comments. Login now