Project

General

Profile

Defect #42226 » fix-tracker-deletion-error-message.patch

Go MAEDA, 2025-02-05 16:10

View differences:

app/controllers/trackers_controller.rb
90 90
    @tracker = Tracker.find(params[:id])
91 91
    unless @tracker.issues.empty?
92 92
      projects = Project.joins(:issues).where(issues: {tracker_id: @tracker.id}).sorted.distinct
93
      tracker_project_ids = @tracker.projects.ids.to_set
93 94
      links = projects.map do |p|
94
        view_context.link_to(p, project_issues_path(p, set_filter: 1, tracker_id: @tracker.id, status_id: '*'))
95
        if tracker_project_ids.include?(p.id)
96
          view_context.link_to(p, project_issues_path(p, set_filter: 1, tracker_id: @tracker.id, status_id: '*'))
97
        else
98
          # This tracker is not enabled in the project,
99
          # so we can't link to the issues list
100
          ERB::Util.html_escape(p.name)
101
        end
95 102
      end.join(', ')
96 103
      flash[:error] = l(:error_can_not_delete_tracker_html, projects: links.html_safe)
97 104
    else
test/functional/trackers_controller_test.rb
273 273

  
274 274
  def test_destroy_tracker_in_use
275 275
    tracker = Tracker.generate!(name: 'In use')
276
    projects = Array.new(2) do
276
    project1, project2 = Array.new(2) do
277 277
      project = Project.generate!
278 278
      Issue.generate!(project: project, tracker: tracker)
279 279
      project
280 280
    end
281
    # Remove all associated trackers from project2
282
    project2.trackers = []
283
    project2.save!
281 284

  
282 285
    assert_no_difference 'Tracker.count' do
283 286
      delete :destroy, params: {id: tracker.id}
284 287
    end
285 288
    assert_redirected_to action: 'index'
286
    assert_match /The following projects have issues with this tracker:/, flash[:error]
287
    projects.each do |project|
288
      assert_match /#{project.name}/, flash[:error]
289
    end
289
    assert_includes flash[:error], 'The following projects have issues with this tracker:'
290

  
291
    # Ensure project1 is listed with a link to its issue list
292
    assert_includes flash[:error], project1.name
293
    assert_match %r{<a href=".*#{project1.identifier}.*">}, flash[:error]
294

  
295
    # project2 should only appear as text in the error message, without a link
296
    assert_includes flash[:error], project2.name
297
    assert_no_match %r{<a href=".*#{project2.identifier}.*">}, flash[:error]
290 298
  end
291 299

  
292 300
  def test_get_fields
(1-1/2)