bazaar_adapter_test.rb 7.74 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 10 11 12 13 14 15 16 17 18 19
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

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

22 23 24
class BazaarAdapterTest < ActiveSupport::TestCase
  REPOSITORY_PATH = Rails.root.join('tmp/test/bazaar_repository').to_s
  REPOSITORY_PATH.gsub!(/\/+/, '/')
25

26 27 28 29 30 31
  if File.directory?(REPOSITORY_PATH)
    def setup
      @adapter = Redmine::Scm::Adapters::BazaarAdapter.new(
                              File.join(REPOSITORY_PATH, "trunk")
                              )
    end
32

33 34 35 36 37 38
    def test_scm_version
      to_test = { "Bazaar (bzr) 2.1.2\n"             => [2,1,2],
                  "2.1.1\n1.7\n1.8"                  => [2,1,1],
                  "2.0.1\r\n1.8.1\r\n1.9.1"          => [2,0,1]}
      to_test.each do |s, v|
        test_scm_version_for(s, v)
39
      end
40
    end
41

42 43 44 45
    def test_cat
      cat = @adapter.cat('directory/document.txt')
      assert cat =~ /Write the contents of a file as of a given revision to standard output/
    end
46

47 48 49
    def test_cat_path_invalid
      assert_nil @adapter.cat('invalid')
    end
50

51 52 53
    def test_cat_revision_invalid
      assert_nil @adapter.cat('doc-mkdir.txt', '12345678')
    end
54

55 56 57 58 59 60
    def test_diff
      diff1 = @adapter.diff('doc-mkdir.txt', 3, 2)
      assert_equal 21, diff1.size
      buf =  diff1[14].gsub(/\r\n|\r|\n/, "")
      assert_equal "-Display more information.", buf
    end
61

62 63 64
    def test_diff_path_invalid
      assert_equal [], @adapter.diff('invalid', 1)
    end
65

66 67 68 69
    def test_diff_revision_invalid
      assert_equal [], @adapter.diff(nil, 12345678)
      assert_equal [], @adapter.diff(nil, 12345678, 87654321)
    end
70

71 72 73 74 75 76 77
    def test_annotate
      annotate = @adapter.annotate('doc-mkdir.txt')
      assert_equal 17, annotate.lines.size
      assert_equal '1', annotate.revisions[0].identifier
      assert_equal 'jsmith@', annotate.revisions[0].author
      assert_equal 'mkdir', annotate.lines[0]
    end
78

79 80 81
    def test_annotate_path_invalid
      assert_nil @adapter.annotate('invalid')
    end
82

83 84 85
    def test_annotate_revision_invalid
      assert_nil @adapter.annotate('doc-mkdir.txt', '12345678')
    end
86

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
    def test_branch_conf_path
      p = "c:\\test\\test\\"
      bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
      assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
      p = "c:\\test\\test\\.bzr"
      bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
      assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
      p = "c:\\test\\test\\.bzr\\"
      bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
      assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
      p = "c:\\test\\test"
      bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
      assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
      p = "\\\\server\\test\\test\\"
      bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
      assert_equal File.join("\\\\server\\test\\test", ".bzr", "branch", "branch.conf"), bcp
    end
104

105 106 107
    def test_append_revisions_only_true
      assert_equal true, @adapter.append_revisions_only
    end
108

109 110 111 112 113 114
    def test_append_revisions_only_false
      adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
                              File.join(REPOSITORY_PATH, "empty-branch")
                              )
      assert_equal false, adpt.append_revisions_only
    end
115

116 117 118 119 120 121
    def test_append_revisions_only_shared_repo
      adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
                              REPOSITORY_PATH
                              )
      assert_equal false, adpt.append_revisions_only
    end
122

123 124 125
    def test_info_not_nil
      assert_not_nil @adapter.info
    end
126

127 128 129 130 131 132
    def test_info_nil
      adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
                "/invalid/invalid/"
                )
      assert_nil adpt.info
    end
133

134 135 136 137
    def test_info
      info = @adapter.info
      assert_equal 4, info.lastrev.identifier.to_i
    end
138

139 140 141 142 143 144
    def test_info_emtpy
      adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
                              File.join(REPOSITORY_PATH, "empty-branch")
                              )
      assert_equal 0, adpt.info.lastrev.identifier.to_i
    end
145

146 147 148
    def test_entries_path_invalid
      assert_equal [], @adapter.entries('invalid')
    end
149

150 151 152
    def test_entries_revision_invalid
      assert_nil @adapter.entries(nil, 12345678)
    end
153

154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
    def test_revisions
      revisions = @adapter.revisions(nil, 4, 2)
      assert_equal 3, revisions.size
      assert_equal 2, revisions[2].identifier
      assert_equal 'jsmith@foo.bar-20071203175224-v0eog5d5wrgdrshg', revisions[2].scmid
      assert_equal 4, revisions[0].identifier
      assert_equal 'jsmith@foo.bar-20071203175422-t40bf8li5zz0c4cg', revisions[0].scmid
      assert_equal 2, revisions[0].paths.size
      assert_equal 'D', revisions[0].paths[0][:action]
      assert_equal '/doc-deleted.txt', revisions[0].paths[0][:path]
      assert_equal 'docdeleted.txt-20071203175320-iwwj561ojuubs3gt-1', revisions[0].paths[0][:revision]
      assert_equal 'M', revisions[0].paths[1][:action]
      assert_equal '/directory/doc-ls.txt', revisions[0].paths[1][:path]
      assert_equal 'docls.txt-20071203175005-a3hyc3mn0shl7cgu-1', revisions[0].paths[1][:revision]
    end
169

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
    def test_revisions_path_invalid
      assert_nil @adapter.revisions('invalid')
    end

    def test_revisions_revision_invalid
      assert_nil @adapter.revisions(nil, 12345678)
      assert_nil @adapter.revisions(nil, 12345678, 87654321)
    end

    def test_entry
      entry = @adapter.entry()
      assert_equal "", entry.path
      assert_equal "dir", entry.kind
      entry = @adapter.entry('')
      assert_equal "", entry.path
      assert_equal "dir", entry.kind
      assert_nil @adapter.entry('invalid')
      assert_nil @adapter.entry('/invalid')
      assert_nil @adapter.entry('/invalid/')
      assert_nil @adapter.entry('invalid/invalid')
      assert_nil @adapter.entry('invalid/invalid/')
      assert_nil @adapter.entry('/invalid/invalid')
      assert_nil @adapter.entry('/invalid/invalid/')
      ["doc-ls.txt", "/doc-ls.txt"].each do |path|
        entry = @adapter.entry(path, 2)
        assert_equal "doc-ls.txt", entry.path
        assert_equal "file", entry.kind
      end
      ["directory", "/directory", "/directory/"].each do |path|
        entry = @adapter.entry(path, 2)
        assert_equal "directory", entry.path
201 202
        assert_equal "dir", entry.kind
      end
203 204 205 206 207 208
      ["directory/document.txt", "/directory/document.txt"].each do |path|
        entry = @adapter.entry(path, 2)
        assert_equal "directory/document.txt", entry.path
        assert_equal "file", entry.kind
      end
    end
209

210
    private
211

212 213 214
    def test_scm_version_for(scm_command_version, version)
      @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
      assert_equal version, @adapter.class.scm_command_version
215
    end
216 217 218
  else
    puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
    def test_fake; assert true end
219 220
  end
end