summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2022-09-17 07:58:12 +0000
committerGo MAEDA <maeda@farend.jp>2022-09-17 07:58:12 +0000
commitab2b130e3c3de6b861264a01ccdb6c90a3d7e5d6 (patch)
tree3cab7489c9c78d3749756eba46d8c9d7aedf7fb5
parentd4b7634cc6c8f992a2d466c0302eebb7ccbd30a8 (diff)
downloadredmine-ab2b130e3c3de6b861264a01ccdb6c90a3d7e5d6.tar.gz
redmine-ab2b130e3c3de6b861264a01ccdb6c90a3d7e5d6.zip
Ignore statuses if workflow only defines identity transition (#37636).
Patch by Holger Just. git-svn-id: https://svn.redmine.org/redmine/trunk@21818 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/workflows_controller.rb2
-rw-r--r--app/models/tracker.rb1
-rw-r--r--test/functional/workflows_controller_test.rb16
-rw-r--r--test/unit/tracker_test.rb1
4 files changed, 20 insertions, 0 deletions
diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb
index c0d5f865e..3157ec6b3 100644
--- a/app/controllers/workflows_controller.rb
+++ b/app/controllers/workflows_controller.rb
@@ -161,6 +161,8 @@ class WorkflowsController < ApplicationController
role_ids = Role.all.select(&:consider_workflow?).map(&:id)
status_ids = WorkflowTransition.where(
:tracker_id => @trackers.map(&:id), :role_id => role_ids
+ ).where(
+ 'old_status_id <> new_status_id'
).distinct.pluck(:old_status_id, :new_status_id).flatten.uniq
@statuses = IssueStatus.where(:id => status_ids).sorted.to_a.presence
end
diff --git a/app/models/tracker.rb b/app/models/tracker.rb
index c5665054c..fcc61222f 100644
--- a/app/models/tracker.rb
+++ b/app/models/tracker.rb
@@ -108,6 +108,7 @@ class Tracker < ActiveRecord::Base
else
@issue_status_ids ||=
WorkflowTransition.where(:tracker_id => id).
+ where('old_status_id <> new_status_id').
distinct.pluck(:old_status_id, :new_status_id).flatten.uniq
end
end
diff --git a/test/functional/workflows_controller_test.rb b/test/functional/workflows_controller_test.rb
index d086801ae..05689090b 100644
--- a/test/functional/workflows_controller_test.rb
+++ b/test/functional/workflows_controller_test.rb
@@ -83,6 +83,22 @@ class WorkflowsControllerTest < Redmine::ControllerTest
)
end
+ def test_get_edit_with_role_and_tracker_should_not_include_only_identity_workflows
+ WorkflowTransition.delete_all
+ WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 1)
+ WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3)
+
+ get :edit, :params => {:role_id => 1, :tracker_id => 1}
+ assert_response :success
+
+ # statuses 1 and 5 not displayed
+ statuses = IssueStatus.where(:id => [2, 3]).sorted.pluck(:name)
+ assert_equal(
+ ["New issue"] + statuses,
+ css_select('table.workflows.transitions-always tbody tr td:first').map(&:text).map(&:strip)
+ )
+ end
+
def test_get_edit_should_include_allowed_statuses_for_new_issues
WorkflowTransition.delete_all
WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 0, :new_status_id => 1)
diff --git a/test/unit/tracker_test.rb b/test/unit/tracker_test.rb
index f81aeb63b..8eef06e58 100644
--- a/test/unit/tracker_test.rb
+++ b/test/unit/tracker_test.rb
@@ -89,6 +89,7 @@ class TrackerTest < ActiveSupport::TestCase
def test_issue_statuses
tracker = Tracker.find(1)
WorkflowTransition.delete_all
+ WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 1)
WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3)
WorkflowTransition.create!(:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 5)