Allows multiple roles on the same project (#706). Prerequisite for user groups feature.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2726 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang
2009-05-10 10:54:31 +00:00
parent 814e138c2a
commit 7dccf9fda6
65 changed files with 340 additions and 175 deletions
+1 -1
View File
@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class ActivityTest < Test::Unit::TestCase
fixtures :projects, :versions, :attachments, :users, :roles, :members, :issues, :journals, :journal_details,
fixtures :projects, :versions, :attachments, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
:trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages
def setup
+1 -1
View File
@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class ChangesetTest < Test::Unit::TestCase
fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :trackers
fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :member_roles, :trackers
def setup
end
+5 -1
View File
@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class IssueTest < Test::Unit::TestCase
fixtures :projects, :users, :members,
fixtures :projects, :users, :members, :member_roles,
:trackers, :projects_trackers,
:issue_statuses, :issue_categories,
:enumerations,
@@ -242,6 +242,10 @@ class IssueTest < Test::Unit::TestCase
assert !Issue.new(:due_date => 1.day.ago.to_date, :status => IssueStatus.find(:first, :conditions => {:is_closed => true})).overdue?
end
def test_assignable_users
assert_kind_of User, Issue.find(1).assignable_users.first
end
def test_create_should_send_email_notification
ActionMailer::Base.deliveries.clear
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 3, :status_id => 1, :priority => Enumeration.priorities.first, :subject => 'test_create', :estimated_hours => '1:30')
+1
View File
@@ -22,6 +22,7 @@ class MailHandlerTest < Test::Unit::TestCase
:enabled_modules,
:roles,
:members,
:member_roles,
:issues,
:issue_statuses,
:workflows,
+1 -1
View File
@@ -19,7 +19,7 @@ require File.dirname(__FILE__) + '/../test_helper'
class MailerTest < Test::Unit::TestCase
include Redmine::I18n
fixtures :projects, :issues, :users, :members, :documents, :attachments, :news, :tokens, :journals, :journal_details, :changesets, :trackers, :issue_statuses, :enumerations, :messages, :boards, :repositories
fixtures :projects, :issues, :users, :members, :member_roles, :documents, :attachments, :news, :tokens, :journals, :journal_details, :changesets, :trackers, :issue_statuses, :enumerations, :messages, :boards, :repositories
def test_generated_links_in_emails
ActionMailer::Base.deliveries.clear
+29 -9
View File
@@ -18,34 +18,54 @@
require File.dirname(__FILE__) + '/../test_helper'
class MemberTest < Test::Unit::TestCase
fixtures :users, :projects, :roles, :members
fixtures :users, :projects, :roles, :members, :member_roles
def setup
@jsmith = Member.find(1)
end
def test_create
member = Member.new(:project_id => 1, :user_id => 4, :role_id => 1)
assert member.save
member = Member.new(:project_id => 1, :user_id => 4, :role_ids => [1, 2])
assert member.save
member.reload
assert_equal 2, member.roles.size
assert_equal Role.find(1), member.roles.sort.first
end
def test_update
assert_equal "eCookbook", @jsmith.project.name
assert_equal "Manager", @jsmith.role.name
assert_equal "Manager", @jsmith.roles.first.name
assert_equal "jsmith", @jsmith.user.login
@jsmith.role = Role.find(2)
@jsmith.mail_notification = !@jsmith.mail_notification
assert @jsmith.save
end
def test_update_roles
assert_equal 1, @jsmith.roles.size
@jsmith.role_ids = [1, 2]
assert @jsmith.save
assert_equal 2, @jsmith.reload.roles.size
end
def test_validate
member = Member.new(:project_id => 1, :user_id => 2, :role_id =>2)
# same use can't have more than one role for a project
member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [2])
# same use can't have more than one membership for a project
assert !member.save
member = Member.new(:project_id => 1, :user_id => 2, :role_ids => [])
# must have one role at least
assert !member.save
end
def test_destroy
@jsmith.destroy
def test_destroy
assert_difference 'Member.count', -1 do
assert_difference 'MemberRole.count', -1 do
@jsmith.destroy
end
end
assert_raise(ActiveRecord::RecordNotFound) { Member.find(@jsmith.id) }
end
end
+3 -3
View File
@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class MessageTest < Test::Unit::TestCase
fixtures :projects, :roles, :members, :boards, :messages, :users, :watchers
fixtures :projects, :roles, :members, :member_roles, :boards, :messages, :users, :watchers
def setup
@board = Board.find(1)
@@ -116,7 +116,7 @@ class MessageTest < Test::Unit::TestCase
author = message.author
assert message.editable_by?(author)
author.role_for_project(message.project).remove_permission!(:edit_own_messages)
author.roles_for_project(message.project).first.remove_permission!(:edit_own_messages)
assert !message.reload.editable_by?(author.reload)
end
@@ -125,7 +125,7 @@ class MessageTest < Test::Unit::TestCase
author = message.author
assert message.destroyable_by?(author)
author.role_for_project(message.project).remove_permission!(:delete_own_messages)
author.roles_for_project(message.project).first.remove_permission!(:delete_own_messages)
assert !message.reload.destroyable_by?(author.reload)
end
end
+1 -1
View File
@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class NewsTest < Test::Unit::TestCase
fixtures :projects, :users, :roles, :members, :enabled_modules, :news
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :news
def valid_news
{ :title => 'Test news', :description => 'Lorem ipsum etc', :author => User.find(:first) }
+2 -2
View File
@@ -20,8 +20,8 @@ require File.dirname(__FILE__) + '/../test_helper'
class ProjectTest < Test::Unit::TestCase
fixtures :projects, :enabled_modules,
:issues, :issue_statuses, :journals, :journal_details,
:users, :members, :roles, :projects_trackers, :trackers, :boards,
:queries
:users, :members, :member_roles, :roles, :projects_trackers, :trackers, :boards,
:queries
def setup
@ecookbook = Project.find(1)
+1 -1
View File
@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class QueryTest < Test::Unit::TestCase
fixtures :projects, :enabled_modules, :users, :members, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :watchers, :custom_fields, :custom_values, :versions, :queries
fixtures :projects, :enabled_modules, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :watchers, :custom_fields, :custom_values, :versions, :queries
def test_custom_fields_for_all_projects_should_be_available_in_global_queries
query = Query.new(:project => nil, :name => '_')
+2 -1
View File
@@ -19,7 +19,8 @@ require File.dirname(__FILE__) + '/../test_helper'
class SearchTest < Test::Unit::TestCase
fixtures :users,
:members,
:members,
:member_roles,
:projects,
:roles,
:enabled_modules,
+6 -6
View File
@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class UserTest < Test::Unit::TestCase
fixtures :users, :members, :projects
fixtures :users, :members, :projects, :roles, :member_roles
def setup
@admin = User.find(1)
@@ -130,14 +130,14 @@ class UserTest < Test::Unit::TestCase
assert_equal key, @jsmith.rss_key
end
def test_role_for_project
def test_roles_for_project
# user with a role
role = @jsmith.role_for_project(Project.find(1))
assert_kind_of Role, role
assert_equal "Manager", role.name
roles = @jsmith.roles_for_project(Project.find(1))
assert_kind_of Role, roles.first
assert_equal "Manager", roles.first.name
# user with no role
assert !@dlopper.role_for_project(Project.find(2)).member?
assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}
end
def test_mail_notification_all