diff options
Diffstat (limited to 'spec/finders/tags_finder_spec.rb')
-rw-r--r-- | spec/finders/tags_finder_spec.rb | 79 |
1 files changed, 37 insertions, 42 deletions
diff --git a/spec/finders/tags_finder_spec.rb b/spec/finders/tags_finder_spec.rb index 08978a32e50..fe015d53ac9 100644 --- a/spec/finders/tags_finder_spec.rb +++ b/spec/finders/tags_finder_spec.rb @@ -3,93 +3,76 @@ require 'spec_helper' RSpec.describe TagsFinder do - let(:user) { create(:user) } - let(:project) { create(:project, :repository) } - let(:repository) { project.repository } + let_it_be(:user) { create(:user) } + 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 + end describe '#execute' do context 'sort only' do it 'sorts by name' do - tags_finder = described_class.new(repository, {}) - - result = tags_finder.execute - - expect(result.first.name).to eq("v1.0.0") + expect(load_tags({}).first.name).to eq("v1.0.0") end it 'sorts by recently_updated' do - tags_finder = described_class.new(repository, { sort: 'updated_desc' }) - - result = tags_finder.execute recently_updated_tag = repository.tags.max do |a, b| repository.commit(a.dereferenced_target).committed_date <=> repository.commit(b.dereferenced_target).committed_date end - expect(result.first.name).to eq(recently_updated_tag.name) + params = { sort: 'updated_desc' } + + expect(load_tags(params).first.name).to eq(recently_updated_tag.name) end it 'sorts by last_updated' do - tags_finder = described_class.new(repository, { sort: 'updated_asc' }) - - result = tags_finder.execute + params = { sort: 'updated_asc' } - expect(result.first.name).to eq('v1.0.0') + expect(load_tags(params).first.name).to eq('v1.0.0') end end context 'filter only' do it 'filters tags by name' do - tags_finder = described_class.new(repository, { search: '1.0.0' }) - - result = tags_finder.execute + result = load_tags({ search: '1.0.0' }) expect(result.first.name).to eq('v1.0.0') expect(result.count).to eq(1) end it 'does not find any tags with that name' do - tags_finder = described_class.new(repository, { search: 'hey' }) - - result = tags_finder.execute - - expect(result.count).to eq(0) + expect(load_tags({ search: 'hey' }).count).to eq(0) end it 'filters tags by name that begins with' do - params = { search: '^v1.0' } - tags_finder = described_class.new(repository, params) - - result = tags_finder.execute + result = load_tags({ search: '^v1.0' }) expect(result.first.name).to eq('v1.0.0') expect(result.count).to eq(1) end it 'filters tags by name that ends with' do - params = { search: '0.0$' } - tags_finder = described_class.new(repository, params) - - result = tags_finder.execute + result = load_tags({ search: '0.0$' }) expect(result.first.name).to eq('v1.0.0') expect(result.count).to eq(1) end it 'filters tags by nonexistent name that begins with' do - params = { search: '^nope' } - tags_finder = described_class.new(repository, params) - - result = tags_finder.execute + result = load_tags({ search: '^nope' }) expect(result.count).to eq(0) end it 'filters tags by nonexistent name that ends with' do - params = { search: 'nope$' } - tags_finder = described_class.new(repository, params) - - result = tags_finder.execute - + result = load_tags({ search: 'nope$' }) expect(result.count).to eq(0) end end @@ -97,7 +80,7 @@ RSpec.describe TagsFinder do context 'filter and sort' do let(:tags_to_compare) { %w[v1.0.0 v1.1.0] } - subject { described_class.new(repository, params).execute.select { |tag| tags_to_compare.include?(tag.name) } } + subject { load_tags(params).select { |tag| tags_to_compare.include?(tag.name) } } context 'when sort by updated_desc' do let(:params) { { sort: 'updated_desc', search: 'v1' } } @@ -117,5 +100,17 @@ RSpec.describe TagsFinder do end end end + + context 'when Gitaly is unavailable' do + it 'returns empty list of tags' 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([]) + end + end end end |