repository_mercurial_test.rb 23.1 KB
Newer Older
1
# frozen_string_literal: true
2

3
# Redmine - project management software
jplang's avatar
jplang committed
4
# Copyright (C) 2006-2017  Jean-Philippe Lang
5 6 7 8 9
#
# 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.
10
#
11 12 13 14
# 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.
15
#
16 17 18 19
# 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.

20
require File.expand_path('../../test_helper', __FILE__)
21

22
class RepositoryMercurialTest < ActiveSupport::TestCase
23
  fixtures :projects
24

25 26
  include Redmine::I18n

27
  REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
28
  NUM_REV = 34
29

30
  def setup
31
    User.current = nil
32 33 34 35 36 37 38 39 40
    @project    = Project.find(3)
    @repository = Repository::Mercurial.create(
                      :project => @project,
                      :url     => REPOSITORY_PATH,
                      :path_encoding => 'ISO-8859-1'
                      )
    assert @repository
  end

41 42 43 44
  def test_blank_path_to_repository_error_message
    set_language_if_valid 'en'
    repo = Repository::Mercurial.new(
                          :project      => @project,
45
                          :identifier   => 'test'
46 47
                        )
    assert !repo.save
48
    assert_include "Path to repository cannot be blank",
49 50 51 52 53 54 55 56 57
                   repo.errors.full_messages
  end

  def test_blank_path_to_repository_error_message_fr
    set_language_if_valid 'fr'
    repo = Repository::Mercurial.new(
                          :project      => @project,
                          :url          => "",
                          :identifier   => 'test',
58
                          :path_encoding => ''
59 60
                        )
    assert !repo.save
61
    assert_include 'Chemin du dépôt doit être renseigné(e)', repo.errors.full_messages
62 63
  end

64
  if File.directory?(REPOSITORY_PATH)
65
    def test_scm_available
66 67 68 69 70
      klass = Repository::Mercurial
      assert_equal "Mercurial", klass.scm_name
      assert klass.scm_adapter_class
      assert_not_equal "", klass.scm_command
      assert_equal true, klass.scm_available
71
    end
72

73
    def test_entries_on_tip
74 75 76 77
      entries = @repository.entries
      assert_kind_of Redmine::Scm::Adapters::Entries, entries
    end

78 79 80
    def assert_entries(is_short_scmid=true)
      hex = "9d5b5b00419901478496242e0768deba1ce8c51e"
      scmid = scmid_for_assert(hex, is_short_scmid)
81 82 83 84 85 86
      [2, '400bb8672109', '400', 400].each do |r|
        entries1 = @repository.entries(nil, r)
        assert entries1
        assert_kind_of Redmine::Scm::Adapters::Entries, entries1
        assert_equal 3, entries1.size
        readme = entries1[2]
87 88 89 90
        assert_equal '1',   readme.lastrev.revision
        assert_equal scmid, readme.lastrev.identifier
        assert_equal '1',   readme.changeset.revision
        assert_equal scmid, readme.changeset.scmid
91 92
      end
    end
93 94 95 96
    private :assert_entries

    def test_entries_short_id
      assert_equal 0, @repository.changesets.count
97 98
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
99 100 101
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
102
      assert_entries(true)
103
    end
104

105 106 107 108 109 110 111 112
    def test_entries_long_id
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
      assert_entries(false)
    end

113 114 115 116 117 118 119
    def test_entry_on_tip
      entry = @repository.entry
      assert_kind_of Redmine::Scm::Adapters::Entry, entry
      assert_equal "", entry.path
      assert_equal 'dir', entry.kind
    end

120 121 122
    def assert_entry(is_short_scmid=true)
      hex = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
      scmid = scmid_for_assert(hex, is_short_scmid)
123 124 125 126 127 128 129
      ["README", "/README"].each do |path|
        ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
          entry = @repository.entry(path, rev)
          assert_kind_of Redmine::Scm::Adapters::Entry, entry
          assert_equal "README", entry.path
          assert_equal "file", entry.kind
          assert_equal '0', entry.lastrev.revision
