diff options
author | Valery Sizov <valery@gitlab.com> | 2017-09-14 17:26:03 +0300 |
---|---|---|
committer | Eric Eastwood <contact@ericeastwood.com> | 2017-09-19 23:48:40 -0500 |
commit | dd35c1d556ea5809ef2aefd8ec5741d7b4d83372 (patch) | |
tree | cec62fec547a6943fede6fb56253046280e8b67c | |
parent | 7af585f1667935165701ec290e6ce37a436ad4c6 (diff) | |
download | gitlab-ce-dd35c1d556ea5809ef2aefd8ec5741d7b4d83372.tar.gz |
Add spec for FfMergeService
-rw-r--r-- | app/models/project.rb | 1 | ||||
-rw-r--r-- | spec/services/merge_requests/ff_merge_service_spec.rb | 84 |
2 files changed, 84 insertions, 1 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index cd1fa734e78..d456d983243 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1572,7 +1572,6 @@ class Project < ActiveRecord::Base def ff_merge_must_be_possible? self.merge_requests_ff_only_enabled end - # alias_method :merge_requests_ff_only_enabled?, :merge_requests_ff_only_enabled private diff --git a/spec/services/merge_requests/ff_merge_service_spec.rb b/spec/services/merge_requests/ff_merge_service_spec.rb new file mode 100644 index 00000000000..aaabf3ed2b0 --- /dev/null +++ b/spec/services/merge_requests/ff_merge_service_spec.rb @@ -0,0 +1,84 @@ +require 'spec_helper' + +describe MergeRequests::FfMergeService do + let(:user) { create(:user) } + let(:user2) { create(:user) } + let(:merge_request) do + create(:merge_request, + source_branch: 'flatten-dir', + target_branch: 'improve/awesome', + assignee: user2) + end + let(:project) { merge_request.project } + + before do + project.team << [user, :master] + project.team << [user2, :developer] + end + + describe '#execute' do + context 'valid params' do + let(:service) { described_class.new(project, user, {}) } + + before do + allow(service).to receive(:execute_hooks) + + perform_enqueued_jobs do + service.execute(merge_request) + end + end + + it "does not create merge commit" do + source_branch_sha = merge_request.source_project.repository.commit(merge_request.source_branch).sha + target_branch_sha = merge_request.target_project.repository.commit(merge_request.target_branch).sha + expect(source_branch_sha).to eq(target_branch_sha) + end + + it { expect(merge_request).to be_valid } + it { expect(merge_request).to be_merged } + + it 'sends email to user2 about merge of new merge_request' do + email = ActionMailer::Base.deliveries.last + expect(email.to.first).to eq(user2.email) + expect(email.subject).to include(merge_request.title) + end + + it 'creates system note about merge_request merge' do + note = merge_request.notes.last + expect(note.note).to include 'merged' + end + end + + context "error handling" do + let(:service) { described_class.new(project, user, commit_message: 'Awesome message') } + + before do + allow(Rails.logger).to receive(:error) + end + + it 'logs and saves error if there is an exception' do + error_message = 'error message' + + allow(service).to receive(:repository).and_raise("error message") + allow(service).to receive(:execute_hooks) + + service.execute(merge_request) + + expect(merge_request.merge_error).to include(error_message) + expect(Rails.logger).to have_received(:error).with(a_string_matching(error_message)) + end + + it 'logs and saves error if there is an PreReceiveError exception' do + error_message = 'error message' + + allow(service).to receive(:repository).and_raise(Gitlab::Git::HooksService::PreReceiveError, error_message) + allow(service).to receive(:execute_hooks) + + service.execute(merge_request) + + expect(merge_request.merge_error).to include(error_message) + expect(Rails.logger).to have_received(:error).with(a_string_matching(error_message)) + end + end + end +end |