##// END OF EJS Templates
scm: strict Ruby 1.9 string test in unit model test....
scm: strict Ruby 1.9 string test in unit model test. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5160 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r5040:c0515720704e
r5040:c0515720704e
Show More
changeset_test.rb
290 lines | 9.9 KiB | text/x-ruby | RubyLexer
/ test / unit / changeset_test.rb
Jean-Philippe Lang
Remove invalid utf8 sequences from commit comments and author name (#4773)....
r3352 # encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2010 Jean-Philippe Lang
Jean-Philippe Lang
* Referencing issues in commit messages: enter * in 'Referencing keywords' to link any issue id without using keywords....
r905 #
# 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.
Jean-Baptiste Barth
Use absolute paths in test/**/* requires for Ruby 1.9.2 compatibility. #4050...
r4395 require File.expand_path('../../test_helper', __FILE__)
Jean-Philippe Lang
* Referencing issues in commit messages: enter * in 'Referencing keywords' to link any issue id without using keywords....
r905
Eric Davis
Upgraded to Rails 2.3.4 (#3597)...
r2773 class ChangesetTest < ActiveSupport::TestCase
Jean-Philippe Lang
Allows multiple roles on the same project (#706). Prerequisite for user groups feature....
r2627 fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :member_roles, :trackers
Jean-Philippe Lang
* Referencing issues in commit messages: enter * in 'Referencing keywords' to link any issue id without using keywords....
r905
def setup
end
def test_ref_keywords_any
Eric Davis
Added observers to watch model objects for mail delivery instead of calling Mailer....
r2548 ActionMailer::Base.deliveries.clear
Jean-Philippe Lang
* Referencing issues in commit messages: enter * in 'Referencing keywords' to link any issue id without using keywords....
r905 Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
Setting.commit_fix_done_ratio = '90'
Setting.commit_ref_keywords = '*'
Setting.commit_fix_keywords = 'fixes , closes'
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => 'New commit (#2). Fixes #1')
c.scan_comment_for_issue_ids
assert_equal [1, 2], c.issue_ids.sort
fixed = Issue.find(1)
assert fixed.closed?
assert_equal 90, fixed.done_ratio
Eric Davis
Added observers to watch model objects for mail delivery instead of calling Mailer....
r2548 assert_equal 1, ActionMailer::Base.deliveries.size
Jean-Philippe Lang
* Referencing issues in commit messages: enter * in 'Referencing keywords' to link any issue id without using keywords....
r905 end
Jean-Philippe Lang
Fixed: using '*' as keyword for repository referencing keywords doesn't work when issue id is at the beginning of a line (#1253)....
r1437
Jean-Philippe Lang
Automatic spent time logging from commit messages (#4155)....
r4356 def test_ref_keywords
Setting.commit_ref_keywords = 'refs'
Setting.commit_fix_keywords = ''
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => 'Ignores #2. Refs #1')
c.scan_comment_for_issue_ids
assert_equal [1], c.issue_ids.sort
end
def test_ref_keywords_any_only
Setting.commit_ref_keywords = '*'
Setting.commit_fix_keywords = ''
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => 'Ignores #2. Refs #1')
c.scan_comment_for_issue_ids
assert_equal [1, 2], c.issue_ids.sort
end
def test_ref_keywords_any_with_timelog
Setting.commit_ref_keywords = '*'
Setting.commit_logtime_enabled = '1'
Jean-Philippe Lang
Fixes syntax for time logging in commit messages (#7630, #7718)....
r4831 {
'2' => 2.0,
'2h' => 2.0,
'2hours' => 2.0,
'15m' => 0.25,
'15min' => 0.25,
'3h15' => 3.25,
'3h15m' => 3.25,
'3h15min' => 3.25,
'3:15' => 3.25,
'3.25' => 3.25,
'3.25h' => 3.25,
'3,25' => 3.25,
'3,25h' => 3.25,
}.each do |syntax, expected_hours|
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => 24.hours.ago,
:comments => "Worked on this issue #1 @#{syntax}",
:revision => '520',
:user => User.find(2))
assert_difference 'TimeEntry.count' do
c.scan_comment_for_issue_ids
end
assert_equal [1], c.issue_ids.sort
time = TimeEntry.first(:order => 'id desc')
assert_equal 1, time.issue_id
assert_equal 1, time.project_id
assert_equal 2, time.user_id
assert_equal expected_hours, time.hours, "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
assert_equal Date.yesterday, time.spent_on
assert time.activity.is_default?
assert time.comments.include?('r520'), "r520 was expected in time_entry comments: #{time.comments}"
Jean-Philippe Lang
Automatic spent time logging from commit messages (#4155)....
r4356 end
end
def test_ref_keywords_closing_with_timelog
Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
Setting.commit_ref_keywords = '*'
Setting.commit_fix_keywords = 'fixes , closes'
Setting.commit_logtime_enabled = '1'
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
Jean-Philippe Lang
Fixes syntax for time logging in commit messages (#7630, #7718)....
r4831 :comments => 'This is a comment. Fixes #1 @4.5, #2 @1',
Jean-Philippe Lang
Automatic spent time logging from commit messages (#4155)....
r4356 :user => User.find(2))
assert_difference 'TimeEntry.count', 2 do
c.scan_comment_for_issue_ids
end
assert_equal [1, 2], c.issue_ids.sort
assert Issue.find(1).closed?
assert Issue.find(2).closed?
times = TimeEntry.all(:order => 'id desc', :limit => 2)
assert_equal [1, 2], times.collect(&:issue_id).sort
end
Jean-Philippe Lang
Fixed: using '*' as keyword for repository referencing keywords doesn't work when issue id is at the beginning of a line (#1253)....
r1437 def test_ref_keywords_any_line_start
Setting.commit_ref_keywords = '*'
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => '#1 is the reason of this commit')
c.scan_comment_for_issue_ids
assert_equal [1], c.issue_ids.sort
end
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925
Eric Davis
Allow referencing issue numbers in brackets. This style is used by other...
r2749 def test_ref_keywords_allow_brackets_around_a_issue_number
Setting.commit_ref_keywords = '*'
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => '[#1] Worked on this issue')
c.scan_comment_for_issue_ids
assert_equal [1], c.issue_ids.sort
end
def test_ref_keywords_allow_brackets_around_multiple_issue_numbers
Setting.commit_ref_keywords = '*'
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => '[#1 #2, #3] Worked on these')
c.scan_comment_for_issue_ids
assert_equal [1,2,3], c.issue_ids.sort
end
Jean-Philippe Lang
Allow commits to reference issues of parent projects and subprojects (#4674)....
r3243
def test_commit_referencing_a_subproject_issue
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => 'refs #5, a subproject issue')
c.scan_comment_for_issue_ids
assert_equal [5], c.issue_ids.sort
assert c.issues.first.project != c.project
end
def test_commit_referencing_a_parent_project_issue
# repository of child project
r = Repository::Subversion.create!(:project => Project.find(3), :url => 'svn://localhost/test')
c = Changeset.new(:repository => r,
:committed_on => Time.now,
:comments => 'refs #2, an issue of a parent project')
c.scan_comment_for_issue_ids
assert_equal [2], c.issue_ids.sort
assert c.issues.first.project != c.project
end
Toshi MARUYAMA
scm: code clean up test/unit/changeset_test.rb....
r4864
Jean-Philippe Lang
Fixes Changeset#text_tag for numeric scmid (#6681)....
r4376 def test_text_tag_revision
c = Changeset.new(:revision => '520')
Jean-Philippe Lang
Automatic spent time logging from commit messages (#4155)....
r4356 assert_equal 'r520', c.text_tag
end
Toshi MARUYAMA
scm: code clean up test/unit/changeset_test.rb....
r4864
Jean-Philippe Lang
Automatic spent time logging from commit messages (#4155)....
r4356 def test_text_tag_hash
c = Changeset.new(:scmid => '7234cb2750b63f47bff735edc50a1c0a433c2518', :revision => '7234cb2750b63f47bff735edc50a1c0a433c2518')
assert_equal 'commit:7234cb2750b63f47bff735edc50a1c0a433c2518', c.text_tag
end
Eric Davis
Allow referencing issue numbers in brackets. This style is used by other...
r2749
Jean-Philippe Lang
Fixes Changeset#text_tag for numeric scmid (#6681)....
r4376 def test_text_tag_hash_all_number
c = Changeset.new(:scmid => '0123456789', :revision => '0123456789')
assert_equal 'commit:0123456789', c.text_tag
end
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925 def test_previous
Jean-Philippe Lang
Postgresql 8.3 compatibility fix (#834)....
r1348 changeset = Changeset.find_by_revision('3')
assert_equal Changeset.find_by_revision('2'), changeset.previous
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925 end
def test_previous_nil
Jean-Philippe Lang
Postgresql 8.3 compatibility fix (#834)....
r1348 changeset = Changeset.find_by_revision('1')
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925 assert_nil changeset.previous
end
def test_next
Jean-Philippe Lang
Postgresql 8.3 compatibility fix (#834)....
r1348 changeset = Changeset.find_by_revision('2')
assert_equal Changeset.find_by_revision('3'), changeset.next
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925 end
def test_next_nil
Jean-Philippe Lang
Fixed: RepositoriesController#revision may show wrong revision (#3779)....
r2784 changeset = Changeset.find_by_revision('10')
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925 assert_nil changeset.next
end
Toshi MARUYAMA
scm: add feature of per project repository log encoding setting (#1735)....
r4862
Jean-Philippe Lang
Remove invalid utf8 sequences from commit comments and author name (#4773)....
r3352 def test_comments_should_be_converted_to_utf8
Toshi MARUYAMA
scm: refactor scm log encoding test (#1735, #3396, #7597)....
r4841 proj = Project.find(3)
str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
Toshi MARUYAMA
scm: add feature of per project repository log encoding setting (#1735)....
r4862 r = Repository::Bazaar.create!(
:project => proj, :url => '/tmp/test/bazaar',
:log_encoding => 'ISO-8859-1' )
Toshi MARUYAMA
scm: refactor scm log encoding test (#1735, #3396, #7597)....
r4841 assert r
c = Changeset.new(:repository => r,
:committed_on => Time.now,
:revision => '123',
:scmid => '12345',
:comments => str)
assert( c.save )
Jean-Philippe Lang
Remove invalid utf8 sequences from commit comments and author name (#4773)....
r3352 assert_equal "Texte encodé en ISO-8859-1.", c.comments
end
Toshi MARUYAMA
scm: code clean up test/unit/changeset_test.rb....
r4864
Jean-Philippe Lang
Remove invalid utf8 sequences from commit comments and author name (#4773)....
r3352 def test_invalid_utf8_sequences_in_comments_should_be_stripped
Toshi MARUYAMA
scm: refactor scm log encoding test (#1735, #3396, #7597)....
r4841 proj = Project.find(3)
Toshi MARUYAMA
scm: for log in Ruby 1.9, replace invalid UTF-8 to '?' instead of removing....
r4806 str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
Toshi MARUYAMA
scm: add feature of per project repository log encoding setting (#1735)....
r4862 r = Repository::Bazaar.create!(
:project => proj, :url => '/tmp/test/bazaar',
:log_encoding => 'UTF-8' )
Toshi MARUYAMA
scm: refactor scm log encoding test (#1735, #3396, #7597)....
r4841 assert r
c = Changeset.new(:repository => r,
:committed_on => Time.now,
:revision => '123',
:scmid => '12345',
:comments => str)
assert( c.save )
Toshi MARUYAMA
scm: for log in Ruby 1.9, replace invalid UTF-8 to '?' instead of removing....
r4806 if str.respond_to?(:force_encoding)
assert_equal "Texte encod? en ISO-8859-1.", c.comments
else
assert_equal "Texte encod en ISO-8859-1.", c.comments
end
Jean-Philippe Lang
Remove invalid utf8 sequences from commit comments and author name (#4773)....
r3352 end
Toshi MARUYAMA
Changing revision label and identifier at SCM adapter level (#3724, #6092)...
r4493
Toshi MARUYAMA
scm: Ruby 1.9 compatibility for log....
r4805 def test_comments_should_be_converted_all_latin1_to_utf8
s1 = "\xC2\x80"
s2 = "\xc3\x82\xc2\x80"
if s1.respond_to?(:force_encoding)
Toshi MARUYAMA
scm: strict Ruby 1.9 string test in unit model test....
r5040 s3 = s1.dup
s4 = s2.dup
Toshi MARUYAMA
scm: Ruby 1.9 compatibility for log....
r4805 s1.force_encoding('ASCII-8BIT')
s2.force_encoding('ASCII-8BIT')
s3.force_encoding('ISO-8859-1')
s4.force_encoding('UTF-8')
assert_equal s3.encode('UTF-8'), s4
end
Toshi MARUYAMA
scm: refactor scm log encoding test (#1735, #3396, #7597)....
r4841 proj = Project.find(3)
Toshi MARUYAMA
scm: add feature of per project repository log encoding setting (#1735)....
r4862 r = Repository::Bazaar.create!(
:project => proj, :url => '/tmp/test/bazaar',
:log_encoding => 'ISO-8859-1' )
assert r
Toshi MARUYAMA
scm: refactor scm log encoding test (#1735, #3396, #7597)....
r4841 c = Changeset.new(:repository => r,
:committed_on => Time.now,
:revision => '123',
:scmid => '12345',
:comments => s1)
assert( c.save )
Toshi MARUYAMA
scm: Ruby 1.9 compatibility for log....
r4805 assert_equal s2, c.comments
end
Toshi MARUYAMA
Changing revision label and identifier at SCM adapter level (#3724, #6092)...
r4493 def test_identifier
c = Changeset.find_by_revision('1')
assert_equal c.revision, c.identifier
end
Jean-Philippe Lang
* Referencing issues in commit messages: enter * in 'Referencing keywords' to link any issue id without using keywords....
r905 end