130
          assert_equal scmid, entry.lastrev.identifier
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
        end
      end
      ["sources", "/sources", "/sources/"].each do |path|
        ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
          entry = @repository.entry(path, rev)
          assert_kind_of Redmine::Scm::Adapters::Entry, entry
          assert_equal "sources", entry.path
          assert_equal "dir", entry.kind
        end
      end
      ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
        ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
          entry = @repository.entry(path, rev)
          assert_kind_of Redmine::Scm::Adapters::Entry, entry
          assert_equal "sources/watchers_controller.rb", entry.path
          assert_equal "file", entry.kind
          assert_equal '0', entry.lastrev.revision
148
          assert_equal scmid, entry.lastrev.identifier
149 150 151
        end
      end
    end
152 153 154
    private :assert_entry

    def test_entry_short_id
155 156 157
      assert_equal 0, @repository.changesets.count
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
158
      assert_entry(true)
159
    end
160

161 162 163 164
    def test_entry_long_id
      assert_entry(false)
    end

165
    def test_fetch_changesets_from_scratch
166
      assert_equal 0, @repository.changesets.count
167
      @repository.fetch_changesets
168 169
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
170
      assert_equal 46, @repository.filechanges.count
171
      rev0 = @repository.changesets.find_by_revision('0')
172
      assert_equal "Initial import.\nThe repository contains 3 files.",
173
                   rev0.comments
174
      assert_equal "0885933ad4f68d77c2649cd11f8311276e7ef7ce", rev0.scmid
175 176 177 178
      first_rev = @repository.changesets.first
      last_rev  = @repository.changesets.last
      assert_equal "#{NUM_REV - 1}", first_rev.revision
      assert_equal "0", last_rev.revision
179
    end
180

181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
    def test_fetch_changesets_keep_short_id
      assert_equal 0, @repository.changesets.count
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
      rev1 = @repository.changesets.find_by_revision('1')
      assert_equal "9d5b5b004199", rev1.scmid
    end

    def test_fetch_changesets_keep_long_id
      assert_equal 0, @repository.changesets.count
      Changeset.create!(:repository   => @repository,
                        :committed_on => Time.now,
                        :revision     => '0',
                        :scmid        => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
                        :comments     => 'test')
      assert_equal 1, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
      rev1 = @repository.changesets.find_by_revision('1')
      assert_equal "9d5b5b00419901478496242e0768deba1ce8c51e", rev1.scmid
    end

207
    def test_fetch_changesets_incremental
208
      assert_equal 0, @repository.changesets.count
209
      @repository.fetch_changesets
210 211
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
212
      # Remove changesets with revision > 2
213
      @repository.changesets.each {|c| c.destroy if c.revision.to_i > 2}
214
      @project.reload
215
      @repository.reload
216
      assert_equal 3, @repository.changesets.count
217

218
      @repository.fetch_changesets
219
      @project.reload
220
      assert_equal NUM_REV, @repository.changesets.count
221
    end
222

223 224 225
    def test_isodatesec
      # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
      if @repository.scm.class.client_version_above?([1, 0])
226
        assert_equal 0, @repository.changesets.count
227
        @repository.fetch_changesets
228 229
        @project.reload
        assert_equal NUM_REV, @repository.changesets.count
230 231 232 233
        rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
        assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
      end
    end
234 235

    def test_changeset_order_by_revision
236
      assert_equal 0, @repository.changesets.count
237
      @repository.fetch_changesets
238 239
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
240 241 242 243 244 245 246

      c0 = @repository.latest_changeset
      c1 = @repository.changesets.find_by_revision('0')
      # sorted by revision (id), not by date
      assert c0.revision.to_i > c1.revision.to_i
      assert c0.committed_on  < c1.committed_on
    end
247 248

    def test_latest_changesets
249
      assert_equal 0, @repository.changesets.count
250
      @repository.fetch_changesets
251 252
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
253 254 255

      # with_limit
      changesets = @repository.latest_changesets('', nil, 2)
256
      assert_equal ["#{NUM_REV - 1}", "#{NUM_REV - 2}"], changesets.collect(&:revision)
257 258

      # with_filepath
259 260
      changesets = @repository.latest_changesets(
                      '/sql_escape/percent%dir/percent%file1.txt', nil)
261
      assert_equal %w|30 11 10 9|, changesets.collect(&:revision)
262

263 264
      changesets = @repository.latest_changesets(
                      '/sql_escape/underscore_dir/understrike_file.txt', nil)
