diff --git a/app/models/issue.rb b/app/models/issue.rb index 0e634bf8b..d6b021546 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -257,6 +257,7 @@ class Issue < ActiveRecord::Base def reload(*args) @workflow_rule_by_attribute = nil @assignable_versions = nil + @assignable_users = nil @relations = nil @spent_hours = nil @total_spent_hours = nil @@ -979,12 +980,12 @@ class Issue < ActiveRecord::Base def assignable_users return [] if project.nil? - users = project.assignable_users(tracker).to_a - users << author if author && author.active? - if assigned_to_id_was.present? && assignee = Principal.find_by_id(assigned_to_id_was) - users << assignee - end - users.uniq.sort + user_ids = [] + user_ids << author_id if author&.active? + user_ids << assigned_to_id_was if assigned_to_id_was.present? + project_users = project.assignable_users(tracker) + user_ids.concat project_users.reorder(nil).ids + @assignable_users = user_ids.empty? ? [] : Principal.where(:id => user_ids).sorted.to_a end # Versions that the issue can be assigned to diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index b056ffb18..2e1fc5ae8 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -2595,6 +2595,15 @@ class IssueTest < ActiveSupport::TestCase assert_kind_of User, Issue.find(1).assignable_users.first end + test "#assignable_users should be sorted" do + %w(a č u ř c í ý š З д ч и).each do |firstname| + Member.create!(:project_id => 1, :principal => User.generate!(:firstname => firstname), :role_ids => [1]) + end + issue = Issue.new(:project => Project.find(1)) + assignable_users = Issue.find(1).assignable_users + assert_equal User.where(:id => assignable_users).sorted.pluck(:firstname), assignable_users.map(&:firstname) + end + test "#assignable_users should include the issue author" do non_project_member = User.generate! issue = Issue.generate!(:author => non_project_member)