mirror of
https://github.com/redmine/redmine.git
synced 2026-08-30 11:07:09 +02:00
Limit trackers for new issue to certain roles (#7839).
git-svn-id: http://svn.redmine.org/redmine/trunk@15464 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -1864,6 +1864,31 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_new_should_propose_allowed_trackers
|
||||
role = Role.find(1)
|
||||
role.set_permission_trackers 'add_issues', [1, 3]
|
||||
role.save!
|
||||
@request.session[:user_id] = 2
|
||||
|
||||
get :new, :project_id => 1
|
||||
assert_response :success
|
||||
assert_select 'select[name=?]', 'issue[tracker_id]' do
|
||||
assert_select 'option', 2
|
||||
assert_select 'option[value="1"]'
|
||||
assert_select 'option[value="3"]'
|
||||
end
|
||||
end
|
||||
|
||||
def test_new_without_allowed_trackers_should_respond_with_403
|
||||
role = Role.find(1)
|
||||
role.set_permission_trackers 'add_issues', []
|
||||
role.save!
|
||||
@request.session[:user_id] = 2
|
||||
|
||||
get :new, :project_id => 1
|
||||
assert_response 403
|
||||
end
|
||||
|
||||
def test_new_should_preselect_default_version
|
||||
version = Version.generate!(:project_id => 1)
|
||||
Project.find(1).update_attribute :default_version_id, version.id
|
||||
@@ -2432,6 +2457,23 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_nil issue.custom_field_value(cf2)
|
||||
end
|
||||
|
||||
def test_create_should_ignore_unallowed_trackers
|
||||
role = Role.find(1)
|
||||
role.set_permission_trackers :add_issues, [3]
|
||||
role.save!
|
||||
@request.session[:user_id] = 2
|
||||
|
||||
issue = new_record(Issue) do
|
||||
post :create, :project_id => 1, :issue => {
|
||||
:tracker_id => 1,
|
||||
:status_id => 1,
|
||||
:subject => 'Test'
|
||||
}
|
||||
assert_response 302
|
||||
end
|
||||
assert_equal 3, issue.tracker_id
|
||||
end
|
||||
|
||||
def test_post_create_with_watchers
|
||||
@request.session[:user_id] = 2
|
||||
ActionMailer::Base.deliveries.clear
|
||||
|
||||
@@ -132,6 +132,22 @@ class RolesControllerTest < ActionController::TestCase
|
||||
assert_equal [:edit_project], role.permissions
|
||||
end
|
||||
|
||||
def test_update_trackers_permissions
|
||||
put :update, :id => 1, :role => {
|
||||
:permissions_all_trackers => {'add_issues' => '0'},
|
||||
:permissions_tracker_ids => {'add_issues' => ['1', '3', '']}
|
||||
}
|
||||
|
||||
assert_redirected_to '/roles'
|
||||
role = Role.find(1)
|
||||
|
||||
assert_equal({'add_issues' => '0'}, role.permissions_all_trackers)
|
||||
assert_equal({'add_issues' => ['1', '3']}, role.permissions_tracker_ids)
|
||||
|
||||
assert_equal false, role.permissions_all_trackers?(:add_issues)
|
||||
assert_equal [1, 3], role.permissions_tracker_ids(:add_issues).sort
|
||||
end
|
||||
|
||||
def test_update_with_failure
|
||||
put :update, :id => 1, :role => {:name => ''}
|
||||
assert_response :success
|
||||
|
||||
@@ -1438,6 +1438,91 @@ class IssueTest < ActiveSupport::TestCase
|
||||
assert_not_include project, Issue.allowed_target_projects(User.find(1))
|
||||
end
|
||||
|
||||
def test_allowed_target_trackers_with_one_role_allowed_on_all_trackers
|
||||
user = User.generate!
|
||||
role = Role.generate!
|
||||
role.add_permission! :add_issues
|
||||
role.set_permission_trackers :add_issues, :all
|
||||
role.save!
|
||||
User.add_to_project(user, Project.find(1), role)
|
||||
|
||||
assert_equal [1, 2, 3], Issue.new(:project => Project.find(1)).allowed_target_trackers(user).ids.sort
|
||||
end
|
||||
|
||||
def test_allowed_target_trackers_with_one_role_allowed_on_some_trackers
|
||||
user = User.generate!
|
||||
role = Role.generate!
|
||||
role.add_permission! :add_issues
|
||||
role.set_permission_trackers :add_issues, [1, 3]
|
||||
role.save!
|
||||
User.add_to_project(user, Project.find(1), role)
|
||||
|
||||
assert_equal [1, 3], Issue.new(:project => Project.find(1)).allowed_target_trackers(user).ids.sort
|
||||
end
|
||||
|
||||
def test_allowed_target_trackers_with_two_roles_allowed_on_some_trackers
|
||||
user = User.generate!
|
||||
role1 = Role.generate!
|
||||
role1.add_permission! :add_issues
|
||||
role1.set_permission_trackers :add_issues, [1]
|
||||
role1.save!
|
||||
role2 = Role.generate!
|
||||
role2.add_permission! :add_issues
|
||||
role2.set_permission_trackers :add_issues, [3]
|
||||
role2.save!
|
||||
User.add_to_project(user, Project.find(1), [role1, role2])
|
||||
|
||||
assert_equal [1, 3], Issue.new(:project => Project.find(1)).allowed_target_trackers(user).ids.sort
|
||||
end
|
||||
|
||||
def test_allowed_target_trackers_with_two_roles_allowed_on_all_trackers_and_some_trackers
|
||||
user = User.generate!
|
||||
role1 = Role.generate!
|
||||
role1.add_permission! :add_issues
|
||||
role1.set_permission_trackers :add_issues, :all
|
||||
role1.save!
|
||||
role2 = Role.generate!
|
||||
role2.add_permission! :add_issues
|
||||
role2.set_permission_trackers :add_issues, [1, 3]
|
||||
role2.save!
|
||||
User.add_to_project(user, Project.find(1), [role1, role2])
|
||||
|
||||
assert_equal [1, 2, 3], Issue.new(:project => Project.find(1)).allowed_target_trackers(user).ids.sort
|
||||
end
|
||||
|
||||
def test_allowed_target_trackers_should_not_consider_roles_without_add_issues_permission
|
||||
user = User.generate!
|
||||
role1 = Role.generate!
|
||||
role1.remove_permission! :add_issues
|
||||
role1.set_permission_trackers :add_issues, :all
|
||||
role1.save!
|
||||
role2 = Role.generate!
|
||||
role2.add_permission! :add_issues
|
||||
role2.set_permission_trackers :add_issues, [1, 3]
|
||||
role2.save!
|
||||
User.add_to_project(user, Project.find(1), [role1, role2])
|
||||
|
||||
assert_equal [1, 3], Issue.new(:project => Project.find(1)).allowed_target_trackers(user).ids.sort
|
||||
end
|
||||
|
||||
def test_allowed_target_trackers_without_project_should_be_empty
|
||||
issue = Issue.new
|
||||
assert_nil issue.project
|
||||
assert_equal [], issue.allowed_target_trackers(User.find(2)).ids
|
||||
end
|
||||
|
||||
def test_allowed_target_trackers_should_include_current_tracker
|
||||
user = User.generate!
|
||||
role = Role.generate!
|
||||
role.add_permission! :add_issues
|
||||
role.set_permission_trackers :add_issues, [3]
|
||||
role.save!
|
||||
User.add_to_project(user, Project.find(1), role)
|
||||
|
||||
issue = Issue.generate!(:project => Project.find(1), :tracker => Tracker.find(1))
|
||||
assert_equal [1, 3], issue.allowed_target_trackers(user).ids.sort
|
||||
end
|
||||
|
||||
def test_move_to_another_project_with_same_category
|
||||
issue = Issue.find(1)
|
||||
issue.project = Project.find(2)
|
||||
|
||||
Reference in New Issue
Block a user