265
      assert_equal %w|30 12 9|, changesets.collect(&:revision)
266 267

      changesets = @repository.latest_changesets('README', nil)
268
      assert_equal %w|31 30 28 17 8 6 1 0|, changesets.collect(&:revision)
269

270 271 272 273 274 275
      changesets = @repository.latest_changesets('README','8')
      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)

      changesets = @repository.latest_changesets('README','8', 2)
      assert_equal %w|8 6|, changesets.collect(&:revision)

276 277 278 279 280 281
      # with_dirpath
      changesets = @repository.latest_changesets('images', nil)
      assert_equal %w|1 0|, changesets.collect(&:revision)

      path = 'sql_escape/percent%dir'
      changesets = @repository.latest_changesets(path, nil)
282
      assert_equal %w|30 13 11 10 9|, changesets.collect(&:revision)
283

284 285 286 287 288 289
      changesets = @repository.latest_changesets(path, '11')
      assert_equal %w|11 10 9|, changesets.collect(&:revision)

      changesets = @repository.latest_changesets(path, '11', 2)
      assert_equal %w|11 10|, changesets.collect(&:revision)

290 291
      path = 'sql_escape/underscore_dir'
      changesets = @repository.latest_changesets(path, nil)
292
      assert_equal %w|30 13 12 9|, changesets.collect(&:revision)
293 294 295 296 297 298

      changesets = @repository.latest_changesets(path, '12')
      assert_equal %w|12 9|, changesets.collect(&:revision)

      changesets = @repository.latest_changesets(path, '12', 1)
      assert_equal %w|12|, changesets.collect(&:revision)
299 300
    end

301 302 303 304 305 306
    def assert_latest_changesets_tag
      changesets = @repository.latest_changesets('', 'tag_test.00')
      assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
    end
    private :assert_latest_changesets_tag

307 308 309 310 311
    def test_latest_changesets_tag
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
312
      assert_latest_changesets_tag
313 314
    end

315 316 317 318 319 320 321 322 323 324
    def test_latest_changesets_tag_short_id
      assert_equal 0, @repository.changesets.count
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
      assert_latest_changesets_tag
    end

325 326 327 328 329
    def test_latest_changesets_tag_with_path
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
330 331 332

      changesets = @repository.latest_changesets('sources', 'tag_test.00')
      assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
333 334 335 336 337 338 339 340 341 342
    end

    def test_latest_changesets_tag_with_limit
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count

      changesets = @repository.latest_changesets('', 'tag_test.00', 2)
      assert_equal %w|5 4|, changesets.collect(&:revision)
343

344 345
      changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
      assert_equal %w|4 3|, changesets.collect(&:revision)
346 347 348 349 350 351 352
    end

    def test_latest_changesets_branch
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
353

354
      if @repository.scm.class.client_version_above?([1, 6])
355
        changesets = @repository.latest_changesets('', 'branch-Ü-01')
356 357
        assert_equal %w|27 26|, changesets.collect(&:revision)
      end
358

359
      changesets = @repository.latest_changesets('latin-1-dir/test-Ü-subdir', 'branch-Ü-01')
360
      assert_equal %w|27|, changesets.collect(&:revision)
361
    end
362

363 364 365 366 367 368
    def assert_latest_changesets_default_branch
      changesets = @repository.latest_changesets('', 'default')
      assert_equal %w|31 28 24 6 4 3 2 1 0|, changesets.collect(&:revision)
    end
    private :assert_latest_changesets_default_branch

369 370 371 372 373
    def test_latest_changesets_default_branch
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
374
      assert_latest_changesets_default_branch
375 376
    end

377 378 379 380 381 382 383 384 385 386
    def test_latest_changesets_default_branch_short_id
      assert_equal 0, @repository.changesets.count
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
      assert_latest_changesets_default_branch
    end

387
    def assert_copied_files(is_short_scmid=true)
388
      cs1 = @repository.changesets.find_by_revision('13')
389
      assert_not_nil cs1
390
      c1  = cs1.filechanges.sort_by(&:path)
391 392
      assert_equal 2, c1.size

393 394
      hex1 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
      scmid1 = scmid_for_assert(hex1, is_short_scmid)
