diff --git a/app/models/query.rb b/app/models/query.rb index fcd2c9e95..980976e5f 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -618,7 +618,7 @@ class Query < ActiveRecord::Base author_values = [] author_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? author_values += - users.sort_by(&:status). + users.sort_by{|p| [p.status, p]}. collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")]} author_values << [l(:label_user_anonymous), User.anonymous.id.to_s] author_values @@ -628,7 +628,7 @@ class Query < ActiveRecord::Base assigned_to_values = [] assigned_to_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged? assigned_to_values += - (Setting.issue_group_assignment? ? principals : users).sort_by(&:status). + (Setting.issue_group_assignment? ? principals : users).sort_by{|p| [p.status, p]}. collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")]} assigned_to_values end @@ -658,7 +658,7 @@ class Query < ActiveRecord::Base watcher_values = [["<< #{l(:label_me)} >>", "me"]] if User.current.allowed_to?(:view_issue_watchers, self.project, global: true) watcher_values += - principals.sort_by(&:status). + principals.sort_by{|p| [p.status, p]}. collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUS[s.status]}")]} end watcher_values diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index c8ba72cad..bd975d71f 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -3291,4 +3291,19 @@ class QueryTest < ActiveSupport::TestCase assert_equal 'board', query.display_type end + + def test_assigned_to_values_should_be_sorted_by_status_and_name + User.delete_all + 20.times do |i| + str = format('%03d', i) + status = i.even? ? User::STATUS_ACTIVE : User::STATUS_LOCKED + User.create!(firstname: str, lastname: str, login: str, mail: "#{str}@example.net", status: status) + end + query = IssueQuery.new(:name => '_') + query.stubs(:users).returns(User.all) + + expected_names = User.order(:status, :firstname).all.map(&:name) + assigned_to_values = query.assigned_to_values + assert_equal expected_names, assigned_to_values[1..].map(&:first) + end end