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/models/repository_spec.rb')
-rw-r--r--spec/models/repository_spec.rb134
1 files changed, 132 insertions, 2 deletions
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index aa2ac52a9ab..ea229ddf31f 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -297,6 +297,8 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
context 'with a commit with invalid UTF-8 path' do
+ let(:project) { create(:project, :empty_repo) }
+
it 'does not raise an error' do
response = create_file_in_repo(project, 'master', 'master', "hello\x80world", 'some contents')
@@ -319,6 +321,7 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
context 'with filename with pathspec characters' do
+ let(:project) { create(:project, :empty_repo) }
let(:filename) { ':wq' }
let(:newrev) { project.repository.commit('master').sha }
@@ -358,6 +361,7 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
context 'with filename with pathspec characters' do
+ let(:project) { create(:project, :empty_repo) }
let(:filename) { ':wq' }
let(:newrev) { project.repository.commit('master').sha }
@@ -1105,7 +1109,7 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
describe "#delete_file" do
- let_it_be(:project) { create(:project, :repository) }
+ let(:project) { create(:project, :repository) }
it 'removes file successfully' do
expect do
@@ -2400,6 +2404,7 @@ RSpec.describe Repository, feature_category: :source_code_management do
expect(repository).to receive(:expire_method_caches).with(
[
:size,
+ :recent_objects_size,
:commit_count,
:readme_path,
:contribution_guide,
@@ -2874,7 +2879,7 @@ RSpec.describe Repository, feature_category: :source_code_management do
describe '#expire_statistics_caches' do
it 'expires the caches' do
expect(repository).to receive(:expire_method_caches)
- .with(%i(size commit_count))
+ .with(%i(size recent_objects_size commit_count))
repository.expire_statistics_caches
end
@@ -3006,6 +3011,22 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
end
+ describe '#recent_objects_size' do
+ context 'with a non-existing repository' do
+ it 'returns 0' do
+ expect(repository).to receive(:exists?).and_return(false)
+
+ expect(repository.recent_objects_size).to eq(0.0)
+ end
+ end
+
+ context 'with an existing repository' do
+ it 'returns the repository recent_objects_size as a Float' do
+ expect(repository.recent_objects_size).to be_an_instance_of(Float)
+ end
+ end
+ end
+
describe '#local_branches' do
it 'returns the local branches' do
masterrev = repository.find_branch('master').dereferenced_target
@@ -3787,4 +3808,113 @@ RSpec.describe Repository, feature_category: :source_code_management do
include_examples 'does not delete branch'
end
end
+
+ describe '#get_patch_id' do
+ let(:project) { create(:project, :repository) }
+
+ it 'returns patch_id of given revisions' do
+ expect(repository.get_patch_id('HEAD~', 'HEAD')).to eq('45435e5d7b339dd76d939508c7687701d0c17fff')
+ end
+
+ context 'when one of the param is invalid' do
+ it 'raises an ArgumentError error' do
+ expect { repository.get_patch_id('HEAD', nil) }.to raise_error(ArgumentError)
+ end
+ end
+
+ context 'when two revisions are the same' do
+ it 'raises an Gitlab::Git::CommandError error' do
+ expect { repository.get_patch_id('HEAD', 'HEAD') }.to raise_error(Gitlab::Git::CommandError)
+ end
+ end
+ end
+
+ describe '#object_pool' do
+ let_it_be(:primary_project) { create(:project, :empty_repo) }
+ let_it_be(:forked_project) { create(:project, :empty_repo) }
+
+ let(:repository) { primary_project.repository }
+
+ subject { repository.object_pool }
+
+ context 'without object pool' do
+ it { is_expected.to be_nil }
+ end
+
+ context 'when pool repository exists' do
+ let!(:pool) { create(:pool_repository, :ready, source_project: primary_project) }
+
+ context 'when the current repository is a primary repository' do
+ it { is_expected.to be_nil }
+
+ context 'when repository is linked to the pool repository' do
+ before do
+ pool.link_repository(repository)
+ end
+
+ after do
+ pool.unlink_repository(repository)
+ end
+
+ it 'returns a object pool for the repository' do
+ is_expected.to be_kind_of(Gitlab::Git::ObjectPool)
+
+ expect(subject).to have_attributes(
+ relative_path: "#{pool.disk_path}.git",
+ source_repository: repository,
+ storage: repository.shard
+ )
+ end
+ end
+ end
+
+ context 'when the current repository is not a primary repository' do
+ let(:repository) { forked_project.repository }
+
+ it { is_expected.to be_nil }
+
+ context 'when repository is linked to the pool repository' do
+ before do
+ pool.link_repository(repository)
+ forked_project.update!(pool_repository: pool)
+ end
+
+ after do
+ pool.unlink_repository(repository)
+ forked_project.update!(pool_repository: nil)
+ end
+
+ it 'returns a object pool with correct links to primary repository' do
+ is_expected.to be_kind_of(Gitlab::Git::ObjectPool)
+
+ expect(subject).to have_attributes(
+ relative_path: "#{pool.disk_path}.git",
+ source_repository: primary_project.repository,
+ storage: primary_project.repository.shard
+ )
+ end
+ end
+
+ context 'when repository is linked to the pool repository in Gitaly only' do
+ before do
+ pool.link_repository(repository)
+ end
+
+ after do
+ pool.unlink_repository(repository)
+ end
+
+ it 'returns an object pool without a link to the primary repository' do
+ is_expected.to be_kind_of(Gitlab::Git::ObjectPool)
+
+ expect(subject).to have_attributes(
+ relative_path: "#{pool.disk_path}.git",
+ source_repository: nil,
+ storage: primary_project.repository.shard
+ )
+ end
+ end
+ end
+ end
+ end
end