summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/project_search_results_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/project_search_results_spec.rb')
-rw-r--r--spec/lib/gitlab/project_search_results_spec.rb97
1 files changed, 59 insertions, 38 deletions
diff --git a/spec/lib/gitlab/project_search_results_spec.rb b/spec/lib/gitlab/project_search_results_spec.rb
index d206d31eb96..c98fde543a1 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,11 @@ 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'
end
it 'does not list issues on private projects' do