Chris@441
|
1 # Redmine - project management software
|
Chris@1494
|
2 # Copyright (C) 2006-2014 Jean-Philippe Lang
|
Chris@0
|
3 #
|
Chris@0
|
4 # This program is free software; you can redistribute it and/or
|
Chris@0
|
5 # modify it under the terms of the GNU General Public License
|
Chris@0
|
6 # as published by the Free Software Foundation; either version 2
|
Chris@0
|
7 # of the License, or (at your option) any later version.
|
Chris@441
|
8 #
|
Chris@0
|
9 # This program is distributed in the hope that it will be useful,
|
Chris@0
|
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Chris@0
|
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Chris@0
|
12 # GNU General Public License for more details.
|
Chris@441
|
13 #
|
Chris@0
|
14 # You should have received a copy of the GNU General Public License
|
Chris@0
|
15 # along with this program; if not, write to the Free Software
|
Chris@0
|
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
Chris@0
|
17
|
Chris@119
|
18 require File.expand_path('../../test_helper', __FILE__)
|
Chris@0
|
19
|
Chris@0
|
20 class RepositoryMercurialTest < ActiveSupport::TestCase
|
Chris@0
|
21 fixtures :projects
|
Chris@441
|
22
|
Chris@1115
|
23 include Redmine::I18n
|
Chris@1115
|
24
|
Chris@909
|
25 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
|
Chris@1494
|
26 NUM_REV = 34
|
Chris@441
|
27 CHAR_1_HEX = "\xc3\x9c"
|
Chris@245
|
28
|
Chris@1115
|
29 def setup
|
Chris@1115
|
30 @project = Project.find(3)
|
Chris@1115
|
31 @repository = Repository::Mercurial.create(
|
Chris@1115
|
32 :project => @project,
|
Chris@1115
|
33 :url => REPOSITORY_PATH,
|
Chris@1115
|
34 :path_encoding => 'ISO-8859-1'
|
Chris@1115
|
35 )
|
Chris@1115
|
36 assert @repository
|
Chris@1115
|
37 @char_1 = CHAR_1_HEX.dup
|
Chris@1115
|
38 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
|
Chris@1115
|
39 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
|
Chris@1115
|
40 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
|
Chris@1115
|
41 if @char_1.respond_to?(:force_encoding)
|
Chris@1115
|
42 @char_1.force_encoding('UTF-8')
|
Chris@1115
|
43 @tag_char_1.force_encoding('UTF-8')
|
Chris@1115
|
44 @branch_char_0.force_encoding('UTF-8')
|
Chris@1115
|
45 @branch_char_1.force_encoding('UTF-8')
|
Chris@1115
|
46 end
|
Chris@1115
|
47 end
|
Chris@1115
|
48
|
Chris@1115
|
49 def test_blank_path_to_repository_error_message
|
Chris@1115
|
50 set_language_if_valid 'en'
|
Chris@1115
|
51 repo = Repository::Mercurial.new(
|
Chris@1115
|
52 :project => @project,
|
Chris@1115
|
53 :identifier => 'test'
|
Chris@1115
|
54 )
|
Chris@1115
|
55 assert !repo.save
|
Chris@1115
|
56 assert_include "Path to repository can't be blank",
|
Chris@1115
|
57 repo.errors.full_messages
|
Chris@1115
|
58 end
|
Chris@1115
|
59
|
Chris@1115
|
60 def test_blank_path_to_repository_error_message_fr
|
Chris@1115
|
61 set_language_if_valid 'fr'
|
Chris@1115
|
62 str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)"
|
Chris@1115
|
63 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
|
Chris@1115
|
64 repo = Repository::Mercurial.new(
|
Chris@1115
|
65 :project => @project,
|
Chris@1115
|
66 :url => "",
|
Chris@1115
|
67 :identifier => 'test',
|
Chris@1115
|
68 :path_encoding => ''
|
Chris@1115
|
69 )
|
Chris@1115
|
70 assert !repo.save
|
Chris@1115
|
71 assert_include str, repo.errors.full_messages
|
Chris@1115
|
72 end
|
Chris@1115
|
73
|
Chris@441
|
74 if File.directory?(REPOSITORY_PATH)
|
Chris@1115
|
75 def test_scm_available
|
Chris@441
|
76 klass = Repository::Mercurial
|
Chris@441
|
77 assert_equal "Mercurial", klass.scm_name
|
Chris@441
|
78 assert klass.scm_adapter_class
|
Chris@441
|
79 assert_not_equal "", klass.scm_command
|
Chris@441
|
80 assert_equal true, klass.scm_available
|
Chris@1115
|
81 end
|
Chris@441
|
82
|
Chris@1517
|
83 def test_entries_on_tip
|
Chris@1115
|
84 entries = @repository.entries
|
Chris@1115
|
85 assert_kind_of Redmine::Scm::Adapters::Entries, entries
|
Chris@441
|
86 end
|
Chris@441
|
87
|
Chris@1517
|
88 def assert_entries(is_short_scmid=true)
|
Chris@1517
|
89 hex = "9d5b5b00419901478496242e0768deba1ce8c51e"
|
Chris@1517
|
90 scmid = scmid_for_assert(hex, is_short_scmid)
|
Chris@1517
|
91 [2, '400bb8672109', '400', 400].each do |r|
|
Chris@1517
|
92 entries1 = @repository.entries(nil, r)
|
Chris@1517
|
93 assert entries1
|
Chris@1517
|
94 assert_kind_of Redmine::Scm::Adapters::Entries, entries1
|
Chris@1517
|
95 assert_equal 3, entries1.size
|
Chris@1517
|
96 readme = entries1[2]
|
Chris@1517
|
97 assert_equal '1', readme.lastrev.revision
|
Chris@1517
|
98 assert_equal scmid, readme.lastrev.identifier
|
Chris@1517
|
99 assert_equal '1', readme.changeset.revision
|
Chris@1517
|
100 assert_equal scmid, readme.changeset.scmid
|
Chris@1517
|
101 end
|
Chris@1517
|
102 end
|
Chris@1517
|
103 private :assert_entries
|
Chris@1517
|
104
|
Chris@1517
|
105 def test_entries_short_id
|
Chris@1517
|
106 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
107 create_rev0_short_id
|
Chris@1517
|
108 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
109 @repository.fetch_changesets
|
Chris@1517
|
110 @project.reload
|
Chris@1517
|
111 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
112 assert_entries(true)
|
Chris@1517
|
113 end
|
Chris@1517
|
114
|
Chris@1517
|
115 def test_entries_long_id
|
Chris@1517
|
116 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
117 @repository.fetch_changesets
|
Chris@1517
|
118 @project.reload
|
Chris@1517
|
119 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
120 assert_entries(false)
|
Chris@1517
|
121 end
|
Chris@1517
|
122
|
Chris@1517
|
123 def test_entry_on_tip
|
Chris@1517
|
124 entry = @repository.entry
|
Chris@1517
|
125 assert_kind_of Redmine::Scm::Adapters::Entry, entry
|
Chris@1517
|
126 assert_equal "", entry.path
|
Chris@1517
|
127 assert_equal 'dir', entry.kind
|
Chris@1517
|
128 end
|
Chris@1517
|
129
|
Chris@1517
|
130 def assert_entry(is_short_scmid=true)
|
Chris@1517
|
131 hex = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
|
Chris@1517
|
132 scmid = scmid_for_assert(hex, is_short_scmid)
|
Chris@1517
|
133 ["README", "/README"].each do |path|
|
Chris@1517
|
134 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
|
Chris@1517
|
135 entry = @repository.entry(path, rev)
|
Chris@1517
|
136 assert_kind_of Redmine::Scm::Adapters::Entry, entry
|
Chris@1517
|
137 assert_equal "README", entry.path
|
Chris@1517
|
138 assert_equal "file", entry.kind
|
Chris@1517
|
139 assert_equal '0', entry.lastrev.revision
|
Chris@1517
|
140 assert_equal scmid, entry.lastrev.identifier
|
Chris@1517
|
141 end
|
Chris@1517
|
142 end
|
Chris@1517
|
143 ["sources", "/sources", "/sources/"].each do |path|
|
Chris@1517
|
144 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
|
Chris@1517
|
145 entry = @repository.entry(path, rev)
|
Chris@1517
|
146 assert_kind_of Redmine::Scm::Adapters::Entry, entry
|
Chris@1517
|
147 assert_equal "sources", entry.path
|
Chris@1517
|
148 assert_equal "dir", entry.kind
|
Chris@1517
|
149 end
|
Chris@1517
|
150 end
|
Chris@1517
|
151 ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
|
Chris@1517
|
152 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
|
Chris@1517
|
153 entry = @repository.entry(path, rev)
|
Chris@1517
|
154 assert_kind_of Redmine::Scm::Adapters::Entry, entry
|
Chris@1517
|
155 assert_equal "sources/watchers_controller.rb", entry.path
|
Chris@1517
|
156 assert_equal "file", entry.kind
|
Chris@1517
|
157 assert_equal '0', entry.lastrev.revision
|
Chris@1517
|
158 assert_equal scmid, entry.lastrev.identifier
|
Chris@1517
|
159 end
|
Chris@1517
|
160 end
|
Chris@1517
|
161 end
|
Chris@1517
|
162 private :assert_entry
|
Chris@1517
|
163
|
Chris@1517
|
164 def test_entry_short_id
|
Chris@1517
|
165 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
166 create_rev0_short_id
|
Chris@1517
|
167 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
168 assert_entry(true)
|
Chris@1517
|
169 end
|
Chris@1517
|
170
|
Chris@1517
|
171 def test_entry_long_id
|
Chris@1517
|
172 assert_entry(false)
|
Chris@1517
|
173 end
|
Chris@1517
|
174
|
Chris@0
|
175 def test_fetch_changesets_from_scratch
|
Chris@909
|
176 assert_equal 0, @repository.changesets.count
|
Chris@0
|
177 @repository.fetch_changesets
|
Chris@909
|
178 @project.reload
|
Chris@909
|
179 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1115
|
180 assert_equal 46, @repository.filechanges.count
|
Chris@1517
|
181 rev0 = @repository.changesets.find_by_revision('0')
|
Chris@119
|
182 assert_equal "Initial import.\nThe repository contains 3 files.",
|
Chris@1517
|
183 rev0.comments
|
Chris@1517
|
184 assert_equal "0885933ad4f68d77c2649cd11f8311276e7ef7ce", rev0.scmid
|
Chris@1517
|
185 first_rev = @repository.changesets.first
|
Chris@1517
|
186 last_rev = @repository.changesets.last
|
Chris@1517
|
187 assert_equal "#{NUM_REV - 1}", first_rev.revision
|
Chris@1517
|
188 assert_equal "0", last_rev.revision
|
Chris@1517
|
189 end
|
Chris@1517
|
190
|
Chris@1517
|
191 def test_fetch_changesets_keep_short_id
|
Chris@1517
|
192 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
193 create_rev0_short_id
|
Chris@1517
|
194 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
195 @repository.fetch_changesets
|
Chris@1517
|
196 @project.reload
|
Chris@1517
|
197 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
198 rev1 = @repository.changesets.find_by_revision('1')
|
Chris@1517
|
199 assert_equal "9d5b5b004199", rev1.scmid
|
Chris@1517
|
200 end
|
Chris@1517
|
201
|
Chris@1517
|
202 def test_fetch_changesets_keep_long_id
|
Chris@1517
|
203 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
204 Changeset.create!(:repository => @repository,
|
Chris@1517
|
205 :committed_on => Time.now,
|
Chris@1517
|
206 :revision => '0',
|
Chris@1517
|
207 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
|
Chris@1517
|
208 :comments => 'test')
|
Chris@1517
|
209 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
210 @repository.fetch_changesets
|
Chris@1517
|
211 @project.reload
|
Chris@1517
|
212 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
213 rev1 = @repository.changesets.find_by_revision('1')
|
Chris@1517
|
214 assert_equal "9d5b5b00419901478496242e0768deba1ce8c51e", rev1.scmid
|
Chris@0
|
215 end
|
Chris@245
|
216
|
Chris@0
|
217 def test_fetch_changesets_incremental
|
Chris@909
|
218 assert_equal 0, @repository.changesets.count
|
Chris@0
|
219 @repository.fetch_changesets
|
Chris@909
|
220 @project.reload
|
Chris@909
|
221 assert_equal NUM_REV, @repository.changesets.count
|
Chris@0
|
222 # Remove changesets with revision > 2
|
Chris@1517
|
223 @repository.changesets.each {|c| c.destroy if c.revision.to_i > 2}
|
Chris@909
|
224 @project.reload
|
Chris@1517
|
225 @repository.reload
|
Chris@0
|
226 assert_equal 3, @repository.changesets.count
|
Chris@441
|
227
|
Chris@0
|
228 @repository.fetch_changesets
|
Chris@909
|
229 @project.reload
|
Chris@909
|
230 assert_equal NUM_REV, @repository.changesets.count
|
Chris@0
|
231 end
|
Chris@0
|
232
|
Chris@119
|
233 def test_isodatesec
|
Chris@119
|
234 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
|
Chris@119
|
235 if @repository.scm.class.client_version_above?([1, 0])
|
Chris@909
|
236 assert_equal 0, @repository.changesets.count
|
Chris@119
|
237 @repository.fetch_changesets
|
Chris@909
|
238 @project.reload
|
Chris@909
|
239 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
240 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
|
Chris@119
|
241 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
|
Chris@119
|
242 end
|
Chris@0
|
243 end
|
Chris@0
|
244
|
Chris@119
|
245 def test_changeset_order_by_revision
|
Chris@909
|
246 assert_equal 0, @repository.changesets.count
|
Chris@119
|
247 @repository.fetch_changesets
|
Chris@909
|
248 @project.reload
|
Chris@909
|
249 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
250
|
Chris@119
|
251 c0 = @repository.latest_changeset
|
Chris@119
|
252 c1 = @repository.changesets.find_by_revision('0')
|
Chris@119
|
253 # sorted by revision (id), not by date
|
Chris@119
|
254 assert c0.revision.to_i > c1.revision.to_i
|
Chris@119
|
255 assert c0.committed_on < c1.committed_on
|
Chris@119
|
256 end
|
Chris@119
|
257
|
Chris@119
|
258 def test_latest_changesets
|
Chris@909
|
259 assert_equal 0, @repository.changesets.count
|
Chris@119
|
260 @repository.fetch_changesets
|
Chris@909
|
261 @project.reload
|
Chris@909
|
262 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
263
|
Chris@119
|
264 # with_limit
|
Chris@119
|
265 changesets = @repository.latest_changesets('', nil, 2)
|
Chris@1494
|
266 assert_equal ["#{NUM_REV - 1}", "#{NUM_REV - 2}"], changesets.collect(&:revision)
|
Chris@119
|
267
|
Chris@119
|
268 # with_filepath
|
Chris@441
|
269 changesets = @repository.latest_changesets(
|
Chris@441
|
270 '/sql_escape/percent%dir/percent%file1.txt', nil)
|
Chris@909
|
271 assert_equal %w|30 11 10 9|, changesets.collect(&:revision)
|
Chris@119
|
272
|
Chris@441
|
273 changesets = @repository.latest_changesets(
|
Chris@441
|
274 '/sql_escape/underscore_dir/understrike_file.txt', nil)
|
Chris@909
|
275 assert_equal %w|30 12 9|, changesets.collect(&:revision)
|
Chris@441
|
276
|
Chris@441
|
277 changesets = @repository.latest_changesets('README', nil)
|
Chris@909
|
278 assert_equal %w|31 30 28 17 8 6 1 0|, changesets.collect(&:revision)
|
Chris@441
|
279
|
Chris@441
|
280 changesets = @repository.latest_changesets('README','8')
|
Chris@441
|
281 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
|
Chris@441
|
282
|
Chris@441
|
283 changesets = @repository.latest_changesets('README','8', 2)
|
Chris@441
|
284 assert_equal %w|8 6|, changesets.collect(&:revision)
|
Chris@441
|
285
|
Chris@441
|
286 # with_dirpath
|
Chris@441
|
287 changesets = @repository.latest_changesets('images', nil)
|
Chris@441
|
288 assert_equal %w|1 0|, changesets.collect(&:revision)
|
Chris@441
|
289
|
Chris@441
|
290 path = 'sql_escape/percent%dir'
|
Chris@441
|
291 changesets = @repository.latest_changesets(path, nil)
|
Chris@909
|
292 assert_equal %w|30 13 11 10 9|, changesets.collect(&:revision)
|
Chris@441
|
293
|
Chris@441
|
294 changesets = @repository.latest_changesets(path, '11')
|
Chris@441
|
295 assert_equal %w|11 10 9|, changesets.collect(&:revision)
|
Chris@441
|
296
|
Chris@441
|
297 changesets = @repository.latest_changesets(path, '11', 2)
|
Chris@441
|
298 assert_equal %w|11 10|, changesets.collect(&:revision)
|
Chris@441
|
299
|
Chris@441
|
300 path = 'sql_escape/underscore_dir'
|
Chris@441
|
301 changesets = @repository.latest_changesets(path, nil)
|
Chris@909
|
302 assert_equal %w|30 13 12 9|, changesets.collect(&:revision)
|
Chris@441
|
303
|
Chris@441
|
304 changesets = @repository.latest_changesets(path, '12')
|
Chris@441
|
305 assert_equal %w|12 9|, changesets.collect(&:revision)
|
Chris@441
|
306
|
Chris@441
|
307 changesets = @repository.latest_changesets(path, '12', 1)
|
Chris@441
|
308 assert_equal %w|12|, changesets.collect(&:revision)
|
Chris@1517
|
309 end
|
Chris@441
|
310
|
Chris@1517
|
311 def assert_latest_changesets_tag
|
Chris@441
|
312 changesets = @repository.latest_changesets('', 'tag_test.00')
|
Chris@441
|
313 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
|
Chris@1517
|
314 end
|
Chris@1517
|
315 private :assert_latest_changesets_tag
|
Chris@1517
|
316
|
Chris@1517
|
317 def test_latest_changesets_tag
|
Chris@1517
|
318 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
319 @repository.fetch_changesets
|
Chris@1517
|
320 @project.reload
|
Chris@1517
|
321 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
322 assert_latest_changesets_tag
|
Chris@1517
|
323 end
|
Chris@1517
|
324
|
Chris@1517
|
325 def test_latest_changesets_tag_short_id
|
Chris@1517
|
326 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
327 create_rev0_short_id
|
Chris@1517
|
328 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
329 @repository.fetch_changesets
|
Chris@1517
|
330 @project.reload
|
Chris@1517
|
331 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
332 assert_latest_changesets_tag
|
Chris@1517
|
333 end
|
Chris@1517
|
334
|
Chris@1517
|
335 def test_latest_changesets_tag_with_path
|
Chris@1517
|
336 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
337 @repository.fetch_changesets
|
Chris@1517
|
338 @project.reload
|
Chris@1517
|
339 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
340
|
Chris@1517
|
341 changesets = @repository.latest_changesets('sources', 'tag_test.00')
|
Chris@1517
|
342 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
|
Chris@1517
|
343 end
|
Chris@1517
|
344
|
Chris@1517
|
345 def test_latest_changesets_tag_with_limit
|
Chris@1517
|
346 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
347 @repository.fetch_changesets
|
Chris@1517
|
348 @project.reload
|
Chris@1517
|
349 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
350
|
Chris@441
|
351 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
|
Chris@441
|
352 assert_equal %w|5 4|, changesets.collect(&:revision)
|
Chris@441
|
353
|
Chris@441
|
354 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
|
Chris@441
|
355 assert_equal %w|4 3|, changesets.collect(&:revision)
|
Chris@1517
|
356 end
|
Chris@441
|
357
|
Chris@1517
|
358 def test_latest_changesets_branch
|
Chris@1517
|
359 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
360 @repository.fetch_changesets
|
Chris@1517
|
361 @project.reload
|
Chris@1517
|
362 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
363
|
Chris@909
|
364 if @repository.scm.class.client_version_above?([1, 6])
|
Chris@909
|
365 changesets = @repository.latest_changesets('', @branch_char_1)
|
Chris@909
|
366 assert_equal %w|27 26|, changesets.collect(&:revision)
|
Chris@909
|
367 end
|
Chris@441
|
368
|
Chris@441
|
369 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
|
Chris@441
|
370 assert_equal %w|27|, changesets.collect(&:revision)
|
Chris@119
|
371 end
|
Chris@119
|
372
|
Chris@1517
|
373 def assert_latest_changesets_default_branch
|
Chris@1517
|
374 changesets = @repository.latest_changesets('', 'default')
|
Chris@1517
|
375 assert_equal %w|31 28 24 6 4 3 2 1 0|, changesets.collect(&:revision)
|
Chris@1517
|
376 end
|
Chris@1517
|
377 private :assert_latest_changesets_default_branch
|
Chris@1517
|
378
|
Chris@1517
|
379 def test_latest_changesets_default_branch
|
Chris@909
|
380 assert_equal 0, @repository.changesets.count
|
Chris@119
|
381 @repository.fetch_changesets
|
Chris@909
|
382 @project.reload
|
Chris@909
|
383 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
384 assert_latest_changesets_default_branch
|
Chris@1517
|
385 end
|
Chris@119
|
386
|
Chris@1517
|
387 def test_latest_changesets_default_branch_short_id
|
Chris@1517
|
388 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
389 create_rev0_short_id
|
Chris@1517
|
390 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
391 @repository.fetch_changesets
|
Chris@1517
|
392 @project.reload
|
Chris@1517
|
393 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
394 assert_latest_changesets_default_branch
|
Chris@1517
|
395 end
|
Chris@1517
|
396
|
Chris@1517
|
397 def assert_copied_files(is_short_scmid=true)
|
Chris@119
|
398 cs1 = @repository.changesets.find_by_revision('13')
|
Chris@119
|
399 assert_not_nil cs1
|
Chris@1115
|
400 c1 = cs1.filechanges.sort_by(&:path)
|
Chris@119
|
401 assert_equal 2, c1.size
|
Chris@119
|
402
|
Chris@1517
|
403 hex1 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
|
Chris@1517
|
404 scmid1 = scmid_for_assert(hex1, is_short_scmid)
|
Chris@119
|
405 assert_equal 'A', c1[0].action
|
Chris@119
|
406 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
|
Chris@119
|
407 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
|
Chris@1517
|
408 assert_equal scmid1, c1[0].from_revision
|
Chris@119
|
409
|
Chris@119
|
410 assert_equal 'A', c1[1].action
|
Chris@119
|
411 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
|
Chris@119
|
412 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
|
Chris@119
|
413
|
Chris@119
|
414 cs2 = @repository.changesets.find_by_revision('15')
|
Chris@1115
|
415 c2 = cs2.filechanges
|
Chris@119
|
416 assert_equal 1, c2.size
|
Chris@119
|
417
|
Chris@1517
|
418 hex2 = "933ca60293d78f7c7979dd123cc0c02431683575"
|
Chris@1517
|
419 scmid2 = scmid_for_assert(hex2, is_short_scmid)
|
Chris@119
|
420 assert_equal 'A', c2[0].action
|
Chris@119
|
421 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
|
Chris@119
|
422 assert_equal '/README', c2[0].from_path
|
Chris@1517
|
423 assert_equal scmid2, c2[0].from_revision
|
Chris@441
|
424
|
Chris@441
|
425 cs3 = @repository.changesets.find_by_revision('19')
|
Chris@1115
|
426 c3 = cs3.filechanges
|
Chris@1517
|
427
|
Chris@1517
|
428 hex3 = "5d9891a1b4258ea256552aa856e388f2da28256a"
|
Chris@1517
|
429 scmid3 = scmid_for_assert(hex3, is_short_scmid)
|
Chris@441
|
430 assert_equal 1, c3.size
|
Chris@441
|
431 assert_equal 'A', c3[0].action
|
Chris@441
|
432 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
|
Chris@441
|
433 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
|
Chris@1517
|
434 assert_equal scmid3, c3[0].from_revision
|
Chris@1517
|
435 end
|
Chris@1517
|
436 private :assert_copied_files
|
Chris@1517
|
437
|
Chris@1517
|
438 def test_copied_files_short_id
|
Chris@1517
|
439 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
440 create_rev0_short_id
|
Chris@1517
|
441 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
442 @repository.fetch_changesets
|
Chris@1517
|
443 @project.reload
|
Chris@1517
|
444 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
445 assert_copied_files(true)
|
Chris@1517
|
446 end
|
Chris@1517
|
447
|
Chris@1517
|
448 def test_copied_files_long_id
|
Chris@1517
|
449 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
450 @repository.fetch_changesets
|
Chris@1517
|
451 @project.reload
|
Chris@1517
|
452 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
453 assert_copied_files(false)
|
Chris@119
|
454 end
|
Chris@119
|
455
|
Chris@119
|
456 def test_find_changeset_by_name
|
Chris@909
|
457 assert_equal 0, @repository.changesets.count
|
Chris@119
|
458 @repository.fetch_changesets
|
Chris@909
|
459 @project.reload
|
Chris@909
|
460 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
461 %w|2 400bb8672109 400|.each do |r|
|
Chris@119
|
462 assert_equal '2', @repository.find_changeset_by_name(r).revision
|
Chris@119
|
463 end
|
Chris@119
|
464 end
|
Chris@119
|
465
|
Chris@119
|
466 def test_find_changeset_by_invalid_name
|
Chris@909
|
467 assert_equal 0, @repository.changesets.count
|
Chris@119
|
468 @repository.fetch_changesets
|
Chris@909
|
469 @project.reload
|
Chris@909
|
470 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
471 assert_nil @repository.find_changeset_by_name('100000')
|
Chris@119
|
472 end
|
Chris@119
|
473
|
Chris@119
|
474 def test_identifier
|
Chris@909
|
475 assert_equal 0, @repository.changesets.count
|
Chris@119
|
476 @repository.fetch_changesets
|
Chris@909
|
477 @project.reload
|
Chris@909
|
478 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
479 c = @repository.changesets.find_by_revision('2')
|
Chris@119
|
480 assert_equal c.scmid, c.identifier
|
Chris@119
|
481 end
|
Chris@119
|
482
|
Chris@119
|
483 def test_format_identifier
|
Chris@909
|
484 assert_equal 0, @repository.changesets.count
|
Chris@119
|
485 @repository.fetch_changesets
|
Chris@909
|
486 @project.reload
|
Chris@909
|
487 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
488 c = @repository.changesets.find_by_revision('2')
|
Chris@119
|
489 assert_equal '2:400bb8672109', c.format_identifier
|
Chris@119
|
490 end
|
Chris@119
|
491
|
Chris@1517
|
492 def test_format_identifier_long_id
|
Chris@1517
|
493 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
494 Changeset.create!(:repository => @repository,
|
Chris@1517
|
495 :committed_on => Time.now,
|
Chris@1517
|
496 :revision => '0',
|
Chris@1517
|
497 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
|
Chris@1517
|
498 :comments => 'test')
|
Chris@1517
|
499 c = @repository.changesets.find_by_revision('0')
|
Chris@1517
|
500 assert_equal '0:0885933ad4f6', c.format_identifier
|
Chris@1517
|
501 end
|
Chris@1517
|
502
|
Chris@119
|
503 def test_find_changeset_by_empty_name
|
Chris@909
|
504 assert_equal 0, @repository.changesets.count
|
Chris@119
|
505 @repository.fetch_changesets
|
Chris@909
|
506 @project.reload
|
Chris@909
|
507 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
508 ['', ' ', nil].each do |r|
|
Chris@119
|
509 assert_nil @repository.find_changeset_by_name(r)
|
Chris@119
|
510 end
|
Chris@119
|
511 end
|
Chris@119
|
512
|
Chris@1517
|
513 def assert_parents(is_short_scmid=true)
|
Chris@1517
|
514 r1 = @repository.changesets.find_by_revision('0')
|
Chris@1517
|
515 assert_equal [], r1.parents
|
Chris@1517
|
516 r2 = @repository.changesets.find_by_revision('1')
|
Chris@1517
|
517 hex2 = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
|
Chris@1517
|
518 scmid2 = scmid_for_assert(hex2, is_short_scmid)
|
Chris@1517
|
519 assert_equal 1, r2.parents.length
|
Chris@1517
|
520 assert_equal scmid2, r2.parents[0].identifier
|
Chris@1517
|
521 r3 = @repository.changesets.find_by_revision('30')
|
Chris@1517
|
522 assert_equal 2, r3.parents.length
|
Chris@1517
|
523 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
|
Chris@1517
|
524 hex41 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
|
Chris@1517
|
525 scmid41 = scmid_for_assert(hex41, is_short_scmid)
|
Chris@1517
|
526 hex42 = "a94b0528f24fe05ebaef496ae0500bb050772e36"
|
Chris@1517
|
527 scmid42 = scmid_for_assert(hex42, is_short_scmid)
|
Chris@1517
|
528 assert_equal scmid41, r4[0]
|
Chris@1517
|
529 assert_equal scmid42, r4[1]
|
Chris@1517
|
530 end
|
Chris@1517
|
531 private :assert_parents
|
Chris@1517
|
532
|
Chris@1517
|
533 def test_parents_short_id
|
Chris@1517
|
534 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
535 create_rev0_short_id
|
Chris@1517
|
536 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
537 @repository.fetch_changesets
|
Chris@1517
|
538 @project.reload
|
Chris@1517
|
539 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
540 assert_parents(true)
|
Chris@1517
|
541 end
|
Chris@1517
|
542
|
Chris@1517
|
543 def test_parents_long_id
|
Chris@909
|
544 assert_equal 0, @repository.changesets.count
|
Chris@909
|
545 @repository.fetch_changesets
|
Chris@909
|
546 @project.reload
|
Chris@909
|
547 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1517
|
548 assert_parents(false)
|
Chris@909
|
549 end
|
Chris@909
|
550
|
Chris@119
|
551 def test_activities
|
Chris@119
|
552 c = Changeset.new(:repository => @repository,
|
Chris@119
|
553 :committed_on => Time.now,
|
Chris@119
|
554 :revision => '123',
|
Chris@119
|
555 :scmid => 'abc400bb8672',
|
Chris@119
|
556 :comments => 'test')
|
Chris@119
|
557 assert c.event_title.include?('123:abc400bb8672:')
|
Chris@119
|
558 assert_equal 'abc400bb8672', c.event_url[:rev]
|
Chris@119
|
559 end
|
Chris@245
|
560
|
Chris@441
|
561 def test_previous
|
Chris@909
|
562 assert_equal 0, @repository.changesets.count
|
Chris@245
|
563 @repository.fetch_changesets
|
Chris@909
|
564 @project.reload
|
Chris@909
|
565 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
566 %w|28 3ae45e2d177d 3ae45|.each do |r1|
|
Chris@441
|
567 changeset = @repository.find_changeset_by_name(r1)
|
Chris@441
|
568 %w|27 7bbf4c738e71 7bbf|.each do |r2|
|
Chris@441
|
569 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
|
Chris@441
|
570 end
|
Chris@441
|
571 end
|
Chris@245
|
572 end
|
Chris@245
|
573
|
Chris@441
|
574 def test_previous_nil
|
Chris@909
|
575 assert_equal 0, @repository.changesets.count
|
Chris@245
|
576 @repository.fetch_changesets
|
Chris@909
|
577 @project.reload
|
Chris@909
|
578 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
579 %w|0 0885933ad4f6 0885|.each do |r1|
|
Chris@441
|
580 changeset = @repository.find_changeset_by_name(r1)
|
Chris@441
|
581 assert_nil changeset.previous
|
Chris@441
|
582 end
|
Chris@245
|
583 end
|
Chris@245
|
584
|
Chris@441
|
585 def test_next
|
Chris@909
|
586 assert_equal 0, @repository.changesets.count
|
Chris@245
|
587 @repository.fetch_changesets
|
Chris@909
|
588 @project.reload
|
Chris@909
|
589 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
590 %w|27 7bbf4c738e71 7bbf|.each do |r2|
|
Chris@441
|
591 changeset = @repository.find_changeset_by_name(r2)
|
Chris@441
|
592 %w|28 3ae45e2d177d 3ae45|.each do |r1|
|
Chris@441
|
593 assert_equal @repository.find_changeset_by_name(r1), changeset.next
|
Chris@441
|
594 end
|
Chris@441
|
595 end
|
Chris@441
|
596 end
|
Chris@245
|
597
|
Chris@441
|
598 def test_next_nil
|
Chris@909
|
599 assert_equal 0, @repository.changesets.count
|
Chris@441
|
600 @repository.fetch_changesets
|
Chris@909
|
601 @project.reload
|
Chris@909
|
602 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1494
|
603 ["#{NUM_REV - 1}", "2e6d54642923", "2e6d5"].each do |r1|
|
Chris@441
|
604 changeset = @repository.find_changeset_by_name(r1)
|
Chris@441
|
605 assert_nil changeset.next
|
Chris@441
|
606 end
|
Chris@245
|
607 end
|
Chris@1517
|
608
|
Chris@1517
|
609 def test_scmid_for_inserting_db_short_id
|
Chris@1517
|
610 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
611 create_rev0_short_id
|
Chris@1517
|
612 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
613 rev = "0123456789012345678901234567890123456789"
|
Chris@1517
|
614 assert_equal 12, @repository.scmid_for_inserting_db(rev).length
|
Chris@1517
|
615 end
|
Chris@1517
|
616
|
Chris@1517
|
617 def test_scmid_for_inserting_db_long_id
|
Chris@1517
|
618 rev = "0123456789012345678901234567890123456789"
|
Chris@1517
|
619 assert_equal 0, @repository.changesets.count
|
Chris@1517
|
620 assert_equal 40, @repository.scmid_for_inserting_db(rev).length
|
Chris@1517
|
621 Changeset.create!(:repository => @repository,
|
Chris@1517
|
622 :committed_on => Time.now,
|
Chris@1517
|
623 :revision => '0',
|
Chris@1517
|
624 :scmid => rev,
|
Chris@1517
|
625 :comments => 'test')
|
Chris@1517
|
626 assert_equal 1, @repository.changesets.count
|
Chris@1517
|
627 assert_equal 40, @repository.scmid_for_inserting_db(rev).length
|
Chris@1517
|
628 end
|
Chris@1517
|
629
|
Chris@1517
|
630 def test_scmid_for_assert
|
Chris@1517
|
631 rev = "0123456789012345678901234567890123456789"
|
Chris@1517
|
632 assert_equal rev, scmid_for_assert(rev, false)
|
Chris@1517
|
633 assert_equal "012345678901", scmid_for_assert(rev, true)
|
Chris@1517
|
634 end
|
Chris@1517
|
635
|
Chris@1517
|
636 private
|
Chris@1517
|
637
|
Chris@1517
|
638 def scmid_for_assert(hex, is_short=true)
|
Chris@1517
|
639 is_short ? hex[0, 12] : hex
|
Chris@1517
|
640 end
|
Chris@1517
|
641
|
Chris@1517
|
642 def create_rev0_short_id
|
Chris@1517
|
643 Changeset.create!(:repository => @repository,
|
Chris@1517
|
644 :committed_on => Time.now,
|
Chris@1517
|
645 :revision => '0',
|
Chris@1517
|
646 :scmid => '0885933ad4f6',
|
Chris@1517
|
647 :comments => 'test')
|
Chris@1517
|
648 end
|
Chris@0
|
649 else
|
Chris@0
|
650 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
|
Chris@0
|
651 def test_fake; assert true end
|
Chris@0
|
652 end
|
Chris@0
|
653 end
|