diff --git a/app/models/user_query.rb b/app/models/user_query.rb index 95572db10..ee2d1e059 100644 --- a/app/models/user_query.rb +++ b/app/models/user_query.rb @@ -153,4 +153,16 @@ class UserQuery < Query #{sql_for_field(:mail, operator, value, emails, 'address')}) SQL end + + def joins_for_order_statement(order_options) + joins = [super] + + if order_options + if order_options.include?('auth_source') + joins << "LEFT OUTER JOIN #{AuthSource.table_name} auth_sources ON auth_sources.id = #{queried_table_name}.auth_source_id" + end + end + + joins.any? ? joins.join(' ') : nil + end end diff --git a/test/unit/user_query_test.rb b/test/unit/user_query_test.rb index d014ab0be..0e67370e9 100644 --- a/test/unit/user_query_test.rb +++ b/test/unit/user_query_test.rb @@ -169,6 +169,19 @@ class UserQueryTest < ActiveSupport::TestCase assert_not users.map(&:id).include? 1 end + def test_auth_source_ordering + user = User.find(1) + user.update_column :auth_source_id, 1 + + q = UserQuery.new name: '_' + q.column_names = ['id', 'auth_source.name'] + q.sort_criteria = 'auth_source.name' + + users = q.results_scope + assert users.many? + assert_equal user, users.last + end + def find_users_with_query(query) User.where(query.statement).to_a end