122 lines
3.2 KiB
Ruby
122 lines
3.2 KiB
Ruby
|
# 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
|