]> source.dussan.org Git - redmine.git/commitdiff
Use issue path instead of bulk update issues path when only one issue is selected...
authorMarius Balteanu <marius.balteanu@zitec.com>
Mon, 26 Jul 2021 21:46:43 +0000 (21:46 +0000)
committerMarius Balteanu <marius.balteanu@zitec.com>
Mon, 26 Jul 2021 21:46:43 +0000 (21:46 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@21089 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/routes_helper.rb
app/views/context_menus/issues.html.erb
config/routes.rb
test/functional/context_menus_controller_test.rb
test/integration/routing/issues_test.rb

index 94c68c0a46524843d5264da6a0dbae3554695834..7c50bad1a63406212f4916f8ccfefcc671c18bca 100644 (file)
@@ -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
index cf402f1205f7de68d75f87186cae9bd2803607e6..9836b5dfffdf2bbc412df04e13da063776e990fa 100644 (file)
@@ -17,7 +17,8 @@
         <li>
           <%= 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 @@
     <a href="#" class="submenu"><%= l(:field_tracker) %></a>
     <ul>
     <% @trackers.each do |t| -%>
-        <li><%= context_menu_link t.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'tracker_id' => t}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link t.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'tracker_id' => t}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
     <% end -%>
     </ul>
@@ -46,7 +47,7 @@
     <a href="#" class="submenu"><%= l(:field_priority) %></a>
     <ul>
     <% @priorities.each do |p| -%>
-        <li><%= context_menu_link p.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'priority_id' => p}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link p.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'priority_id' => p}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.any?(&:priority_derived?)) %></li>
     <% end -%>
     </ul>
     <a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
     <ul>
     <% @versions.sort.each do |v| -%>
-        <li><%= context_menu_link format_version_name(v), bulk_update_issues_path(:ids => @issue_ids, :issue => {'fixed_version_id' => v}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link format_version_name(v), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'fixed_version_id' => v}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:edit] %></li>
     <% end -%>
-        <li><%= context_menu_link l(:label_none), bulk_update_issues_path(:ids => @issue_ids, :issue => {'fixed_version_id' => 'none'}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link l(:label_none), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'fixed_version_id' => 'none'}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:edit] %></li>
     </ul>
   </li>
     <a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
     <ul>
     <% if @assignables.include?(User.current) %>
-        <li><%= context_menu_link "<< #{l(:label_me)} >>", bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => User.current}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link "<< #{l(:label_me)} >>", _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'assigned_to_id' => User.current}, :back_url => @back), :method => :patch,
                                   :disabled => !@can[:edit] %></li>
     <% end %>
     <% @assignables.each do |u| -%>
-        <li><%= context_menu_link u.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => u}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link u.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'assigned_to_id' => u}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:edit] %></li>
     <% end -%>
-        <li><%= context_menu_link l(:label_nobody), bulk_update_issues_path(:ids => @issue_ids, :issue => {'assigned_to_id' => 'none'}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link l(:label_nobody), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'assigned_to_id' => 'none'}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:edit] %></li>
     </ul>
   </li>
     <a href="#" class="submenu"><%= l(:field_category) %></a>
     <ul>
     <% @project.issue_categories.each do |u| -%>
-        <li><%= context_menu_link u.name, bulk_update_issues_path(:ids => @issue_ids, :issue => {'category_id' => u}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link u.name, _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'category_id' => u}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && u == @issue.category), :disabled => !@can[:edit] %></li>
     <% end -%>
-        <li><%= context_menu_link l(:label_none), bulk_update_issues_path(:ids => @issue_ids, :issue => {'category_id' => 'none'}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link l(:label_none), _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'category_id' => 'none'}, :back_url => @back), :method => :patch,
                                   :selected => (@issue && @issue.category.nil?), :disabled => !@can[:edit] %></li>
     </ul>
   </li>
     <a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
     <ul>
     <% (0..10).map{|x|x*10}.each do |p| -%>
-        <li><%= context_menu_link "#{p}%", bulk_update_issues_path(:ids => @issue_ids, :issue => {'done_ratio' => p}, :back_url => @back), :method => :post,
+        <li><%= context_menu_link "#{p}%", _bulk_update_issues_path(@issue, :ids => @issue_ids, :issue => {'done_ratio' => p}, :back_url => @back), :method => :patch,
                                       :selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.any?(&:done_ratio_derived?)) %></li>
     <% end -%>
     </ul>
index 1fd513d00e75dac7c2a2e89748f5fe7cdfd50919..efb6db8e1e2ef338b96a47764639ac42ed1b8599 100644 (file)
@@ -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
index 5178ca61b2accb3801d357d3769dfb6ae5e86e6f..4b3b4aacac269586f5aa8d40dd8d049245ed5194 100644 (file)
@@ -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
index 6ce58218b5e077e4e6c9c7ef922f2955fb97a1c3..33cc72d2c3a9d4cef30bb9fa99e4d6cbd25925ad 100644 (file)
@@ -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