diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-07 00:06:18 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-07 00:06:18 +0000 |
commit | ee6b185429b62857a5e490526095a7699e8539f3 (patch) | |
tree | de54f53b76c5da2bf05cbd333e1910bbe655d653 /spec/services/deployments | |
parent | cf85de264d049f1f8ff14b23f38f8331ae4c60fa (diff) | |
download | gitlab-ce-ee6b185429b62857a5e490526095a7699e8539f3.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/deployments')
3 files changed, 202 insertions, 5 deletions
diff --git a/spec/services/deployments/after_create_service_spec.rb b/spec/services/deployments/after_create_service_spec.rb index b34483ea85b..94532ed81ae 100644 --- a/spec/services/deployments/after_create_service_spec.rb +++ b/spec/services/deployments/after_create_service_spec.rb @@ -53,6 +53,14 @@ describe Deployments::AfterCreateService do service.execute end + it 'links merge requests to deployment' do + expect_next_instance_of(Deployments::LinkMergeRequestsService, deployment) do |link_mr_service| + expect(link_mr_service).to receive(:execute) + end + + service.execute + end + it 'returns the deployment' do expect(subject.execute).to eq(deployment) end @@ -237,4 +245,30 @@ describe Deployments::AfterCreateService do end end end + + describe '#update_environment' do + it 'links the merge requests' do + double = instance_double(Deployments::LinkMergeRequestsService) + + allow(Deployments::LinkMergeRequestsService) + .to receive(:new) + .with(deployment) + .and_return(double) + + expect(double).to receive(:execute) + + service.update_environment(deployment) + end + + context 'when the tracking of merge requests is disabled' do + it 'does nothing' do + stub_feature_flags(deployment_merge_requests: false) + + expect(Deployments::LinkMergeRequestsService) + .not_to receive(:new) + + service.update_environment(deployment) + end + end + end end 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 diff --git a/spec/services/deployments/update_service_spec.rb b/spec/services/deployments/update_service_spec.rb index a923099b82c..8a918d28ffd 100644 --- a/spec/services/deployments/update_service_spec.rb +++ b/spec/services/deployments/update_service_spec.rb @@ -3,13 +3,55 @@ require 'spec_helper' describe Deployments::UpdateService do - let(:deploy) { create(:deployment, :running) } - let(:service) { described_class.new(deploy, status: 'success') } + let(:deploy) { create(:deployment) } describe '#execute' do - it 'updates the status of a deployment' do - expect(service.execute).to eq(true) - expect(deploy.status).to eq('success') + it 'can update the status to running' do + expect(described_class.new(deploy, status: 'running').execute) + .to be_truthy + + expect(deploy).to be_running + end + + it 'can update the status to success' do + expect(described_class.new(deploy, status: 'success').execute) + .to be_truthy + + expect(deploy).to be_success + end + + it 'can update the status to failed' do + expect(described_class.new(deploy, status: 'failed').execute) + .to be_truthy + + expect(deploy).to be_failed + end + + it 'can update the status to canceled' do + expect(described_class.new(deploy, status: 'canceled').execute) + .to be_truthy + + expect(deploy).to be_canceled + end + + it 'returns false when the status is not supported' do + expect(described_class.new(deploy, status: 'kittens').execute) + .to be_falsey + end + + it 'links merge requests when changing the status to success', :sidekiq_inline do + mr = create( + :merge_request, + :merged, + target_project: deploy.project, + source_project: deploy.project, + target_branch: 'master', + source_branch: 'foo' + ) + + described_class.new(deploy, status: 'success').execute + + expect(deploy.merge_requests).to eq([mr]) end end end |