diff options
Diffstat (limited to 'spec/finders/tags_finder_spec.rb')
-rw-r--r-- | spec/finders/tags_finder_spec.rb | 81 |
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 |