Project

General

Profile

Feature #42441 » 0001-Improve-role-deletion-error-message-to-display-proje.patch

Mizuki ISHIKAWA, 2025-03-19 08:49

View differences:

app/controllers/roles_controller.rb
99 99
    begin
100 100
      @role.destroy
101 101
    rescue
102
      flash[:error] =  l(:error_can_not_remove_role)
102
      flash[:error] = l(:error_can_not_remove_role)
103

  
104
      if @role.members.present?
105
        projects = Project.joins(:members).where(members: { role_id: @role.id }).distinct.sorted
106
        links = @role.members.map(&:project).uniq.map do |p|
107
          view_context.link_to(p, settings_project_path(p, tab: 'members'))
108
        end.join(', ')
109
        flash[:error] += l(:error_can_not_remove_role_reason_members_html, projects: links)
110
      end
103 111
    end
104 112
    redirect_to roles_path
105 113
  end
config/locales/en.yml
207 207
  error_can_not_delete_custom_field: Unable to delete custom field
208 208
  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>"
209 209
  error_can_not_remove_role: "This role is in use and cannot be deleted."
210
  error_can_not_remove_role_reason_members_html: "<p>The following projects have members with this role:<br>%{projects}</p>"
210 211
  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
211 212
  error_can_not_archive_project: This project cannot be archived
212 213
  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
test/functional/roles_controller_test.rb
239 239
    assert_nil Role.find_by_id(r.id)
240 240
  end
241 241

  
242
  def test_destroy_role_in_use
243
    delete :destroy, :params => {:id => 1}
244
    assert_redirected_to '/roles'
245
    assert_equal 'This role is in use and cannot be deleted.', flash[:error]
246
    assert_not_nil Role.find_by_id(1)
242
  def test_destroy_role_with_members
243
    role = Role.find(2) # Developer, has members
244

  
245
    delete :destroy, params: { id: role.id }
246

  
247
    assert_redirected_to roles_path
248
    assert Role.find_by(id: role.id)
249

  
250
    assert flash[:error].present?
251
    assert_includes flash[:error], I18n.t(:error_can_not_remove_role)
252

  
253
    expected_dependency_projects = Project.where(identifier: ['ecookbook', 'onlinestore', 'private-child'])
254
    expected_dependency_projects.each do |project|
255
      assert_includes flash[:error], project.name
256
      assert_includes flash[:error], settings_project_path(project, tab: 'members')
257
    end
258
  end
259

  
260
  def test_destroy_builtin
261
    role = Role.anonymous
262

  
263
    delete :destroy, params: { id: role.id }
264

  
265
    assert_redirected_to roles_path
266
    assert Role.find_by(id: role.id)
267
    assert flash[:error].present?
268
    assert_equal flash[:error], I18n.t(:error_can_not_remove_role)
247 269
  end
248 270

  
249 271
  def test_permissions
(2-2/2)