##// END OF EJS Templates
Speeds up rendering of the project list for users who belong to hundreds of projects....
Speeds up rendering of the project list for users who belong to hundreds of projects. git-svn-id: http://svn.redmine.org/redmine/trunk@16123 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r15434:45a0daa16a14
r15741:f8df935dcada
Show More
repository_test.rb
513 lines | 17.6 KiB | text/x-ruby | RubyLexer
/ test / unit / repository_test.rb
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538 # Redmine - project management software
Jean-Philippe Lang
Updates copyright for 2016....
r14856 # Copyright (C) 2006-2016 Jean-Philippe Lang
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 #
# 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.
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538 #
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 # 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.
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538 #
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 # 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
Commit messages are now scanned for referenced or fixed issue IDs....
r470
Eric Davis
Upgraded to Rails 2.3.4 (#3597)...
r2773 class RepositoryTest < ActiveSupport::TestCase
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 fixtures :projects,
:trackers,
:projects_trackers,
Jean-Philippe Lang
Adds missing fixtures when running tests from scratch....
r4434 :enabled_modules,
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 :repositories,
:issues,
:issue_statuses,
Jean-Philippe Lang
Adds missing fixtures when running tests from scratch....
r4434 :issue_categories,
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 :changesets,
:changes,
:users,
Toshi MARUYAMA
add missing fixtures...
r13529 :email_addresses,
Jean-Philippe Lang
Adds missing fixtures when running tests from scratch....
r4434 :members,
:member_roles,
:roles,
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 :enumerations
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Toshi MARUYAMA
scm: add test to override human_attribute_name of log_encoding...
r8837 include Redmine::I18n
Jean-Philippe Lang
Fixed: performance issue on RepositoriesController#revisions when a changeset has a great number of changes (eg. 100,000)....
r532 def setup
@repository = Project.find(1).repository
end
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Toshi MARUYAMA
scm: add test to override human_attribute_name of log_encoding...
r8837 def test_blank_log_encoding_error_message
set_language_if_valid 'en'
repo = Repository::Bazaar.new(
:project => Project.find(3),
:url => "/test",
:log_encoding => ''
)
assert !repo.save
Jean-Philippe Lang
Replaced "can't" with "cannot" in error messages....
r13399 assert_include "Commit messages encoding cannot be blank",
Toshi MARUYAMA
scm: add test to override human_attribute_name of log_encoding...
r8837 repo.errors.full_messages
end
def test_blank_log_encoding_error_message_fr
set_language_if_valid 'fr'
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 str = "Encodage des messages de commit doit \xc3\xaatre renseign\xc3\xa9(e)".force_encoding('UTF-8')
Toshi MARUYAMA
scm: add test to override human_attribute_name of log_encoding...
r8837 repo = Repository::Bazaar.new(
:project => Project.find(3),
:url => "/test"
)
assert !repo.save
assert_include str, repo.errors.full_messages
end
Jean-Philippe Lang
Adds missing native eol properties....
r2781 def test_create
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925 repository = Repository::Subversion.new(:project => Project.find(3))
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 assert !repository.save
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538
Jean-Philippe Lang
Adds missing native eol properties....
r2781 repository.url = "svn://localhost"
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 assert repository.save
repository.reload
Toshi MARUYAMA
scm: space cleanup in unit repository test....
r5495
Jean-Philippe Lang
* Added links to previous and next revisions on revision view (patch by Cyril Mougel slightly edited)...
r925 project = Project.find(3)
Jean-Philippe Lang
Adds missing native eol properties....
r2781 assert_equal repository, project.repository
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 end
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Jean-Philippe Lang
Don't allow 2 repositories with blank identifier (#19400)....
r13760 def test_2_repositories_with_same_identifier_in_different_projects_should_be_valid
Repository::Subversion.create!(:project_id => 2, :identifier => 'foo', :url => 'file:///foo')
r = Repository::Subversion.new(:project_id => 3, :identifier => 'foo', :url => 'file:///bar')
assert r.save
end
def test_2_repositories_with_same_identifier_should_not_be_valid
Repository::Subversion.create!(:project_id => 3, :identifier => 'foo', :url => 'file:///foo')
r = Repository::Subversion.new(:project_id => 3, :identifier => 'foo', :url => 'file:///bar')
assert !r.save
end
def test_2_repositories_with_blank_identifier_should_not_be_valid
Repository::Subversion.create!(:project_id => 3, :identifier => '', :url => 'file:///foo')
r = Repository::Subversion.new(:project_id => 3, :identifier => '', :url => 'file:///bar')
assert !r.save
end
Jean-Philippe Lang
Fixed that 2 repositories can be created with blank/nil identifier (#19400)....
r13774 def test_2_repositories_with_blank_identifier_and_one_as_default_should_not_be_valid
Repository::Subversion.create!(:project_id => 3, :identifier => '', :url => 'file:///foo', :is_default => true)
r = Repository::Subversion.new(:project_id => 3, :identifier => '', :url => 'file:///bar')
assert !r.save
end
def test_2_repositories_with_blank_and_nil_identifier_should_not_be_valid
Repository::Subversion.create!(:project_id => 3, :identifier => nil, :url => 'file:///foo')
r = Repository::Subversion.new(:project_id => 3, :identifier => '', :url => 'file:///bar')
assert !r.save
end
Jean-Philippe Lang
Adds support for multiple repositories per project (#779)....
r8530 def test_first_repository_should_be_set_as_default
Toshi MARUYAMA
code layout cleanup test/unit/repository_test.rb...
r8838 repository1 = Repository::Subversion.new(
:project => Project.find(3),
:identifier => 'svn1',
:url => 'file:///svn1'
)
Jean-Philippe Lang
Adds support for multiple repositories per project (#779)....
r8530 assert repository1.save
assert repository1.is_default?
Toshi MARUYAMA
code layout cleanup test/unit/repository_test.rb...
r8838 repository2 = Repository::Subversion.new(
:project => Project.find(3),
:identifier => 'svn2',
:url => 'file:///svn2'
)
Jean-Philippe Lang
Adds support for multiple repositories per project (#779)....
r8530 assert repository2.save
assert !repository2.is_default?
assert_equal repository1, Project.find(3).repository
assert_equal [repository1, repository2], Project.find(3).repositories.sort
end
Toshi MARUYAMA
add unit test to have one default repository...
r12217 def test_default_repository_should_be_one
assert_equal 0, Project.find(3).repositories.count
repository1 = Repository::Subversion.new(
:project => Project.find(3),
:identifier => 'svn1',
:url => 'file:///svn1'
)
assert repository1.save
assert repository1.is_default?
repository2 = Repository::Subversion.new(
:project => Project.find(3),
:identifier => 'svn2',
:url => 'file:///svn2',
:is_default => true
)
assert repository2.save
assert repository2.is_default?
repository1.reload
assert !repository1.is_default?
assert_equal repository2, Project.find(3).repository
assert_equal [repository2, repository1], Project.find(3).repositories.sort
end
Jean-Philippe Lang
Make repository identifier accept underscores (#11192)....
r9692 def test_identifier_should_accept_letters_digits_dashes_and_underscores
r = Repository::Subversion.new(
:project_id => 3,
:identifier => 'svn-123_45',
:url => 'file:///svn'
)
assert r.save
end
Toshi MARUYAMA
remove trailing white-spaces from RepositoryTest...
r12286
Jean-Philippe Lang
Repository Identifier should be frozen (#11109)....
r9898 def test_identifier_should_not_be_frozen_for_a_new_repository
assert_equal false, Repository.new.identifier_frozen?
end
def test_identifier_should_not_be_frozen_for_a_saved_repository_with_blank_identifier
Toshi MARUYAMA
Rails4: replace deprecated Relation#update_all at RepositoryTest...
r12282 Repository.where(:id => 10).update_all(["identifier = ''"])
Jean-Philippe Lang
Repository Identifier should be frozen (#11109)....
r9898 assert_equal false, Repository.find(10).identifier_frozen?
end
def test_identifier_should_be_frozen_for_a_saved_repository_with_valid_identifier
Toshi MARUYAMA
Rails4: replace deprecated Relation#update_all at RepositoryTest...
r12282 Repository.where(:id => 10).update_all(["identifier = 'abc123'"])
Jean-Philippe Lang
Repository Identifier should be frozen (#11109)....
r9898 assert_equal true, Repository.find(10).identifier_frozen?
end
def test_identifier_should_not_accept_change_if_frozen
r = Repository.new(:identifier => 'foo')
r.stubs(:identifier_frozen?).returns(true)
r.identifier = 'bar'
assert_equal 'foo', r.identifier
end
def test_identifier_should_accept_change_if_not_frozen
r = Repository.new(:identifier => 'foo')
r.stubs(:identifier_frozen?).returns(false)
r.identifier = 'bar'
assert_equal 'bar', r.identifier
end
Jean-Philippe Lang
Make repository identifier accept underscores (#11192)....
r9692
Jean-Philippe Lang
Clear changesets and changes with raw sql when deleting a repository (#1627)....
r1651 def test_destroy
Jean-Philippe Lang
Renamed #changes association to #filechanges (clash with AR::Base.changes that triggers errors with Rails 3.2.5)....
r9576 repository = Repository.find(10)
changesets = repository.changesets.count
changes = repository.filechanges.count
Jean-Philippe Lang
Clear changesets and changes with raw sql when deleting a repository (#1627)....
r1651 assert_difference 'Changeset.count', -changesets do
assert_difference 'Change.count', -changes do
Repository.find(10).destroy
end
end
end
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Jean-Philippe Lang
Fixed that changesets parents associations are not deleted when deleting a repository....
r8727 def test_destroy_should_delete_parents_associations
changeset = Changeset.find(102)
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 changeset.parents = Changeset.where(:id => [100, 101]).to_a
Toshi MARUYAMA
Rails4 compatibility of RepositoryTest...
r12195 assert_difference 'Changeset.connection.select_all("select * from changeset_parents").count', -2 do
Jean-Philippe Lang
Fixed that changesets parents associations are not deleted when deleting a repository....
r8727 Repository.find(10).destroy
end
end
Jean-Philippe Lang
Adds a test for changeset/issue relations deletion....
r8728 def test_destroy_should_delete_issues_associations
changeset = Changeset.find(102)
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 changeset.issues = Issue.where(:id => [1, 2]).to_a
Toshi MARUYAMA
Rails4 compatibility of RepositoryTest...
r12195 assert_difference 'Changeset.connection.select_all("select * from changesets_issues").count', -2 do
Jean-Philippe Lang
Adds a test for changeset/issue relations deletion....
r8728 Repository.find(10).destroy
end
end
Jean-Philippe Lang
Ability to disable unused SCM adapters in application settings....
r1493 def test_should_not_create_with_disabled_scm
# disable Subversion
Jean-Philippe Lang
When destroying a user, remove all references to that user (#7296)....
r4606 with_settings :enabled_scm => ['Darcs', 'Git'] do
Toshi MARUYAMA
scm: code clean up unit repository test....
r5589 repository = Repository::Subversion.new(
:project => Project.find(3), :url => "svn://localhost")
Jean-Philippe Lang
When destroying a user, remove all references to that user (#7296)....
r4606 assert !repository.save
Jean-Philippe Lang
Changed assertions to make them work with Rails2/3 ruby1.8/1.9 different behaviours....
r8988 assert_include I18n.translate('activerecord.errors.messages.invalid'),
repository.errors[:type]
Jean-Philippe Lang
When destroying a user, remove all references to that user (#7296)....
r4606 end
Jean-Philippe Lang
Ability to disable unused SCM adapters in application settings....
r1493 end
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 def test_scan_changesets_for_issue_ids
Jean-Philippe Lang
Slight tests fixes....
r2053 Setting.default_language = 'en'
Jean-Philippe Lang
Commit message parser:...
r848 Setting.commit_ref_keywords = 'refs , references, IssueID'
Jean-Philippe Lang
Ability to define commit keywords per tracker (#7590)....
r11978 Setting.commit_update_keywords = [
Toshi MARUYAMA
code format cleanup RepositoryTest...
r12285 {'keywords' => 'fixes , closes',
'status_id' => IssueStatus.where(:is_closed => true).first.id,
'done_ratio' => '90'}
Jean-Philippe Lang
Ability to define commit keywords per tracker (#7590)....
r11978 ]
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 Setting.default_language = 'en'
ActionMailer::Base.deliveries.clear
Toshi MARUYAMA
scm: space cleanup in unit repository test....
r5495
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 # make sure issue 1 is not already closed
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 fixed_issue = Issue.find(1)
Jean-Philippe Lang
Code cleanup....
r13126 assert !fixed_issue.closed?
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 old_status = fixed_issue.status
Toshi MARUYAMA
scm: space cleanup in unit repository test....
r5495
Jean-Philippe Lang
Tests should not change settings....
r9766 with_settings :notified_events => %w(issue_added issue_updated) do
Repository.scan_changesets_for_issue_ids
end
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 assert_equal [101, 102], Issue.find(3).changeset_ids
Toshi MARUYAMA
scm: space cleanup in unit repository test....
r5495
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 # fixed issues
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 fixed_issue.reload
Jean-Philippe Lang
Code cleanup....
r13126 assert fixed_issue.closed?
Jean-Philippe Lang
Added the ability to set the "done ratio" of issues fixed by commit (original path by Nikolay Solakov, slightly edited)....
r810 assert_equal 90, fixed_issue.done_ratio
assert_equal [101], fixed_issue.changeset_ids
Toshi MARUYAMA
scm: space cleanup in unit repository test....
r5495
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 # issue change
Jean-Philippe Lang
Replaces find(:first) calls....
r10701 journal = fixed_issue.journals.reorder('created_on desc').first
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 assert_equal User.find_by_login('dlopper'), journal.user
assert_equal 'Applied in changeset r2.', journal.notes
Toshi MARUYAMA
scm: space cleanup in unit repository test....
r5495
Jean-Philippe Lang
Create a journal and send an email when an issue is closed by commit (#609)....
r1112 # 2 email notifications
assert_equal 2, ActionMailer::Base.deliveries.size
mail = ActionMailer::Base.deliveries.first
Jean-Philippe Lang
Do not do assertions on mail class....
r8871 assert_not_nil mail
Toshi MARUYAMA
scm: code clean up unit repository test....
r5589 assert mail.subject.starts_with?(
"[#{fixed_issue.project.name} - #{fixed_issue.tracker.name} ##{fixed_issue.id}]")
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 assert_mail_body_match(
"Status changed from #{old_status} to #{fixed_issue.status}", mail)
Toshi MARUYAMA
scm: space cleanup in unit repository test....
r5495
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 # ignoring commits referencing an issue of another project
assert_equal [], Issue.find(4).changesets
end
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Jean-Philippe Lang
Changeset comments are now stripped before being stored in the database (patch by Nicholas Wieland)....
r651 def test_for_changeset_comments_strip
Toshi MARUYAMA
scm: code clean up unit repository test....
r5589 repository = Repository::Mercurial.create(
:project => Project.find( 4 ),
:url => '/foo/bar/baz' )
Jean-Philippe Lang
Changeset comments are now stripped before being stored in the database (patch by Nicholas Wieland)....
r651 comment = <<-COMMENT
This is a loooooooooooooooooooooooooooong comment
COMMENT
changeset = Changeset.new(
Toshi MARUYAMA
scm: code clean up unit repository test....
r5589 :comments => comment, :commit_date => Time.now,
:revision => 0, :scmid => 'f39b7922fb3c',
:committer => 'foo <foo@example.com>',
:committed_on => Time.now, :repository => repository )
Jean-Philippe Lang
Changeset comments are now stripped before being stored in the database (patch by Nicholas Wieland)....
r651 assert( changeset.save )
assert_not_equal( comment, changeset.comments )
Toshi MARUYAMA
scm: code clean up unit repository test....
r5589 assert_equal( 'This is a loooooooooooooooooooooooooooong comment',
changeset.comments )
Jean-Philippe Lang
Changeset comments are now stripped before being stored in the database (patch by Nicholas Wieland)....
r651 end
Toshi MARUYAMA
scm: add feature of per project repository log encoding setting (#1735)....
r4862
Toshi MARUYAMA
scm: rename test_for_urls_strip to test_for_urls_strip_cvs at unit repository test....
r6705 def test_for_urls_strip_cvs
Toshi MARUYAMA
scm: add feature of per project repository log encoding setting (#1735)....
r4862 repository = Repository::Cvs.create(
:project => Project.find(4),
:url => ' :pserver:login:password@host:/path/to/the/repository',
:root_url => 'foo ',
:log_encoding => 'UTF-8')
Jean-Philippe Lang
Strip repository urls (closes #852)....
r1234 assert repository.save
repository.reload
Toshi MARUYAMA
scm: code clean up unit repository test....
r5589 assert_equal ':pserver:login:password@host:/path/to/the/repository',
repository.url
Jean-Philippe Lang
Strip repository urls (closes #852)....
r1234 assert_equal 'foo', repository.root_url
end
Toshi MARUYAMA
scm: add feature of per project repository log encoding setting (#1735)....
r4862
Toshi MARUYAMA
scm: add test to strip subversion repository path at unit repository test....
r6706 def test_for_urls_strip_subversion
repository = Repository::Subversion.create(
:project => Project.find(4),
:url => ' file:///dummy ')
assert repository.save
repository.reload
assert_equal 'file:///dummy', repository.url
end
Toshi MARUYAMA
scm: add test to strip git repository path at unit repository test....
r6707 def test_for_urls_strip_git
repository = Repository::Git.create(
:project => Project.find(4),
:url => ' c:\dummy ')
assert repository.save
repository.reload
assert_equal 'c:\dummy', repository.url
end
Jean-Philippe Lang
Maps repository users to Redmine users (#1383)....
r2004 def test_manual_user_mapping
Jean-Philippe Lang
Cleanup of finders with :conditions option....
r11733 assert_no_difference "Changeset.where('user_id <> 2').count" do
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 c = Changeset.create!(
:repository => @repository,
:committer => 'foo',
:committed_on => Time.now,
:revision => 100,
:comments => 'Committed by foo.'
)
Jean-Philippe Lang
Maps repository users to Redmine users (#1383)....
r2004 assert_nil c.user
@repository.committer_ids = {'foo' => '2'}
assert_equal User.find(2), c.reload.user
# committer is now mapped
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 c = Changeset.create!(
:repository => @repository,
:committer => 'foo',
:committed_on => Time.now,
:revision => 101,
:comments => 'Another commit by foo.'
)
Jean-Philippe Lang
Maps repository users to Redmine users (#1383)....
r2004 assert_equal User.find(2), c.user
end
end
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Jean-Philippe Lang
Maps repository users to Redmine users (#1383)....
r2004 def test_auto_user_mapping_by_username
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 c = Changeset.create!(
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538 :repository => @repository,
:committer => 'jsmith',
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 :committed_on => Time.now,
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538 :revision => 100,
:comments => 'Committed by john.'
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 )
Jean-Philippe Lang
Maps repository users to Redmine users (#1383)....
r2004 assert_equal User.find(2), c.user
end
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075
Jean-Philippe Lang
Maps repository users to Redmine users (#1383)....
r2004 def test_auto_user_mapping_by_email
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 c = Changeset.create!(
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538 :repository => @repository,
:committer => 'john <jsmith@somenet.foo>',
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 :committed_on => Time.now,
Toshi MARUYAMA
scm: code clean up unit repository test....
r5538 :revision => 100,
:comments => 'Committed by john.'
Toshi MARUYAMA
scm: code clean up test/unit/repository_test.rb....
r5075 )
Jean-Philippe Lang
Maps repository users to Redmine users (#1383)....
r2004 assert_equal User.find(2), c.user
end
Toshi MARUYAMA
scm: add filesystem available test at unit repository test (#4273)....
r5244
def test_filesystem_avaialbe
klass = Repository::Filesystem
assert klass.scm_adapter_class
assert_equal true, klass.scm_available
end
Toshi MARUYAMA
scm: add a test of a repository model method "merge_extra_info()" in unit test (#7146, #7047)....
r5647
Jean-Philippe Lang
Make sure that Repository#extra_info returns a Hash or nil (#16032)....
r12573 def test_extra_info_should_not_return_non_hash_value
repo = Repository.new
repo.extra_info = "foo"
assert_nil repo.extra_info
end
Toshi MARUYAMA
scm: add a test of a repository model method "merge_extra_info()" in unit test (#7146, #7047)....
r5647 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
Jean-Philippe Lang
Fixed undefined method `<=>' for nil:NilClass when sorting repositories with nil identifiers (#10827)....
r9436
def test_sort_should_not_raise_an_error_with_nil_identifiers
r1 = Repository.new
r2 = Repository.new
assert_nothing_raised do
[r1, r2].sort
end
end
Jean-Baptiste Barth
Move some RepositoriesController logic to Repository#stats_by_author (#13487)....
r12997
def test_stats_by_author_reflect_changesets_and_changes
repository = Repository.find(10)
Jean-Baptiste Barth
Honnor committers/users mapping in repository statistics (#13487)....
r12999 expected = {"Dave Lopper"=>{:commits_count=>10, :changes_count=>3}}
Jean-Baptiste Barth
Move some RepositoriesController logic to Repository#stats_by_author (#13487)....
r12997 assert_equal expected, repository.stats_by_author
set = Changeset.create!(
:repository => repository,
:committer => 'dlopper',
:committed_on => Time.now,
:revision => 101,
:comments => 'Another commit by foo.'
)
Jean-Baptiste Barth
Fix text failing on some rubies/sql drivers because of improper length in Change#action (#13487)....
r12998 Change.create!(:changeset => set, :action => 'A', :path => '/path/to/file1')
Change.create!(:changeset => set, :action => 'A', :path => '/path/to/file2')
Jean-Baptiste Barth
Honnor committers/users mapping in repository statistics (#13487)....
r12999 expected = {"Dave Lopper"=>{:commits_count=>11, :changes_count=>5}}
assert_equal expected, repository.stats_by_author
end
def test_stats_by_author_honnor_committers
# in fact it is really tested above, but let's have a dedicated test
# to ensure things are dynamically linked to Users
User.find_by_login("dlopper").update_attribute(:firstname, "Dave's")
repository = Repository.find(10)
expected = {"Dave's Lopper"=>{:commits_count=>10, :changes_count=>3}}
assert_equal expected, repository.stats_by_author
end
def test_stats_by_author_doesnt_drop_unmapped_users
repository = Repository.find(10)
Changeset.create!(
:repository => repository,
:committer => 'unnamed <foo@bar.net>',
:committed_on => Time.now,
:revision => 101,
:comments => 'Another commit by foo.'
)
assert repository.stats_by_author.has_key?("unnamed <foo@bar.net>")
end
def test_stats_by_author_merge_correctly
# as we honnor users->committer map and it's not injective,
# we must be sure merges happen correctly and stats are not
# wiped out when two source counts map to the same user.
#
# Here we have Changeset's with committer="dlopper" and others
# with committer="dlopper <dlopper@somefoo.net>"
repository = Repository.find(10)
expected = {"Dave Lopper"=>{:commits_count=>10, :changes_count=>3}}
assert_equal expected, repository.stats_by_author
set = Changeset.create!(
:repository => repository,
:committer => 'dlopper <dlopper@somefoo.net>',
:committed_on => Time.now,
:revision => 101,
:comments => 'Another commit by foo.'
)
expected = {"Dave Lopper"=>{:commits_count=>11, :changes_count=>3}}
Jean-Baptiste Barth
Move some RepositoriesController logic to Repository#stats_by_author (#13487)....
r12997 assert_equal expected, repository.stats_by_author
end
Jean-Philippe Lang
Misc tests....
r13349
def test_fetch_changesets
# 2 repositories in fixtures
Repository::Subversion.any_instance.expects(:fetch_changesets).twice.returns(true)
Repository.fetch_changesets
end
Jean-Philippe Lang
Be more conservative when fetching constants in Repository.factory (#23758)....
r15434
def test_repository_class
assert_equal Repository::Subversion, Repository.repository_class('Subversion')
assert_equal Repository::Git, Repository.repository_class('Git')
assert_nil Repository.factory('Serializer')
assert_nil Repository.factory('Query')
end
def test_factory
assert_instance_of Repository::Subversion, Repository.factory('Subversion')
assert_instance_of Repository::Git, Repository.factory('Git')
assert_nil Repository.factory('Serializer')
assert_nil Repository.factory('Query')
end
Jean-Philippe Lang
Commit messages are now scanned for referenced or fixed issue IDs....
r470 end