From 9f46488805e86b1bc341ea1620b866016c2ce5ed Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 20 May 2020 14:34:42 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-0-stable-ee --- spec/lib/gitlab/project_search_results_spec.rb | 113 ++++++++++++++++--------- 1 file changed, 75 insertions(+), 38 deletions(-) (limited to 'spec/lib/gitlab/project_search_results_spec.rb') diff --git a/spec/lib/gitlab/project_search_results_spec.rb b/spec/lib/gitlab/project_search_results_spec.rb index d206d31eb96..64f80b5d736 100644 --- a/spec/lib/gitlab/project_search_results_spec.rb +++ b/spec/lib/gitlab/project_search_results_spec.rb @@ -45,22 +45,36 @@ describe Gitlab::ProjectSearchResults do expect(results.formatted_count(scope)).to eq(expected) end end + + context 'blobs' do + it "limits the search to #{described_class::COUNT_LIMIT} items" do + expect(results).to receive(:blobs).with(limit: described_class::COUNT_LIMIT).and_call_original + expect(results.formatted_count('blobs')).to eq('0') + end + end + + context 'wiki_blobs' do + it "limits the search to #{described_class::COUNT_LIMIT} items" do + expect(results).to receive(:wiki_blobs).with(limit: described_class::COUNT_LIMIT).and_call_original + expect(results.formatted_count('wiki_blobs')).to eq('0') + end + end end - shared_examples 'general blob search' do |entity_type, blob_kind| + shared_examples 'general blob search' do |entity_type, blob_type| let(:query) { 'files' } subject(:results) { described_class.new(user, project, query).objects(blob_type) } context "when #{entity_type} is disabled" do let(:project) { disabled_project } - it "hides #{blob_kind} from members" do + it "hides #{blob_type} from members" do project.add_reporter(user) is_expected.to be_empty end - it "hides #{blob_kind} from non-members" do + it "hides #{blob_type} from non-members" do is_expected.to be_empty end end @@ -68,13 +82,13 @@ describe Gitlab::ProjectSearchResults do context "when #{entity_type} is internal" do let(:project) { private_project } - it "finds #{blob_kind} for members" do + it "finds #{blob_type} for members" do project.add_reporter(user) is_expected.not_to be_empty end - it "hides #{blob_kind} from non-members" do + it "hides #{blob_type} from non-members" do is_expected.to be_empty end end @@ -96,7 +110,7 @@ describe Gitlab::ProjectSearchResults do end end - shared_examples 'blob search repository ref' do |entity_type| + shared_examples 'blob search repository ref' do |entity_type, blob_type| let(:query) { 'files' } let(:file_finder) { double } let(:project_branch) { 'project_branch' } @@ -139,9 +153,41 @@ describe Gitlab::ProjectSearchResults do end end + shared_examples 'blob search pagination' do |blob_type| + let(:per_page) { 20 } + let(:count_limit) { described_class::COUNT_LIMIT } + let(:file_finder) { instance_double('Gitlab::FileFinder') } + let(:results) { described_class.new(user, project, query) } + let(:repository_ref) { 'master' } + + before do + allow(file_finder).to receive(:find).and_return([]) + expect(Gitlab::FileFinder).to receive(:new).with(project, repository_ref).and_return(file_finder) + end + + it 'limits search results based on the first page' do + expect(file_finder).to receive(:find).with(query, content_match_cutoff: count_limit) + results.objects(blob_type, page: 1, per_page: per_page) + end + + it 'limits search results based on the second page' do + expect(file_finder).to receive(:find).with(query, content_match_cutoff: count_limit + per_page) + results.objects(blob_type, page: 2, per_page: per_page) + end + + it 'limits search results based on the third page' do + expect(file_finder).to receive(:find).with(query, content_match_cutoff: count_limit + per_page * 2) + results.objects(blob_type, page: 3, per_page: per_page) + end + + it 'uses the per_page value when passed' do + expect(file_finder).to receive(:find).with(query, content_match_cutoff: count_limit + 10 * 2) + results.objects(blob_type, page: 3, per_page: 10) + end + end + describe 'blob search' do let(:project) { create(:project, :public, :repository) } - let(:blob_type) { 'blobs' } it_behaves_like 'general blob search', 'repository', 'blobs' do let(:disabled_project) { create(:project, :public, :repository, :repository_disabled) } @@ -150,37 +196,11 @@ describe Gitlab::ProjectSearchResults do let(:expected_file_by_content) { 'CHANGELOG' } end - it_behaves_like 'blob search repository ref', 'project' do + it_behaves_like 'blob search repository ref', 'project', 'blobs' do let(:entity) { project } end - context 'pagination' do - let(:per_page) { 20 } - let(:count_limit) { described_class::COUNT_LIMIT } - let(:file_finder) { instance_double('Gitlab::FileFinder') } - let(:results) { described_class.new(user, project, query, per_page: per_page) } - let(:repository_ref) { 'master' } - - before do - allow(file_finder).to receive(:find).and_return([]) - expect(Gitlab::FileFinder).to receive(:new).with(project, repository_ref).and_return(file_finder) - end - - it 'limits search results based on the first page' do - expect(file_finder).to receive(:find).with(query, content_match_cutoff: count_limit) - results.objects(blob_type, 1) - end - - it 'limits search results based on the second page' do - expect(file_finder).to receive(:find).with(query, content_match_cutoff: count_limit + per_page) - results.objects(blob_type, 2) - end - - it 'limits search results based on the third page' do - expect(file_finder).to receive(:find).with(query, content_match_cutoff: count_limit + per_page * 2) - results.objects(blob_type, 3) - end - end + it_behaves_like 'blob search pagination', 'blobs' end describe 'wiki search' do @@ -192,7 +212,7 @@ describe Gitlab::ProjectSearchResults do wiki.create_page('CHANGELOG', 'Files example') end - it_behaves_like 'general blob search', 'wiki', 'wiki blobs' do + it_behaves_like 'general blob search', 'wiki', 'wiki_blobs' do let(:blob_type) { 'wiki_blobs' } let(:disabled_project) { create(:project, :public, :wiki_repo, :wiki_disabled) } let(:private_project) { create(:project, :public, :wiki_repo, :wiki_private) } @@ -200,10 +220,27 @@ describe Gitlab::ProjectSearchResults do let(:expected_file_by_content) { 'CHANGELOG.md' } end - it_behaves_like 'blob search repository ref', 'wiki' do - let(:blob_type) { 'wiki_blobs' } + it_behaves_like 'blob search repository ref', 'wiki', 'wiki_blobs' do let(:entity) { project.wiki } end + + it_behaves_like 'blob search pagination', 'wiki_blobs' + + context 'return type' do + let(:blobs) { [Gitlab::Search::FoundBlob.new(project: project)] } + let(:results) { described_class.new(user, project, "Files", per_page: 20) } + + before do + allow(results).to receive(:wiki_blobs).and_return(blobs) + end + + it 'returns list of FoundWikiPage type object' do + objects = results.objects('wiki_blobs') + + expect(objects).to be_present + expect(objects).to all(be_a(Gitlab::Search::FoundWikiPage)) + end + end end it 'does not list issues on private projects' do -- cgit v1.2.1