diff --git a/ee/lib/elastic/latest/snippet_class_proxy.rb b/ee/lib/elastic/latest/snippet_class_proxy.rb index 4072a44969947d8214089a361e6d3d6f9476ea29..72c5915f4e40937ae2464a235db07e36e044b61b 100644 --- a/ee/lib/elastic/latest/snippet_class_proxy.rb +++ b/ee/lib/elastic/latest/snippet_class_proxy.rb @@ -17,6 +17,10 @@ module Elastic search(query_hash) end + def es_type + target.base_class.name.underscore + end + private def filter(query_hash, user) @@ -31,7 +35,10 @@ module Elastic { terms: { project_id: authorized_project_ids_for_user(user) } }, { bool: { - filter: { terms: { visibility_level: [Snippet::PUBLIC, Snippet::INTERNAL] } }, + filter: [ + { terms: { visibility_level: [Snippet::PUBLIC, Snippet::INTERNAL] } }, + { term: { type: self.es_type } } + ], must_not: { exists: { field: 'project_id' } } } } @@ -41,7 +48,10 @@ module Elastic else { bool: { - filter: { term: { visibility_level: Snippet::PUBLIC } }, + filter: [ + { term: { visibility_level: Snippet::PUBLIC } }, + { term: { type: self.es_type } } + ], must_not: { exists: { field: 'project_id' } } } } diff --git a/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb b/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb index e355d64d3541bf2f49116351ada9e8cf78138b23..86c3bf5f0811fa26afa03469f2991286fcb63827 100644 --- a/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb +++ b/ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Gitlab::Elastic::SnippetSearchResults, :elastic do - let(:snippet) { create(:snippet, content: 'foo', file_name: 'foo') } + let(:snippet) { create(:personal_snippet, content: 'foo', file_name: 'foo') } let(:results) { described_class.new(snippet.author, 'foo') } before do @@ -43,7 +43,7 @@ describe Gitlab::Elastic::SnippetSearchResults, :elastic do end context 'when snippet is public' do - let(:snippet) { create(:snippet, :public, content: 'foo', file_name: 'foo') } + let(:snippet) { create(:personal_snippet, :public, content: 'foo', file_name: 'foo') } it 'returns public snippet' do expect(results.snippet_titles_count).to eq(1) @@ -51,4 +51,14 @@ describe Gitlab::Elastic::SnippetSearchResults, :elastic do end end end + + context 'when user has full_private_access' do + let(:user) { create(:admin) } + let(:results) { described_class.new(user, 'foo') } + + it 'returns matched snippets' do + expect(results.snippet_titles_count).to eq(1) + expect(results.snippet_blobs_count).to eq(1) + end + end end