diff --git a/app/controllers/roles_controller.rb b/app/controllers/roles_controller.rb index 89f9ee497..9181c8317 100644 --- a/app/controllers/roles_controller.rb +++ b/app/controllers/roles_controller.rb @@ -96,20 +96,20 @@ class RolesController < ApplicationController end def destroy - begin - @role.destroy - rescue - 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 + @role.destroy redirect_to roles_path + rescue + flash.now[: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.now[:error] += l(:error_can_not_remove_role_reason_members_html, projects: links) + end + @roles = Role.sorted.to_a + render :index end def permissions diff --git a/test/functional/roles_controller_test.rb b/test/functional/roles_controller_test.rb index cbb2da3de..8a87657fa 100644 --- a/test/functional/roles_controller_test.rb +++ b/test/functional/roles_controller_test.rb @@ -244,7 +244,7 @@ class RolesControllerTest < Redmine::ControllerTest delete :destroy, params: { id: role.id } - assert_redirected_to roles_path + assert_response :success assert Role.find_by(id: role.id) assert flash[:error].present? @@ -262,7 +262,7 @@ class RolesControllerTest < Redmine::ControllerTest delete :destroy, params: { id: role.id } - assert_redirected_to roles_path + assert_response :success assert Role.find_by(id: role.id) assert flash[:error].present? assert_equal flash[:error], I18n.t(:error_can_not_remove_role)