diff test/unit/repository_test.rb @ 442:753f1380d6bc cannam

Merge from branch "redmine-1.2"
author Chris Cannam
date Mon, 06 Jun 2011 14:41:04 +0100
parents cbce1fd3b1b7
children cbb26bc654de
line wrap: on
line diff
--- a/test/unit/repository_test.rb	Thu Mar 03 15:08:45 2011 +0000
+++ b/test/unit/repository_test.rb	Mon Jun 06 14:41:04 2011 +0100
@@ -1,16 +1,16 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -33,97 +33,109 @@
            :member_roles,
            :roles,
            :enumerations
-  
+
   def setup
     @repository = Project.find(1).repository
   end
-  
+
   def test_create
     repository = Repository::Subversion.new(:project => Project.find(3))
     assert !repository.save
-  
+
     repository.url = "svn://localhost"
     assert repository.save
     repository.reload
-    
+
     project = Project.find(3)
     assert_equal repository, project.repository
   end
-  
+
   def test_destroy
     changesets = Changeset.count(:all, :conditions => "repository_id = 10")
-    changes = Change.count(:all, :conditions => "repository_id = 10", :include => :changeset)
+    changes = Change.count(:all, :conditions => "repository_id = 10",
+                           :include => :changeset)
     assert_difference 'Changeset.count', -changesets do
       assert_difference 'Change.count', -changes do
         Repository.find(10).destroy
       end
     end
   end
-  
+
   def test_should_not_create_with_disabled_scm
     # disable Subversion
     with_settings :enabled_scm => ['Darcs', 'Git'] do
-      repository = Repository::Subversion.new(:project => Project.find(3), :url => "svn://localhost")
+      repository = Repository::Subversion.new(
+                      :project => Project.find(3), :url => "svn://localhost")
       assert !repository.save
-      assert_equal I18n.translate('activerecord.errors.messages.invalid'), repository.errors.on(:type)
+      assert_equal I18n.translate('activerecord.errors.messages.invalid'),
+                                  repository.errors.on(:type)
     end
   end
-  
+
   def test_scan_changesets_for_issue_ids
     Setting.default_language = 'en'
     Setting.notified_events = ['issue_added','issue_updated']
-    
+
     # choosing a status to apply to fix issues
-    Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
+    Setting.commit_fix_status_id = IssueStatus.find(
+                                     :first,
+                                     :conditions => ["is_closed = ?", true]).id
     Setting.commit_fix_done_ratio = "90"
     Setting.commit_ref_keywords = 'refs , references, IssueID'
     Setting.commit_fix_keywords = 'fixes , closes'
     Setting.default_language = 'en'
     ActionMailer::Base.deliveries.clear
-    
+
     # make sure issue 1 is not already closed
     fixed_issue = Issue.find(1)
     assert !fixed_issue.status.is_closed?
     old_status = fixed_issue.status
-        
+
     Repository.scan_changesets_for_issue_ids
     assert_equal [101, 102], Issue.find(3).changeset_ids
-    
+
     # fixed issues
     fixed_issue.reload
     assert fixed_issue.status.is_closed?
     assert_equal 90, fixed_issue.done_ratio
     assert_equal [101], fixed_issue.changeset_ids
-    
+
     # issue change
     journal = fixed_issue.journals.find(:first, :order => 'created_on desc')
     assert_equal User.find_by_login('dlopper'), journal.user
     assert_equal 'Applied in changeset r2.', journal.notes
-    
+
     # 2 email notifications
     assert_equal 2, ActionMailer::Base.deliveries.size
     mail = ActionMailer::Base.deliveries.first
     assert_kind_of TMail::Mail, mail
-    assert mail.subject.starts_with?("[#{fixed_issue.project.name} - #{fixed_issue.tracker.name} ##{fixed_issue.id}]")
-    assert mail.body.include?("Status changed from #{old_status} to #{fixed_issue.status}")
-    
+    assert mail.subject.starts_with?(
+        "[#{fixed_issue.project.name} - #{fixed_issue.tracker.name} ##{fixed_issue.id}]")
+    assert mail.body.include?(
+        "Status changed from #{old_status} to #{fixed_issue.status}")
+
     # ignoring commits referencing an issue of another project
     assert_equal [], Issue.find(4).changesets
   end
-  
+
   def test_for_changeset_comments_strip
