From 64fa65c486b82e988c03f08c13bbf2437642d55b Mon Sep 17 00:00:00 2001 From: Marius BALTEANU Date: Sun, 4 Jul 2021 16:39:41 +0300 Subject: [PATCH] Use issue path instead of bulk update issues path when using the context menu with only one issue selected (#33521) --- app/helpers/routes_helper.rb | 10 +++++ app/views/context_menus/issues.html.erb | 23 +++++------ config/routes.rb | 2 +- .../context_menus_controller_test.rb | 39 +++++++++++++++---- test/integration/routing/issues_test.rb | 1 + 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/app/helpers/routes_helper.rb b/app/helpers/routes_helper.rb index 94c68c0a4..7c50bad1a 100644 --- a/app/helpers/routes_helper.rb +++ b/app/helpers/routes_helper.rb @@ -87,6 +87,16 @@ module RoutesHelper end end + # Returns the path to bulk update issues or to issue path + # if only one issue is selected for bulk update + def _bulk_update_issues_path(issue, *args) + if issue + issue_path(issue, *args) + else + bulk_update_issues_path(*args) + end + end + def board_path(board, *args) project_board_path(board.project, board, *args) end diff --git a/app/views/context_menus/issues.html.erb b/app/views/context_menus/issues.html.erb index cf402f120..9836b5dff 100644 --- a/app/views/context_menus/issues.html.erb +++ b/app/views/context_menus/issues.html.erb @@ -17,7 +17,8 @@
  • <%= context_menu_link( s.name, - bulk_update_issues_path( + _bulk_update_issues_path( + @issue, :ids => @issue_ids, :issue => {:status_id => s}, :back_url => @back ), :method => :post, @@ -34,7 +35,7 @@ <%= l(:field_tracker) %> @@ -46,7 +47,7 @@ <%= l(:field_priority) %> @@ -58,10 +59,10 @@ <%= l(:field_fixed_version) %>
  • @@ -72,14 +73,14 @@ <%= l(:field_assigned_to) %> @@ -90,10 +91,10 @@ <%= l(:field_category) %> @@ -104,7 +105,7 @@ <%= l(:field_done_ratio) %> diff --git a/config/routes.rb b/config/routes.rb index 7e5e3eee9..910dc0d43 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -215,7 +215,7 @@ Rails.application.routes.draw do end collection do match 'bulk_edit', :via => [:get, :post] - post 'bulk_update' + match 'bulk_update', :via => [:post, :patch] end resources :time_entries, :controller => 'timelog', :only => [:new, :create] shallow do diff --git a/test/functional/context_menus_controller_test.rb b/test/functional/context_menus_controller_test.rb index 5178ca61b..4b3b4aaca 100644 --- a/test/functional/context_menus_controller_test.rb +++ b/test/functional/context_menus_controller_test.rb @@ -36,7 +36,7 @@ class ContextMenusControllerTest < Redmine::ControllerTest :time_entries, :custom_fields, :custom_fields_trackers, :custom_fields_projects - def test_context_menu_one_issue + def test_context_menu_one_issue_should_link_to_issue_path @request.session[:user_id] = 2 get( :issues, @@ -52,15 +52,38 @@ class ContextMenusControllerTest < Redmine::ControllerTest assert_select 'a.icon-del[href=?]', '/issues?ids%5B%5D=1', :text => 'Delete' # Statuses - assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bstatus_id%5D=5', :text => 'Closed' - assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bpriority_id%5D=8', :text => 'Immediate' + assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bstatus_id%5D=5', :text => 'Closed' + assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bpriority_id%5D=8', :text => 'Immediate' # No inactive priorities assert_select 'a', :text => /Inactive Priority/, :count => 0 # Versions - assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=3', :text => '2.0' - assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0' + assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bfixed_version_id%5D=3', :text => '2.0' + assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0' # Assignees - assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper' + assert_select 'a[href=?]', '/issues/1?ids%5B%5D=1&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper' + end + + def test_context_menu_multiple_issues_should_link_to_bulk_update_issues_path + @request.session[:user_id] = 2 + get :issues, :params => { + :ids => [1, 2] + } + assert_response :success + + assert_select 'a.icon-edit[href=?]', '/issues/bulk_edit?ids%5B%5D=1&ids%5B%5D=2', :text => 'Edit' + assert_select 'a.icon-copy[href=?]', '/issues/bulk_edit?copy=1&ids%5B%5D=1&ids%5B%5D=2', :text => 'Copy' + assert_select 'a.icon-del[href=?]', '/issues?ids%5B%5D=1&ids%5B%5D=2', :text => 'Delete' + + # Statuses + assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bstatus_id%5D=5', :text => 'Closed' + assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bpriority_id%5D=8', :text => 'Immediate' + # No inactive priorities + assert_select 'a', :text => /Inactive Priority/, :count => 0 + # Versions + assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bfixed_version_id%5D=3', :text => '2.0' + assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bfixed_version_id%5D=4', :text => 'eCookbook Subproject 1 - 2.0' + # Assignees + assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bassigned_to_id%5D=3', :text => 'Dave Lopper' end def test_context_menu_one_issue_by_anonymous @@ -272,12 +295,12 @@ class ContextMenusControllerTest < Redmine::ControllerTest get( :issues, :params => { - :ids => [1] + :ids => [1, 2] } ) assert_response :success - assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&issue%5Bassigned_to_id%5D=2', :text => / me / + assert_select 'a[href=?]', '/issues/bulk_update?ids%5B%5D=1&ids%5B%5D=2&issue%5Bassigned_to_id%5D=2', :text => / me / end def test_context_menu_should_propose_shared_versions_for_issues_from_different_projects diff --git a/test/integration/routing/issues_test.rb b/test/integration/routing/issues_test.rb index 6ce58218b..33cc72d2c 100644 --- a/test/integration/routing/issues_test.rb +++ b/test/integration/routing/issues_test.rb @@ -43,6 +43,7 @@ class RoutingIssuesTest < Redmine::RoutingTest should_route 'GET /issues/bulk_edit' => 'issues#bulk_edit' should_route 'POST /issues/bulk_edit' => 'issues#bulk_edit' # For updating the bulk edit form should_route 'POST /issues/bulk_update' => 'issues#bulk_update' + should_route 'PATCH /issues/bulk_update' => 'issues#bulk_update' end def test_issues_scoped_under_project -- 2.22.0