395 396 397
      assert_equal 'A', c1[0].action
      assert_equal '/sql_escape/percent%dir/percentfile1.txt',  c1[0].path
      assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
398
      assert_equal scmid1, c1[0].from_revision
399 400 401 402 403 404

      assert_equal 'A', c1[1].action
      assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
      assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path

      cs2 = @repository.changesets.find_by_revision('15')
405
      c2  = cs2.filechanges
406 407
      assert_equal 1, c2.size

408 409
      hex2 = "933ca60293d78f7c7979dd123cc0c02431683575"
      scmid2 = scmid_for_assert(hex2, is_short_scmid)
410 411 412
      assert_equal 'A', c2[0].action
      assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
      assert_equal '/README', c2[0].from_path
413
      assert_equal scmid2, c2[0].from_revision
414 415

      cs3 = @repository.changesets.find_by_revision('19')
416
      c3  = cs3.filechanges
417 418 419

      hex3 = "5d9891a1b4258ea256552aa856e388f2da28256a"
      scmid3 = scmid_for_assert(hex3, is_short_scmid)
420 421
      assert_equal 1, c3.size
      assert_equal 'A', c3[0].action
422 423
      assert_equal '/latin-1-dir/test-Ü-1.txt',  c3[0].path
      assert_equal '/latin-1-dir/test-Ü.txt',    c3[0].from_path
424
      assert_equal scmid3, c3[0].from_revision
425
    end
426 427 428 429
    private :assert_copied_files

    def test_copied_files_short_id
      assert_equal 0, @repository.changesets.count
430 431
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
432 433 434
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
435
      assert_copied_files(true)
436
    end
437

438 439 440 441 442 443 444 445
    def test_copied_files_long_id
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
      assert_copied_files(false)
    end

446
    def test_find_changeset_by_name
447
      assert_equal 0, @repository.changesets.count
448
      @repository.fetch_changesets
449 450
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
451
      %w|2 400bb8672109 400|.each do |r|
452
        assert_equal '2', @repository.find_changeset_by_name(r).revision
453 454 455 456
      end
    end

    def test_find_changeset_by_invalid_name
457
      assert_equal 0, @repository.changesets.count
458
      @repository.fetch_changesets
459 460
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
461 462
      assert_nil @repository.find_changeset_by_name('100000')
    end
463 464

    def test_identifier
465
      assert_equal 0, @repository.changesets.count
466
      @repository.fetch_changesets
467 468
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
469 470 471
      c = @repository.changesets.find_by_revision('2')
      assert_equal c.scmid, c.identifier
    end
472 473

    def test_format_identifier
474
      assert_equal 0, @repository.changesets.count
475
      @repository.fetch_changesets
476 477
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
478 479 480 481
      c = @repository.changesets.find_by_revision('2')
      assert_equal '2:400bb8672109', c.format_identifier
    end

482 483 484 485 486 487 488 489 490 491 492
    def test_format_identifier_long_id
      assert_equal 0, @repository.changesets.count
      Changeset.create!(:repository   => @repository,
                        :committed_on => Time.now,
                        :revision     => '0',
                        :scmid        => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
                        :comments     => 'test')
      c = @repository.changesets.find_by_revision('0')
      assert_equal '0:0885933ad4f6', c.format_identifier
    end

493
    def test_find_changeset_by_empty_name
494
      assert_equal 0, @repository.changesets.count
495
      @repository.fetch_changesets
496 497
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
498 499 500 501 502
      ['', ' ', nil].each do |r|
        assert_nil @repository.find_changeset_by_name(r)
      end
    end

503
    def assert_parents(is_short_scmid=true)
504 505 506
      r1 = @repository.changesets.find_by_revision('0')
      assert_equal [], r1.parents
      r2 = @repository.changesets.find_by_revision('1')
507 508
      hex2 = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
      scmid2 = scmid_for_assert(hex2, is_short_scmid)
509
      assert_equal 1, r2.parents.length
510
      assert_equal scmid2, r2.parents[0].identifier
511 512
      r3 = @repository.changesets.find_by_revision('30')
      assert_equal 2, r3.parents.length
513
      r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
514 515 516 517 518 519
      hex41 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
      scmid41 = scmid_for_assert(hex41, is_short_scmid)
      hex42 = "a94b0528f24fe05ebaef496ae0500bb050772e36"
      scmid42 = scmid_for_assert(hex42, is_short_scmid)
      assert_equal scmid41, r4[0]
      assert_equal scmid42, r4[1]
