Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/finders/tags_finder_spec.rb')
-rw-r--r--spec/finders/tags_finder_spec.rb81
1 files changed, 70 insertions, 11 deletions
diff --git a/spec/finders/tags_finder_spec.rb b/spec/finders/tags_finder_spec.rb
index fe015d53ac9..acc86547271 100644
--- a/spec/finders/tags_finder_spec.rb
+++ b/spec/finders/tags_finder_spec.rb
@@ -7,13 +7,8 @@ RSpec.describe TagsFinder do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:repository) { project.repository }
- def load_tags(params)
- tags_finder = described_class.new(repository, params)
- tags, error = tags_finder.execute
-
- expect(error).to eq(nil)
-
- tags
+ def load_tags(params, gitaly_pagination: false)
+ described_class.new(repository, params).execute(gitaly_pagination: gitaly_pagination)
end
describe '#execute' do
@@ -101,15 +96,79 @@ RSpec.describe TagsFinder do
end
end
+ context 'with Gitaly pagination' do
+ subject { load_tags(params, gitaly_pagination: true) }
+
+ context 'by page_token and per_page' do
+ let(:params) { { page_token: 'v1.0.0', per_page: 1 } }
+
+ it 'filters tags' do
+ result = subject
+
+ expect(result.map(&:name)).to eq(%w(v1.1.0))
+ end
+ end
+
+ context 'by next page_token and per_page' do
+ let(:params) { { page_token: 'v1.1.0', per_page: 2 } }
+
+ it 'filters branches' do
+ result = subject
+
+ expect(result.map(&:name)).to eq(%w(v1.1.1))
+ end
+ end
+
+ context 'by per_page only' do
+ let(:params) { { per_page: 2 } }
+
+ it 'filters branches' do
+ result = subject
+
+ expect(result.map(&:name)).to eq(%w(v1.0.0 v1.1.0))
+ end
+ end
+
+ context 'by page_token only' do
+ let(:params) { { page_token: 'feature' } }
+
+ it 'raises an error' do
+ expect do
+ subject
+ end.to raise_error(Gitlab::Git::InvalidPageToken, 'Invalid page token: refs/tags/feature')
+ end
+ end
+
+ context 'pagination and sort' do
+ context 'by per_page' do
+ let(:params) { { sort: 'updated_desc', per_page: 5 } }
+
+ it 'filters branches' do
+ result = subject
+
+ expect(result.map(&:name)).to eq(%w(v1.1.1 v1.1.0 v1.0.0))
+ end
+ end
+
+ context 'by page_token and per_page' do
+ let(:params) { { sort: 'updated_desc', page_token: 'v1.1.1', per_page: 2 } }
+
+ it 'filters branches' do
+ result = subject
+
+ expect(result.map(&:name)).to eq(%w(v1.1.0 v1.0.0))
+ end
+ end
+ end
+ end
+
context 'when Gitaly is unavailable' do
- it 'returns empty list of tags' do
+ it 'raises an exception' do
expect(Gitlab::GitalyClient).to receive(:call).and_raise(GRPC::Unavailable)
tags_finder = described_class.new(repository, {})
- tags, error = tags_finder.execute
- expect(error).to be_a(Gitlab::Git::CommandError)
- expect(tags).to eq([])
+ expect { tags_finder.execute }.to raise_error(Gitlab::Git::CommandError)
end
end
end