From e8757fec2b618116531c05158f5de59133b467bb Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 28 Jul 2013 20:46:53 +0000 Subject: [PATCH] Merged r12056 from trunk (#14447). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.3-stable@12064 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/issue.rb | 8 ++++++-- test/unit/issue_test.rb | 26 +++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index f8700e9be..ee392b970 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -744,12 +744,16 @@ class Issue < ActiveRecord::Base initial_status = IssueStatus.find_by_id(status_id_was) end initial_status ||= status - + + initial_assigned_to_id = assigned_to_id_changed? ? assigned_to_id_was : assigned_to_id + assignee_transitions_allowed = initial_assigned_to_id.present? && + (user.id == initial_assigned_to_id || user.group_ids.include?(initial_assigned_to_id)) + statuses = initial_status.find_new_statuses_allowed_to( user.admin ? Role.all : user.roles_for_project(project), tracker, author == user, - assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id + assignee_transitions_allowed ) statuses << initial_status unless statuses.empty? statuses << IssueStatus.default if include_default diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index dea7d2797..a998e7952 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -488,9 +488,9 @@ class IssueTest < ActiveSupport::TestCase WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false) - WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, - :new_status_id => 4, :author => false, - :assignee => true) + WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, + :old_status_id => 1, :new_status_id => 4, + :author => false, :assignee => true) WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5, :author => true, :assignee => true) @@ -516,6 +516,26 @@ class IssueTest < ActiveSupport::TestCase :project_id => 1, :author => user, :assigned_to => user) assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id) + + group = Group.generate! + group.users << user + issue = Issue.generate!(:tracker => tracker, :status => status, + :project_id => 1, :author => user, + :assigned_to => group) + assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id) + end + + def test_new_statuses_allowed_to_should_consider_group_assignment + WorkflowTransition.delete_all + WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, + :old_status_id => 1, :new_status_id => 4, + :author => false, :assignee => true) + user = User.find(2) + group = Group.generate! + group.users << user + + issue = Issue.generate!(:author_id => 1, :assigned_to => group) + assert_include 4, issue.new_statuses_allowed_to(user).map(&:id) end def test_new_statuses_allowed_to_should_return_all_transitions_for_admin