Skip to content
Snippets Groups Projects
Commit adaefe19 authored by Jan Provaznik's avatar Jan Provaznik
Browse files

Enable user search

If elasticsearch is enabled, we fall back to non-elasticsearch
logic when searching for users.
parent 9ebeab77
No related branches found
No related tags found
No related merge requests found
Pipeline #50889915 failed
This commit is part of merge request !8985. Comments created here will be created in the context of that merge request.
......@@ -13,8 +13,13 @@ def initialize(user, params)
end
def execute
Gitlab::SearchResults.new(current_user, projects, params[:search],
default_project_filter: default_project_filter)
if Gitlab::CurrentSettings.elasticsearch_search?
Gitlab::Elastic::SearchResults.new(current_user, params[:search],
elastic_projects, projects, elastic_global)
else
Gitlab::SearchResults.new(current_user, projects, params[:search],
default_project_filter: default_project_filter)
end
end
def projects
......
......@@ -3,6 +3,8 @@
module EE
module Search
module GroupService
extend ::Gitlab::Utils::Override
def elastic_projects
@elastic_projects ||= projects.pluck(:id) # rubocop:disable CodeReuse/ActiveRecord
end
......@@ -10,6 +12,13 @@ def elastic_projects
def elastic_global
false
end
override :execute
def execute
return super unless ::Gitlab::CurrentSettings.elasticsearch_search?
::Gitlab::Elastic::GroupSearchResults.new(current_user, elastic_projects, projects, group, params[:search], elastic_global, default_project_filter: default_project_filter)
end
end
end
end
# frozen_string_literal: true
module Gitlab
module Elastic
# Always prefer to use the full class namespace when specifying a
# superclass inside a module, because autoloading can occur in a
# different order between execution environments.
class GroupSearchResults < Gitlab::Elastic::SearchResults
delegate :users, to: :generic_search_results
delegate :limited_users_count, to: :generic_search_results
attr_reader :group, :default_project_filter
def initialize(current_user, limit_project_ids, limit_projects, group, query, public_and_internal_projects, default_project_filter: false, per_page: 20)
super(current_user, query, limit_project_ids, limit_projects, public_and_internal_projects)
@default_project_filter = default_project_filter
@group = group
end
def objects(scope, page = nil)
case scope
when 'users'
users.page(page).per(per_page)
else
super
end
end
def generic_search_results
@generic_search_results ||= Gitlab::GroupSearchResults.new(current_user, limit_projects, group, query, default_project_filter: default_project_filter)
end
end
end
end
......@@ -8,6 +8,9 @@ module Elastic
class ProjectSearchResults < Gitlab::Elastic::SearchResults
attr_reader :project, :repository_ref
delegate :users, to: :generic_search_results
delegate :limited_users_count, to: :generic_search_results
def initialize(current_user, query, project_id, repository_ref = nil)
@current_user = current_user
@project = Project.find(project_id)
......@@ -26,11 +29,17 @@ def objects(scope, page = nil)
wiki_blobs.page(page).per(per_page)
when 'commits'
commits(page: page, per_page: per_page)
when 'users'
users.page(page).per(per_page)
else
super
end
end
def generic_search_results
@generic_search_results ||= Gitlab::ProjectSearchResults.new(current_user, project, query, repository_ref)
end
def blobs_count
@blobs_count ||= blobs.total_count
end
......
......@@ -7,11 +7,15 @@ class SearchResults
# Limit search results by passed project ids
# It allows us to search only for projects user has access to
attr_reader :limit_project_ids
attr_reader :limit_project_ids, :limit_projects
def initialize(current_user, query, limit_project_ids, public_and_internal_projects = true)
delegate :users, to: :generic_search_results
delegate :limited_users_count, to: :generic_search_results
def initialize(current_user, query, limit_project_ids, limit_projects = nil, public_and_internal_projects = true)
@current_user = current_user
@limit_project_ids = limit_project_ids
@limit_projects = limit_projects
@query = query
@public_and_internal_projects = public_and_internal_projects
end
......@@ -32,11 +36,17 @@ def objects(scope, page = nil)
wiki_blobs.page(page).per(per_page)
when 'commits'
commits(page: page, per_page: per_page)
when 'users'
users.page(page).per(per_page)
else
Kaminari.paginate_array([])
end
end
def generic_search_results
@generic_search_results ||= Gitlab::SearchResults.new(current_user, limit_projects, query)
end
def projects_count
@projects_count ||= projects.total_count
end
......
require 'spec_helper'
describe Gitlab::Elastic::GroupSearchResults do
set(:user) { create(:user) }
set(:group) { create(:group) }
set(:guest) { create(:user).tap { |u| group.add_user(u, Gitlab::Access::GUEST) } }
before do
stub_ee_application_setting(elasticsearch_search: true, elasticsearch_indexing: true)
end
after do
stub_ee_application_setting(elasticsearch_search: false, elasticsearch_indexing: false)
end
context 'user search' do
subject(:results) { described_class.new(user, nil, nil, group, guest.username, nil) }
before do
expect(Gitlab::GroupSearchResults).to receive(:new).and_call_original
end
it { expect(results.objects('users')).to eq([guest]) }
it { expect(results.limited_users_count).to eq(1) }
end
end
......@@ -224,4 +224,15 @@
expect(results.issues_count).to eq 3
end
end
context 'user search' do
subject(:results) { described_class.new(user, project.owner.username, project.id) }
before do
expect(Gitlab::ProjectSearchResults).to receive(:new).and_call_original
end
it { expect(results.objects('users')).to eq([project.owner]) }
it { expect(results.limited_users_count).to eq(1) }
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment