mirror of
https://github.com/meineerde/redmine.git
synced 2026-02-01 03:57:15 +00:00
Improve role deletion error message to display projects containing members under the role (#42441).
Patch by Mizuki ISHIKAWA (user:ishikawa999). git-svn-id: https://svn.redmine.org/redmine/trunk@23619 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
1e9f1229e6
commit
630f2863ba
@ -99,7 +99,15 @@ class RolesController < ApplicationController
|
||||
begin
|
||||
@role.destroy
|
||||
rescue
|
||||
flash[:error] = l(:error_can_not_remove_role)
|
||||
flash[:error] = l(:error_can_not_remove_role)
|
||||
|
||||
if @role.members.present?
|
||||
projects = Project.joins(members: :member_roles).where(member_roles: { role_id: @role.id }).distinct.sorted
|
||||
links = projects.map do |p|
|
||||
view_context.link_to(p, settings_project_path(p, tab: 'members'))
|
||||
end.join(', ')
|
||||
flash[:error] += l(:error_can_not_remove_role_reason_members_html, projects: links)
|
||||
end
|
||||
end
|
||||
redirect_to roles_path
|
||||
end
|
||||
|
||||
@ -207,6 +207,7 @@ en:
|
||||
error_can_not_delete_custom_field: Unable to delete custom field
|
||||
error_can_not_delete_tracker_html: "This tracker contains issues and cannot be deleted.<p>The following projects have issues with this tracker:<br>%{projects}</p>"
|
||||
error_can_not_remove_role: "This role is in use and cannot be deleted."
|
||||
error_can_not_remove_role_reason_members_html: "<p>The following projects have members with this role:<br>%{projects}</p>"
|
||||
error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
|
||||
error_can_not_archive_project: This project cannot be archived
|
||||
error_issue_done_ratios_not_updated: "Issue done ratios not updated."
|
||||
|
||||
@ -239,11 +239,33 @@ class RolesControllerTest < Redmine::ControllerTest
|
||||
assert_nil Role.find_by_id(r.id)
|
||||
end
|
||||
|
||||
def test_destroy_role_in_use
|
||||
delete :destroy, :params => {:id => 1}
|
||||
assert_redirected_to '/roles'
|
||||
assert_equal 'This role is in use and cannot be deleted.', flash[:error]
|
||||
assert_not_nil Role.find_by_id(1)
|
||||
def test_destroy_role_with_members
|
||||
role = Role.find(2) # Developer, has members
|
||||
|
||||
delete :destroy, params: { id: role.id }
|
||||
|
||||
assert_redirected_to roles_path
|
||||
assert Role.find_by(id: role.id)
|
||||
|
||||
assert flash[:error].present?
|
||||
assert_includes flash[:error], I18n.t(:error_can_not_remove_role)
|
||||
|
||||
expected_dependency_projects = Project.where(identifier: ['ecookbook', 'onlinestore', 'private-child'])
|
||||
expected_dependency_projects.each do |project|
|
||||
assert_includes flash[:error], project.name
|
||||
assert_includes flash[:error], settings_project_path(project, tab: 'members')
|
||||
end
|
||||
end
|
||||
|
||||
def test_destroy_builtin
|
||||
role = Role.anonymous
|
||||
|
||||
delete :destroy, params: { id: role.id }
|
||||
|
||||
assert_redirected_to roles_path
|
||||
assert Role.find_by(id: role.id)
|
||||
assert flash[:error].present?
|
||||
assert_equal flash[:error], I18n.t(:error_can_not_remove_role)
|
||||
end
|
||||
|
||||
def test_permissions
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user