2007-04-24 17:57:27 +04:00
# redMine - project management software
# Copyright (C) 2006-2007 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.
require File . dirname ( __FILE__ ) + '/../test_helper'
2009-09-13 21:14:35 +04:00
class RepositoryTest < ActiveSupport :: TestCase
2008-02-06 23:02:30 +03:00
fixtures :projects ,
:trackers ,
:projects_trackers ,
:repositories ,
:issues ,
:issue_statuses ,
:changesets ,
:changes ,
:users ,
:enumerations
2007-05-16 01:32:36 +04:00
def setup
@repository = Project . find ( 1 ) . repository
end
2009-09-20 18:06:57 +04:00
def test_create
2007-12-01 20:15:42 +03:00
repository = Repository :: Subversion . new ( :project = > Project . find ( 3 ) )
2007-04-24 17:57:27 +04:00
assert ! repository . save
2009-09-20 18:06:57 +04:00
repository . url = " svn://localhost "
2007-04-24 17:57:27 +04:00
assert repository . save
repository . reload
2007-12-01 20:15:42 +03:00
project = Project . find ( 3 )
2009-09-20 18:06:57 +04:00
assert_equal repository , project . repository
2007-04-24 17:57:27 +04:00
end
2008-07-14 01:55:13 +04:00
def test_destroy
changesets = Changeset . count ( :all , :conditions = > " repository_id = 10 " )
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
2008-06-08 18:59:26 +04:00
def test_should_not_create_with_disabled_scm
# disable Subversion
Setting . enabled_scm = [ 'Darcs' , 'Git' ]
repository = Repository :: Subversion . new ( :project = > Project . find ( 3 ) , :url = > " svn://localhost " )
assert ! repository . save
2009-02-21 14:04:50 +03:00
assert_equal I18n . translate ( 'activerecord.errors.messages.invalid' ) , repository . errors . on ( :type )
2008-06-08 19:40:24 +04:00
# re-enable Subversion for following tests
Setting . delete_all
2008-06-08 18:59:26 +04:00
end
2007-04-24 17:57:27 +04:00
def test_scan_changesets_for_issue_ids
2008-11-25 20:37:41 +03:00
Setting . default_language = 'en'
2007-04-24 17:57:27 +04:00
# choosing a status to apply to fix issues
Setting . commit_fix_status_id = IssueStatus . find ( :first , :conditions = > [ " is_closed = ? " , true ] ) . id
2007-10-10 22:56:59 +04:00
Setting . commit_fix_done_ratio = " 90 "
2007-10-22 20:52:36 +04:00
Setting . commit_ref_keywords = 'refs , references, IssueID'
Setting . commit_fix_keywords = 'fixes , closes'
2008-02-06 23:02:30 +03:00
Setting . default_language = 'en'
ActionMailer :: Base . deliveries . clear
2007-04-24 17:57:27 +04:00
# make sure issue 1 is not already closed
2008-02-06 23:02:30 +03:00
fixed_issue = Issue . find ( 1 )
assert ! fixed_issue . status . is_closed?
old_status = fixed_issue . status
2007-04-24 17:57:27 +04:00
Repository . scan_changesets_for_issue_ids
assert_equal [ 101 , 102 ] , Issue . find ( 3 ) . changeset_ids
# fixed issues
2008-02-06 23:02:30 +03:00
fixed_issue . reload
2007-10-10 22:56:59 +04:00
assert fixed_issue . status . is_closed?
assert_equal 90 , fixed_issue . done_ratio
assert_equal [ 101 ] , fixed_issue . changeset_ids
2007-04-24 17:57:27 +04:00
2008-02-06 23:02:30 +03:00
# 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 } " )
2007-04-24 17:57:27 +04:00
# ignoring commits referencing an issue of another project
assert_equal [ ] , Issue . find ( 4 ) . changesets
end
2007-08-25 18:41:55 +04:00
def test_for_changeset_comments_strip
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' ,
2007-11-20 15:07:28 +03:00
:committer = > 'foo <foo@example.com>' , :committed_on = > Time . now , :repository = > repository )
2007-08-25 18:41:55 +04:00
assert ( changeset . save )
assert_not_equal ( comment , changeset . comments )
assert_equal ( 'This is a loooooooooooooooooooooooooooong comment' , changeset . comments )
end
2008-03-14 21:59:10 +03:00
def test_for_urls_strip
repository = Repository :: Cvs . create ( :project = > Project . find ( 4 ) , :url = > ' :pserver:login:password@host:/path/to/the/repository' ,
:root_url = > 'foo ' )
assert repository . save
repository . reload
assert_equal ':pserver:login:password@host:/path/to/the/repository' , repository . url
assert_equal 'foo' , repository . root_url
end
2008-11-10 21:59:06 +03:00
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.' )
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.' )
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.' )
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.' )
assert_equal User . find ( 2 ) , c . user
end
2007-04-24 17:57:27 +04:00
end