diff options
Diffstat (limited to 'spec/lib/gitlab/git')
-rw-r--r-- | spec/lib/gitlab/git/diff_collection_spec.rb | 86 | ||||
-rw-r--r-- | spec/lib/gitlab/git/repository_spec.rb | 40 | ||||
-rw-r--r-- | spec/lib/gitlab/git/tag_spec.rb | 13 |
3 files changed, 129 insertions, 10 deletions
diff --git a/spec/lib/gitlab/git/diff_collection_spec.rb b/spec/lib/gitlab/git/diff_collection_spec.rb index 1a3c332a21b..114b3d01952 100644 --- a/spec/lib/gitlab/git/diff_collection_spec.rb +++ b/spec/lib/gitlab/git/diff_collection_spec.rb @@ -31,6 +31,19 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do end end + let(:overflow_max_bytes) { false } + let(:overflow_max_files) { false } + let(:overflow_max_lines) { false } + + shared_examples 'overflow stuff' do + it 'returns the expected overflow values' do + subject.overflow? + expect(subject.overflow_max_bytes?).to eq(overflow_max_bytes) + expect(subject.overflow_max_files?).to eq(overflow_max_files) + expect(subject.overflow_max_lines?).to eq(overflow_max_lines) + end + end + subject do Gitlab::Git::DiffCollection.new( iterator, @@ -76,12 +89,19 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do end context 'overflow handling' do + subject { super() } + + let(:collapsed_safe_files) { false } + let(:collapsed_safe_lines) { false } + context 'adding few enough files' do let(:file_count) { 3 } context 'and few enough lines' do let(:line_count) { 10 } + it_behaves_like 'overflow stuff' + describe '#overflow?' do subject { super().overflow? } @@ -117,6 +137,11 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'when limiting is disabled' do let(:limits) { false } + let(:overflow_max_bytes) { false } + let(:overflow_max_files) { false } + let(:overflow_max_lines) { false } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -155,6 +180,9 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'and too many lines' do let(:line_count) { 1000 } + let(:overflow_max_lines) { true } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -184,6 +212,11 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'when limiting is disabled' do let(:limits) { false } + let(:overflow_max_bytes) { false } + let(:overflow_max_files) { false } + let(:overflow_max_lines) { false } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -216,10 +249,13 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'adding too many files' do let(:file_count) { 11 } + let(:overflow_max_files) { true } context 'and few enough lines' do let(:line_count) { 1 } + it_behaves_like 'overflow stuff' + describe '#overflow?' do subject { super().overflow? } @@ -248,6 +284,11 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'when limiting is disabled' do let(:limits) { false } + let(:overflow_max_bytes) { false } + let(:overflow_max_files) { false } + let(:overflow_max_lines) { false } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -279,6 +320,10 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'and too many lines' do let(:line_count) { 30 } + let(:overflow_max_lines) { true } + let(:overflow_max_files) { false } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -308,6 +353,11 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'when limiting is disabled' do let(:limits) { false } + let(:overflow_max_bytes) { false } + let(:overflow_max_files) { false } + let(:overflow_max_lines) { false } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -344,6 +394,8 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'and few enough lines' do let(:line_count) { 1 } + it_behaves_like 'overflow stuff' + describe '#overflow?' do subject { super().overflow? } @@ -375,6 +427,9 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'adding too many bytes' do let(:file_count) { 10 } let(:line_length) { 5200 } + let(:overflow_max_bytes) { true } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -404,6 +459,11 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do context 'when limiting is disabled' do let(:limits) { false } + let(:overflow_max_bytes) { false } + let(:overflow_max_files) { false } + let(:overflow_max_lines) { false } + + it_behaves_like 'overflow stuff' describe '#overflow?' do subject { super().overflow? } @@ -437,6 +497,8 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do describe 'empty collection' do subject { Gitlab::Git::DiffCollection.new([]) } + it_behaves_like 'overflow stuff' + describe '#overflow?' do subject { super().overflow? } @@ -555,7 +617,7 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do .and_return({ max_files: 2, max_lines: max_lines }) end - it 'prunes diffs by default even little ones' do + it 'prunes diffs by default even little ones and sets collapsed_safe_files true' do subject.each_with_index do |d, i| if i < 2 expect(d.diff).not_to eq('') @@ -563,6 +625,8 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do expect(d.diff).to eq('') end end + + expect(subject.collapsed_safe_files?).to eq(true) end end @@ -582,7 +646,7 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do .and_return({ max_files: max_files, max_lines: 80 }) end - it 'prunes diffs by default even little ones' do + it 'prunes diffs by default even little ones and sets collapsed_safe_lines true' do subject.each_with_index do |d, i| if i < 2 expect(d.diff).not_to eq('') @@ -590,26 +654,30 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do expect(d.diff).to eq('') end end + + expect(subject.collapsed_safe_lines?).to eq(true) end end context 'when go over safe limits on bytes' do let(:iterator) do [ - fake_diff(1, 45), - fake_diff(1, 45), - fake_diff(1, 20480), - fake_diff(1, 1) + fake_diff(5, 10), + fake_diff(5000, 10), + fake_diff(5, 10), + fake_diff(5, 10) ] end before do + allow(Gitlab::CurrentSettings).to receive(:diff_max_patch_bytes).and_return(1.megabyte) + allow(Gitlab::Git::DiffCollection) .to receive(:default_limits) - .and_return({ max_files: max_files, max_lines: 80 }) + .and_return({ max_files: 4, max_lines: 3000 }) end - it 'prunes diffs by default even little ones' do + it 'prunes diffs by default even little ones and sets collapsed_safe_bytes true' do subject.each_with_index do |d, i| if i < 2 expect(d.diff).not_to eq('') @@ -617,6 +685,8 @@ RSpec.describe Gitlab::Git::DiffCollection, :seed_helper do expect(d.diff).to eq('') end end + + expect(subject.collapsed_safe_bytes?).to eq(true) end end end diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index cc1b1ceadcf..1e259c9c153 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -564,6 +564,41 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do end end + describe '#search_files_by_regexp' do + let(:ref) { 'master' } + + subject(:result) { mutable_repository.search_files_by_regexp(filter, ref) } + + context 'when sending a valid regexp' do + let(:filter) { 'files\/.*\/.*\.rb' } + + it 'returns matched files' do + expect(result).to contain_exactly('files/links/regex.rb', + 'files/ruby/popen.rb', + 'files/ruby/regex.rb', + 'files/ruby/version_info.rb') + end + end + + context 'when sending an ivalid regexp' do + let(:filter) { '*.rb' } + + it 'raises error' do + expect { result }.to raise_error(GRPC::InvalidArgument, + /missing argument to repetition operator: `*`/) + end + end + + context "when the ref doesn't exist" do + let(:filter) { 'files\/.*\/.*\.rb' } + let(:ref) { 'non-existing-branch' } + + it 'returns an empty array' do + expect(result).to eq([]) + end + end + end + describe '#find_remote_root_ref' do it 'gets the remote root ref from GitalyClient' do expect_any_instance_of(Gitlab::GitalyClient::RemoteService) @@ -1711,14 +1746,15 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do let(:right_branch) { 'test-master' } let(:first_parent_ref) { 'refs/heads/test-master' } let(:target_ref) { 'refs/merge-requests/999/merge' } - let(:allow_conflicts) { false } before do repository.create_branch(right_branch, branch_head) unless repository.ref_exists?(first_parent_ref) end def merge_to_ref - repository.merge_to_ref(user, left_sha, right_branch, target_ref, 'Merge message', first_parent_ref, allow_conflicts) + repository.merge_to_ref(user, + source_sha: left_sha, branch: right_branch, target_ref: target_ref, + message: 'Merge message', first_parent_ref: first_parent_ref) end it 'generates a commit in the target_ref' do diff --git a/spec/lib/gitlab/git/tag_spec.rb b/spec/lib/gitlab/git/tag_spec.rb index f83ccc6cae0..b6ff76c5e1c 100644 --- a/spec/lib/gitlab/git/tag_spec.rb +++ b/spec/lib/gitlab/git/tag_spec.rb @@ -101,4 +101,17 @@ RSpec.describe Gitlab::Git::Tag, :seed_helper do end end end + + describe "#cache_key" do + subject { repository.tags.first } + + it "returns a cache key that changes based on changeable values" do + expect(subject).to receive(:name).and_return("v1.0.0") + expect(subject).to receive(:message).and_return("Initial release") + + digest = Digest::SHA1.hexdigest(["v1.0.0", "Initial release", subject.target, subject.target_commit.sha].join) + + expect(subject.cache_key).to eq("tag:#{digest}") + end + end end |