summaryrefslogtreecommitdiff
path: root/spec/models/repository_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/repository_spec.rb')
-rw-r--r--spec/models/repository_spec.rb51
1 files changed, 46 insertions, 5 deletions
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 3f5d285bc2c..290723e7936 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1364,16 +1364,57 @@ describe Repository do
expect(repository.blob_at(merge_commit.id, 'files/ruby/feature.rb')).to be_present
end
- it 'sets the `in_progress_merge_commit_sha` flag for the given merge request' do
+ it 'removes carriage returns from commit message' do
merge_commit_id = merge(repository, user, merge_request, message)
- expect(merge_request.in_progress_merge_commit_sha).to eq(merge_commit_id)
+ expect(repository.commit(merge_commit_id).message).to eq(message.delete("\r"))
end
- it 'removes carriage returns from commit message' do
- merge_commit_id = merge(repository, user, merge_request, message)
+ describe 'setting the `in_progress_merge_commit_sha` for the given merge request' do
+ let(:new_sha) { Digest::SHA1.hexdigest('foo') }
- expect(repository.commit(merge_commit_id).message).to eq(message.delete("\r"))
+ it 'sets the attribute when there are no errors' do
+ second_response = build_second_response(pre_receive_error: nil)
+ mock_gitaly(second_response)
+
+ merge(repository, user, merge_request, message)
+
+ expect(merge_request.reload.in_progress_merge_commit_sha).to eq(new_sha)
+ end
+
+ it 'rollsback when an error is encountered in the second step' do
+ second_response = build_second_response(pre_receive_error: 'my_error')
+ mock_gitaly(second_response)
+
+ expect do
+ merge(repository, user, merge_request, message)
+ end.to raise_error(Gitlab::Git::PreReceiveError)
+
+ expect(merge_request.reload.in_progress_merge_commit_sha).to be_nil
+ end
+
+ def build_second_response(pre_receive_error:)
+ double(
+ pre_receive_error: pre_receive_error,
+ git_error: nil,
+ branch_update: double(
+ commit_id: new_sha,
+ repo_created: false,
+ branch_created: false
+ )
+ )
+ end
+
+ def mock_gitaly(second_response)
+ responses = [
+ double(commit_id: new_sha, pre_receive_error: nil, git_error: nil),
+ second_response
+ ]
+
+ expect_any_instance_of(
+ Gitaly::OperationService::Stub
+ ).to receive(:user_merge_branch).and_return(responses.each)
+ end
end
def merge(repository, user, merge_request, message)