1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# redMine - project management software
# Copyright (C) 2006-2007 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.expand_path('../../test_helper', __FILE__)
class RepositoryGitTest < ActiveSupport::TestCase
fixtures :projects, :repositories, :enabled_modules, :users, :roles
# No '..' in the repository path
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
FELIX_HEX = "Felix Sch\xC3\xA4fer"
def setup
Setting.commit_logs_encoding = 'UTF-8'
@project = Project.find(3)
@repository = Repository::Git.create(:project => @project, :url => REPOSITORY_PATH)
assert @repository
end
if File.directory?(REPOSITORY_PATH)
def test_fetch_changesets_from_scratch
@repository.fetch_changesets
@repository.reload
assert_equal 21, @repository.changesets.count
assert_equal 31, @repository.changes.count
commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
assert_equal "jsmith <jsmith@foo.bar>", commit.committer
assert_equal User.find_by_login('jsmith'), commit.user
# TODO: add a commit with commit time <> author time to the test repository
assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
assert_equal "2007-12-14".to_date, commit.commit_date
assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
assert_equal 3, commit.changes.count
change = commit.changes.sort_by(&:path).first
assert_equal "README", change.path
assert_equal "A", change.action
end
def test_fetch_changesets_incremental
@repository.fetch_changesets
# Remove the 3 latest changesets
@repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 8).each(&:destroy)
@repository.reload
cs1 = @repository.changesets
assert_equal 13, cs1.count
rev_a_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.revision
# Mon Jul 5 22:34:26 2010 +0200
rev_a_committed_on = Time.gm(2010, 7, 5, 20, 34, 26)
assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.scmid
assert_equal rev_a_committed_on, rev_a_commit.committed_on
latest_rev = @repository.latest_changeset
assert_equal rev_a_committed_on, latest_rev.committed_on
@repository.fetch_changesets
assert_equal 21, @repository.changesets.count
end
def test_find_changeset_by_name
@repository.fetch_changesets
@repository.reload
['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
@repository.find_changeset_by_name(r).revision
end
end
def test_find_changeset_by_empty_name
@repository.fetch_changesets
@repository.reload
['', ' ', nil].each do |r|
assert_nil @repository.find_changeset_by_name(r)
end
end
def test_identifier
@repository.fetch_changesets
@repository.reload
c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
assert_equal c.scmid, c.identifier
end
def test_format_identifier
@repository.fetch_changesets
@repository.reload
c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
assert_equal '7234cb27', c.format_identifier
end
def test_activities
c = Changeset.new(:repository => @repository,
:committed_on => Time.now,
:revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
:scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
:comments => 'test')
assert c.event_title.include?('abc7234c:')
assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
end
def test_log_utf8
@repository.fetch_changesets
@repository.reload
str_felix_hex = FELIX_HEX
if str_felix_hex.respond_to?(:force_encoding)
str_felix_hex.force_encoding('UTF-8')
end
c = @repository.changesets.find_by_revision('ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
end
else
puts "Git test repository NOT FOUND. Skipping unit tests !!!"
def test_fake; assert true end
end
end
|