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.rb145
1 files changed, 111 insertions, 34 deletions
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 606c4ea05b9..eeb0bbb8e7d 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1585,6 +1585,29 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
end
+ describe "#jenkinsfile?" do
+ let_it_be(:project) { create(:project, :repository) }
+
+ it 'returns valid file' do
+ files = [TestBlob.new('file'), TestBlob.new('Jenkinsfile'), TestBlob.new('copying')]
+ expect(repository.tree).to receive(:blobs).and_return(files)
+
+ expect(repository.jenkinsfile?).to be(true)
+ end
+
+ it 'is case-insensitive' do
+ files = [TestBlob.new('file'), TestBlob.new('JENKINSFILE'), TestBlob.new('copying')]
+ expect(repository.tree).to receive(:blobs).and_return(files)
+
+ expect(repository.jenkinsfile?).to be(true)
+ end
+
+ it 'returns false if does not exists' do
+ expect(repository.tree).to receive(:blobs).and_return([])
+ expect(repository.jenkinsfile?).to be(false)
+ end
+ end
+
describe '#ambiguous_ref?' do
subject { repository.ambiguous_ref?(ref) }
@@ -2201,46 +2224,82 @@ RSpec.describe Repository, feature_category: :source_code_management do
describe 'rolling back the `rebase_commit_sha`' do
let(:new_sha) { Digest::SHA1.hexdigest('foo') }
- it 'does not rollback when there are no errors' do
- second_response = double(pre_receive_error: nil, git_error: nil)
- mock_gitaly(second_response)
+ context 'when there are no errors' do
+ before do
+ responses = [
+ double(rebase_sha: new_sha).as_null_object,
+ double
+ ]
+
+ expect_any_instance_of(
+ Gitaly::OperationService::Stub
+ ).to receive(:user_rebase_confirmable).and_return(responses.each)
+ end
- repository.rebase(user, merge_request)
+ it 'does not rollback when there are no errors' do
+ repository.rebase(user, merge_request)
- expect(merge_request.reload.rebase_commit_sha).to eq(new_sha)
+ expect(merge_request.reload.rebase_commit_sha).to eq(new_sha)
+ end
end
- it 'does rollback when a PreReceiveError is encountered in the second step' do
- second_response = double(pre_receive_error: 'my_error', git_error: nil)
- mock_gitaly(second_response)
+ context 'when there was an error' do
+ let(:first_response) do
+ double(rebase_sha: new_sha).as_null_object
+ end
- expect do
- repository.rebase(user, merge_request)
- end.to raise_error(Gitlab::Git::PreReceiveError)
+ before do
+ request_enum = double(push: nil).as_null_object
+ allow(Gitlab::GitalyClient::QueueEnumerator).to receive(:new).and_return(request_enum)
- expect(merge_request.reload.rebase_commit_sha).to be_nil
- end
+ expect_any_instance_of(
+ Gitaly::OperationService::Stub
+ ).to receive(:user_rebase_confirmable).and_return(first_response)
+
+ # Faking second request failure
+ allow(request_enum).to receive(:push)
+ .with(Gitaly::UserRebaseConfirmableRequest.new(apply: true)) { raise(error) }
+ end
- it 'does rollback when a GitError is encountered in the second step' do
- second_response = double(pre_receive_error: nil, git_error: 'git error')
- mock_gitaly(second_response)
+ context 'when a PreReceiveError is encountered in the second step' do
+ let(:error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::INTERNAL,
+ 'something failed',
+ Gitaly::UserRebaseConfirmableError.new(
+ access_check: Gitaly::AccessCheckError.new(
+ error_message: 'something went wrong'
+ )))
+ end
- expect do
- repository.rebase(user, merge_request)
- end.to raise_error(Gitlab::Git::Repository::GitError)
+ it 'does rollback' do
+ expect do
+ repository.rebase(user, merge_request)
+ end.to raise_error(Gitlab::Git::PreReceiveError)
- expect(merge_request.reload.rebase_commit_sha).to be_nil
- end
+ expect(merge_request.reload.rebase_commit_sha).to be_nil
+ end
+ end
- def mock_gitaly(second_response)
- responses = [
- double(rebase_sha: new_sha).as_null_object,
- second_response
- ]
+ context 'when a when a GitError is encountered in the second step' do
+ let(:error) do
+ new_detailed_error(
+ GRPC::Core::StatusCodes::INTERNAL,
+ 'something failed',
+ Gitaly::UserSquashError.new(
+ rebase_conflict: Gitaly::MergeConflictError.new(
+ conflicting_files: ['conflicting-file']
+ )))
+ end
- expect_any_instance_of(
- Gitaly::OperationService::Stub
- ).to receive(:user_rebase_confirmable).and_return(responses.each)
+ it 'does rollback' do
+ expect do
+ repository.rebase(user, merge_request)
+ end.to raise_error(Gitlab::Git::Repository::GitError)
+
+ expect(merge_request.reload.rebase_commit_sha).to be_nil
+ end
+ end
end
end
end
@@ -3626,12 +3685,8 @@ RSpec.describe Repository, feature_category: :source_code_management do
describe '.pick_storage_shard', :request_store do
before do
- storages = {
- 'default' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/repositories'),
- 'picked' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/repositories')
- }
+ stub_storage_settings('picked' => {})
- allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
Gitlab::CurrentSettings.current_application_settings
@@ -3955,6 +4010,28 @@ RSpec.describe Repository, feature_category: :source_code_management do
end
end
+ describe '#object_format' do
+ subject { repository.object_format }
+
+ context 'for SHA1 repository' do
+ it { is_expected.to eq('sha1') }
+ end
+
+ context 'for SHA256 repository' do
+ let(:project) { create(:project, :empty_repo, object_format: Repository::FORMAT_SHA256) }
+
+ it { is_expected.to eq('sha256') }
+ end
+
+ context 'for missing repository' do
+ before do
+ allow(repository).to receive(:exists?).and_return(false)
+ end
+
+ it { is_expected.to be_nil }
+ end
+ end
+
describe '#get_file_attributes' do
let(:project) do
create(:project, :custom_repo, files: {