Remove duplicate user entries from user search
fixes ADMIN-2844 flag=none Test plan - Follow repro steps in ticket and ensure you only get the user returned once Change-Id: I3807ab2bfa6793a6a9d81524a4b42a2910c32cb5 Reviewed-on: https://gerrit.instructure.com/208018 Tested-by: Jenkins Reviewed-by: Jeremy Stanley <jeremy@instructure.com> QA-Review: Jeremy Stanley <jeremy@instructure.com> Product-Review: Mysti Lilla <mysti@instructure.com>
This commit is contained in:
parent
31a701307e
commit
58e5f4ae2d
|
@ -29,7 +29,6 @@ module UserSearch
|
|||
|
||||
context.shard.activate do
|
||||
users_scope = context_scope(context, searcher, options.slice(:enrollment_state, :include_inactive_enrollments))
|
||||
|
||||
users_scope = users_scope.from("(#{conditions_statement(search_term, context.root_account, users_scope)}) AS users")
|
||||
users_scope = order_scope(users_scope, context, options.slice(:order, :sort))
|
||||
roles_scope(users_scope, context, options.slice(:enrollment_type, :enrollment_role,
|
||||
|
@ -175,15 +174,21 @@ module UserSearch
|
|||
end
|
||||
|
||||
def self.login_sql(users_scope, params)
|
||||
users_scope.select("users.*, MAX(current_login_at) as last_login").
|
||||
users_scope.select("users.*, MAX(logins.current_login_at) as last_login").
|
||||
joins(:pseudonyms).
|
||||
joins("LEFT JOIN #{Pseudonym.quoted_table_name} AS logins ON logins.user_id = users.id
|
||||
AND logins.account_id = #{User.connection.quote(params[:account])}
|
||||
AND logins.workflow_state = 'active'").
|
||||
where(pseudonyms: {account_id: params[:account], workflow_state: 'active'}).
|
||||
where(like_condition('pseudonyms.unique_id'), pattern: params[:pattern])
|
||||
end
|
||||
|
||||
def self.sis_sql(users_scope, params)
|
||||
users_scope.select("users.*, MAX(current_login_at) as last_login").
|
||||
users_scope.select("users.*, MAX(logins.current_login_at) as last_login").
|
||||
joins(:pseudonyms).
|
||||
joins("LEFT JOIN #{Pseudonym.quoted_table_name} AS logins ON logins.user_id = users.id
|
||||
AND logins.account_id = #{User.connection.quote(params[:account])}
|
||||
AND logins.workflow_state = 'active'").
|
||||
where(pseudonyms: {account_id: params[:account], workflow_state: 'active'}).
|
||||
where(like_condition('pseudonyms.sis_user_id'), pattern: params[:pattern])
|
||||
end
|
||||
|
|
|
@ -214,6 +214,14 @@ describe UserSearch do
|
|||
users = UserSearch.for_user_in_context('Tyler', course, user, nil, sort: 'sis_id')
|
||||
expect(users.map(&:name)).to eq ['Tyler Pickett', 'Rose Tyler', 'Tyler Teacher']
|
||||
end
|
||||
|
||||
it 'does not return users twice if it matches their name and an old login' do
|
||||
tyler = User.find_by(name: 'Tyler Pickett')
|
||||
tyler.pseudonyms.create!(unique_id: 'Yo', account_id: course.root_account_id, current_login_at: Time.zone.now)
|
||||
tyler.pseudonyms.create!(unique_id: 'Pickett', account_id: course.root_account_id, current_login_at: 1.week.ago)
|
||||
users = UserSearch.for_user_in_context('Pickett', course, user, nil, sort: 'username')
|
||||
expect(users.map(&:name)).to eq ['Tyler Pickett']
|
||||
end
|
||||
end
|
||||
|
||||
describe 'searching on emails' do
|
||||
|
|
Loading…
Reference in New Issue