-    repository = Repository::Mercurial.create( :project => Project.find( 4 ), :url => '/foo/bar/baz' )
+    repository = Repository::Mercurial.create(
+                    :project => Project.find( 4 ),
+                    :url => '/foo/bar/baz' )
     comment = <<-COMMENT
     This is a loooooooooooooooooooooooooooong comment                                                   
                                                                                                        
                                                                                             
     COMMENT
     changeset = Changeset.new(
-      :comments => comment, :commit_date => Time.now, :revision => 0, :scmid => 'f39b7922fb3c',
-      :committer => 'foo <foo@example.com>', :committed_on => Time.now, :repository => repository )
+      :comments => comment, :commit_date => Time.now,
+      :revision => 0, :scmid => 'f39b7922fb3c',
+      :committer => 'foo <foo@example.com>',
+      :committed_on => Time.now, :repository => repository )
     assert( changeset.save )
     assert_not_equal( comment, changeset.comments )
-    assert_equal( 'This is a loooooooooooooooooooooooooooong comment', changeset.comments )
+    assert_equal( 'This is a loooooooooooooooooooooooooooong comment',
+                  changeset.comments )
   end
 
   def test_for_urls_strip
@@ -134,29 +146,93 @@
         :log_encoding => 'UTF-8')
     assert repository.save
     repository.reload
-    assert_equal ':pserver:login:password@host:/path/to/the/repository', repository.url
+    assert_equal ':pserver:login:password@host:/path/to/the/repository',
+                  repository.url
     assert_equal 'foo', repository.root_url
   end
 
   def test_manual_user_mapping
     assert_no_difference "Changeset.count(:conditions => 'user_id <> 2')" do
-      c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
+      c = Changeset.create!(
+              :repository => @repository,
+              :committer => 'foo',
+              :committed_on => Time.now,
+              :revision => 100,
+              :comments => 'Committed by foo.'
+            )
       assert_nil c.user
       @repository.committer_ids = {'foo' => '2'}
       assert_equal User.find(2), c.reload.user
       # committer is now mapped
-      c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 101, :comments => 'Another commit by foo.')
+      c = Changeset.create!(
+              :repository => @repository,
+              :committer => 'foo',
+              :committed_on => Time.now,
+              :revision => 101,
+              :comments => 'Another commit by foo.'
+            )
       assert_equal User.find(2), c.user
     end
   end
-  
+
   def test_auto_user_mapping_by_username
-    c = Changeset.create!(:repository => @repository, :committer => 'jsmith', :committed_on => Time.now, :revision => 100, :comments => 'Committed by john.')
+    c = Changeset.create!(
+          :repository   => @repository,
+          :committer    => 'jsmith',
+          :committed_on => Time.now,
+          :revision     => 100,
+          :comments     => 'Committed by john.'
+        )
     assert_equal User.find(2), c.user
   end
-  
+
   def test_auto_user_mapping_by_email
-    c = Changeset.create!(:repository => @repository, :committer => 'john <jsmith@somenet.foo>', :committed_on => Time.now, :revision => 100, :comments => 'Committed by john.')
+    c = Changeset.create!(
+          :repository   => @repository,
+          :committer    => 'john <jsmith@somenet.foo>',
+          :committed_on => Time.now,
+          :revision     => 100,
+          :comments     => 'Committed by john.'
+        )
     assert_equal User.find(2), c.user
   end
+
+  def test_filesystem_avaialbe
+    klass = Repository::Filesystem
+    assert klass.scm_adapter_class
+    assert_equal true, klass.scm_available
+  end
+
+  def test_merge_extra_info
+    repo = Repository::Subversion.new(:project => Project.find(3))
+    assert !repo.save
+    repo.url = "svn://localhost"
+    assert repo.save
+    repo.reload
+    project = Project.find(3)
+    assert_equal repo, project.repository
+    assert_nil repo.extra_info
+    h1 = {"test_1" => {"test_11" => "test_value_11"}}
+    repo.merge_extra_info(h1)
+    assert_equal h1, repo.extra_info
+    h2 = {"test_2" => {
+                   "test_21" => "test_value_21",
+                   "test_22" => "test_value_22",
+                  }}
+    repo.merge_extra_info(h2)
+    assert_equal (h = {"test_11" => "test_value_11"}),
+                 repo.extra_info["test_1"]
+    assert_equal "test_value_21",
+                 repo.extra_info["test_2"]["test_21"]
+    h3 = {"test_2" => {
+                   "test_23" => "test_value_23",
+                   "test_24" => "test_value_24",
+                  }}
+    repo.merge_extra_info(h3)
+    assert_equal (h = {"test_11" => "test_value_11"}),
+                 repo.extra_info["test_1"]
+    assert_nil repo.extra_info["test_2"]["test_21"]
+    assert_equal "test_value_23",
+                 repo.extra_info["test_2"]["test_23"]
+  end
 end