diff options
Diffstat (limited to 'spec/services/deployments/link_merge_requests_service_spec.rb')
-rw-r--r-- | spec/services/deployments/link_merge_requests_service_spec.rb | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/spec/services/deployments/link_merge_requests_service_spec.rb b/spec/services/deployments/link_merge_requests_service_spec.rb new file mode 100644 index 00000000000..ba069658dfd --- /dev/null +++ b/spec/services/deployments/link_merge_requests_service_spec.rb @@ -0,0 +1,121 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Deployments::LinkMergeRequestsService do + describe '#execute' do + context 'when the deployment did not succeed' do + it 'does nothing' do + deploy = create(:deployment, :failed) + + expect(deploy).not_to receive(:link_merge_requests) + + described_class.new(deploy).execute + end + end + + context 'when there is a previous deployment' do + it 'links all merge requests merged since the previous deployment' do + deploy1 = create(:deployment, :success, sha: 'foo') + deploy2 = create( + :deployment, + :success, + sha: 'bar', + project: deploy1.project, + environment: deploy1.environment + ) + + service = described_class.new(deploy2) + + expect(service) + .to receive(:link_merge_requests_for_range) + .with('foo', 'bar') + + service.execute + end + end + + context 'when there are no previous deployments' do + it 'links all merged merge requests' do + deploy = create(:deployment, :success) + service = described_class.new(deploy) + + expect(service).to receive(:link_all_merged_merge_requests) + + service.execute + end + end + end + + describe '#link_merge_requests_for_range' do + it 'links merge requests' do + project = create(:project, :repository) + environment = create(:environment, project: project) + deploy = + create(:deployment, :success, project: project, environment: environment) + + mr1 = create( + :merge_request, + :merged, + merge_commit_sha: '1e292f8fedd741b75372e19097c76d327140c312', + source_project: project, + target_project: project + ) + + mr2 = create( + :merge_request, + :merged, + merge_commit_sha: '2d1db523e11e777e49377cfb22d368deec3f0793', + source_project: project, + target_project: project + ) + + described_class.new(deploy).link_merge_requests_for_range( + '7975be0116940bf2ad4321f79d02a55c5f7779aa', + 'ddd0f15ae83993f5cb66a927a28673882e99100b' + ) + + expect(deploy.merge_requests).to include(mr1, mr2) + end + end + + describe '#link_all_merged_merge_requests' do + it 'links all merged merge requests targeting the deployed branch' do + project = create(:project, :repository) + environment = create(:environment, project: project) + deploy = + create(:deployment, :success, project: project, environment: environment) + + mr1 = create( + :merge_request, + :merged, + source_project: project, + target_project: project, + source_branch: 'source1', + target_branch: deploy.ref + ) + + mr2 = create( + :merge_request, + :merged, + source_project: project, + target_project: project, + source_branch: 'source2', + target_branch: deploy.ref + ) + + mr3 = create( + :merge_request, + :merged, + source_project: project, + target_project: project, + target_branch: 'foo' + ) + + described_class.new(deploy).link_all_merged_merge_requests + + expect(deploy.merge_requests).to include(mr1, mr2) + expect(deploy.merge_requests).not_to include(mr3) + end + end +end |