520
    end
521 522 523 524
    private :assert_parents

    def test_parents_short_id
      assert_equal 0, @repository.changesets.count
525 526
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
527 528 529
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
530
      assert_parents(true)
531
    end
532

533 534 535 536 537 538 539 540
    def test_parents_long_id
      assert_equal 0, @repository.changesets.count
      @repository.fetch_changesets
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
      assert_parents(false)
    end

541 542 543 544 545 546 547 548 549
    def test_activities
      c = Changeset.new(:repository   => @repository,
                        :committed_on => Time.now,
                        :revision     => '123',
                        :scmid        => 'abc400bb8672',
                        :comments     => 'test')
      assert c.event_title.include?('123:abc400bb8672:')
      assert_equal 'abc400bb8672', c.event_url[:rev]
    end
550

551
    def test_previous
552
      assert_equal 0, @repository.changesets.count
553
      @repository.fetch_changesets
554 555
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
556
      %w|28 3ae45e2d177d 3ae45|.each do |r1|
557
        changeset = @repository.find_changeset_by_name(r1)
558
        %w|27 7bbf4c738e71 7bbf|.each do |r2|
559 560 561 562 563 564
          assert_equal @repository.find_changeset_by_name(r2), changeset.previous
        end
      end
    end

    def test_previous_nil
565
      assert_equal 0, @repository.changesets.count
566
      @repository.fetch_changesets
567 568
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
569 570 571 572 573 574 575
      %w|0 0885933ad4f6 0885|.each do |r1|
        changeset = @repository.find_changeset_by_name(r1)
        assert_nil changeset.previous
      end
    end

    def test_next
576
      assert_equal 0, @repository.changesets.count
577
      @repository.fetch_changesets
578 579
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
580
      %w|27 7bbf4c738e71 7bbf|.each do |r2|
581
        changeset = @repository.find_changeset_by_name(r2)
582
        %w|28 3ae45e2d177d 3ae45|.each do |r1|
583 584 585 586 587 588
        assert_equal @repository.find_changeset_by_name(r1), changeset.next
        end
      end
    end

    def test_next_nil
589
      assert_equal 0, @repository.changesets.count
590
      @repository.fetch_changesets
591 592
      @project.reload
      assert_equal NUM_REV, @repository.changesets.count
593
      ["#{NUM_REV - 1}", "2e6d54642923", "2e6d5"].each do |r1|
594 595 596 597
        changeset = @repository.find_changeset_by_name(r1)
        assert_nil changeset.next
      end
    end
598

599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619
    def test_scmid_for_inserting_db_short_id
      assert_equal 0, @repository.changesets.count
      create_rev0_short_id
      assert_equal 1, @repository.changesets.count
      rev = "0123456789012345678901234567890123456789"
      assert_equal 12, @repository.scmid_for_inserting_db(rev).length
    end

    def test_scmid_for_inserting_db_long_id
      rev = "0123456789012345678901234567890123456789"
      assert_equal 0, @repository.changesets.count
      assert_equal 40, @repository.scmid_for_inserting_db(rev).length
      Changeset.create!(:repository   => @repository,
                        :committed_on => Time.now,
                        :revision     => '0',
                        :scmid        => rev,
                        :comments     => 'test')
      assert_equal 1, @repository.changesets.count
      assert_equal 40, @repository.scmid_for_inserting_db(rev).length
    end

620 621 622 623 624 625 626 627 628 629 630
    def test_scmid_for_assert
      rev = "0123456789012345678901234567890123456789"
      assert_equal rev, scmid_for_assert(rev, false)
      assert_equal "012345678901", scmid_for_assert(rev, true)
    end

    private

    def scmid_for_assert(hex, is_short=true)
      is_short ? hex[0, 12] : hex
    end
631 632 633 634 635 636 637 638

    def create_rev0_short_id
      Changeset.create!(:repository   => @repository,
                        :committed_on => Time.now,
                        :revision     => '0',
                        :scmid        => '0885933ad4f6',
                        :comments     => 'test')
    end
639 640 641 642 643
  else
    puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
    def test_fake; assert true end
  end
end