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