diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-16 18:06:26 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-16 18:06:26 +0300 |
commit | 84727c8209a4412e21111a07f99b0438b03232de (patch) | |
tree | 1fcfa02b01548c3cdc561186870a1c807f227f0b /spec/services | |
parent | d2798d607e11e0ebae83ae909404834388733428 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services')
-rw-r--r-- | spec/services/milestones/destroy_service_spec.rb | 2 | ||||
-rw-r--r-- | spec/services/releases/create_service_spec.rb | 66 | ||||
-rw-r--r-- | spec/services/releases/destroy_service_spec.rb | 2 | ||||
-rw-r--r-- | spec/services/releases/update_service_spec.rb | 45 |
4 files changed, 88 insertions, 27 deletions
diff --git a/spec/services/milestones/destroy_service_spec.rb b/spec/services/milestones/destroy_service_spec.rb index ff1e1256166..4f16421c39f 100644 --- a/spec/services/milestones/destroy_service_spec.rb +++ b/spec/services/milestones/destroy_service_spec.rb @@ -72,7 +72,7 @@ describe Milestones::DestroyService do :release, tag: 'v1.0', project: project, - milestone: milestone + milestones: [milestone] ) expect { service.execute(milestone) }.not_to change { Release.count } diff --git a/spec/services/releases/create_service_spec.rb b/spec/services/releases/create_service_spec.rb index 5c9d6537df1..b624b9475e3 100644 --- a/spec/services/releases/create_service_spec.rb +++ b/spec/services/releases/create_service_spec.rb @@ -75,10 +75,12 @@ describe Releases::CreateService do context 'when a passed-in milestone does not exist for this project' do it 'raises an error saying the milestone is inexistent' do - service = described_class.new(project, user, params.merge!({ milestone: 'v111.0' })) + inexistent_milestone_tag = 'v111.0' + service = described_class.new(project, user, params.merge!({ milestones: [inexistent_milestone_tag] })) result = service.execute + expect(result[:status]).to eq(:error) - expect(result[:message]).to eq('Milestone does not exist') + expect(result[:message]).to eq("Milestone(s) not found: #{inexistent_milestone_tag}") end end end @@ -93,10 +95,10 @@ describe Releases::CreateService do context 'when existing milestone is passed in' do let(:title) { 'v1.0' } let(:milestone) { create(:milestone, :active, project: project, title: title) } - let(:params_with_milestone) { params.merge!({ milestone: title }) } + let(:params_with_milestone) { params.merge!({ milestones: [title] }) } + let(:service) { described_class.new(milestone.project, user, params_with_milestone) } it 'creates a release and ties this milestone to it' do - service = described_class.new(milestone.project, user, params_with_milestone) result = service.execute expect(project.releases.count).to eq(1) @@ -104,29 +106,66 @@ describe Releases::CreateService do release = project.releases.last - expect(release.milestone).to eq(milestone) + expect(release.milestones).to match_array([milestone]) end context 'when another release was previously created with that same milestone linked' do it 'also creates another release tied to that same milestone' do - other_release = create(:release, milestone: milestone, project: project, tag: 'v1.0') - service = described_class.new(milestone.project, user, params_with_milestone) + other_release = create(:release, milestones: [milestone], project: project, tag: 'v1.0') service.execute release = project.releases.last - expect(release.milestone).to eq(milestone) - expect(other_release.milestone).to eq(milestone) + expect(release.milestones).to match_array([milestone]) + expect(other_release.milestones).to match_array([milestone]) expect(release.id).not_to eq(other_release.id) end end end + context 'when multiple existing milestone titles are passed in' do + let(:title_1) { 'v1.0' } + let(:title_2) { 'v1.0-rc' } + let!(:milestone_1) { create(:milestone, :active, project: project, title: title_1) } + let!(:milestone_2) { create(:milestone, :active, project: project, title: title_2) } + let!(:params_with_milestones) { params.merge!({ milestones: [title_1, title_2] }) } + + it 'creates a release and ties it to these milestones' do + described_class.new(project, user, params_with_milestones).execute + release = project.releases.last + + expect(release.milestones.map(&:title)).to include(title_1, title_2) + end + end + + context 'when multiple miletone titles are passed in but one of them does not exist' do + let(:title) { 'v1.0' } + let(:inexistent_title) { 'v111.0' } + let!(:milestone) { create(:milestone, :active, project: project, title: title) } + let!(:params_with_milestones) { params.merge!({ milestones: [title, inexistent_title] }) } + let(:service) { described_class.new(milestone.project, user, params_with_milestones) } + + it 'raises an error' do + result = service.execute + + expect(result[:status]).to eq(:error) + expect(result[:message]).to eq("Milestone(s) not found: #{inexistent_title}") + end + + it 'does not create any release' do + expect do + service.execute + end.not_to change(Release, :count) + end + end + context 'when no milestone is passed in' do it 'creates a release without a milestone tied to it' do - expect(params.key? :milestone).to be_falsey + expect(params.key? :milestones).to be_falsey + service.execute release = project.releases.last - expect(release.milestone).to be_nil + + expect(release.milestones).to be_empty end it 'does not create any new MilestoneRelease object' do @@ -136,10 +175,11 @@ describe Releases::CreateService do context 'when an empty value is passed as a milestone' do it 'creates a release without a milestone tied to it' do - service = described_class.new(project, user, params.merge!({ milestone: '' })) + service = described_class.new(project, user, params.merge!({ milestones: [] })) service.execute release = project.releases.last - expect(release.milestone).to be_nil + + expect(release.milestones).to be_empty end end end diff --git a/spec/services/releases/destroy_service_spec.rb b/spec/services/releases/destroy_service_spec.rb index c3172e5edbc..9d027767cd2 100644 --- a/spec/services/releases/destroy_service_spec.rb +++ b/spec/services/releases/destroy_service_spec.rb @@ -60,7 +60,7 @@ describe Releases::DestroyService do context 'when a milestone is tied to the release' do let!(:milestone) { create(:milestone, :active, project: project, title: 'v1.0') } - let!(:release) { create(:release, milestone: milestone, project: project, tag: tag) } + let!(:release) { create(:release, milestones: [milestone], project: project, tag: tag) } it 'destroys the release but leave the milestone intact' do expect { subject }.not_to change { Milestone.count } diff --git a/spec/services/releases/update_service_spec.rb b/spec/services/releases/update_service_spec.rb index 944f3d8c9ad..178bac3574f 100644 --- a/spec/services/releases/update_service_spec.rb +++ b/spec/services/releases/update_service_spec.rb @@ -50,39 +50,60 @@ describe Releases::UpdateService do end context 'when a milestone is passed in' do - let(:old_title) { 'v1.0' } let(:new_title) { 'v2.0' } - let(:milestone) { create(:milestone, project: project, title: old_title) } + let(:milestone) { create(:milestone, project: project, title: 'v1.0') } let(:new_milestone) { create(:milestone, project: project, title: new_title) } - let(:params_with_milestone) { params.merge!({ milestone: new_title }) } + let(:params_with_milestone) { params.merge!({ milestones: [new_title] }) } + let(:service) { described_class.new(new_milestone.project, user, params_with_milestone) } before do - release.milestone = milestone - release.save! + release.milestones << milestone - described_class.new(new_milestone.project, user, params_with_milestone).execute + service.execute release.reload end it 'updates the related milestone accordingly' do - expect(release.milestone.title).to eq(new_title) + expect(release.milestones.first.title).to eq(new_title) end end context "when an 'empty' milestone is passed in" do let(:milestone) { create(:milestone, project: project, title: 'v1.0') } - let(:params_with_empty_milestone) { params.merge!({ milestone: '' }) } + let(:params_with_empty_milestone) { params.merge!({ milestones: [] }) } before do - release.milestone = milestone - release.save! + release.milestones << milestone - described_class.new(milestone.project, user, params_with_empty_milestone).execute + service.params = params_with_empty_milestone + service.execute release.reload end it 'removes the old milestone and does not associate any new milestone' do - expect(release.milestone).to be_nil + expect(release.milestones).not_to be_present + end + end + + context "when multiple new milestones are passed in" do + let(:new_title_1) { 'v2.0' } + let(:new_title_2) { 'v2.0-rc' } + let(:milestone) { create(:milestone, project: project, title: 'v1.0') } + let(:params_with_milestones) { params.merge!({ milestones: [new_title_1, new_title_2] }) } + let(:service) { described_class.new(project, user, params_with_milestones) } + + before do + create(:milestone, project: project, title: new_title_1) + create(:milestone, project: project, title: new_title_2) + release.milestones << milestone + + service.execute + release.reload + end + + it 'removes the old milestone and update the release with the new ones' do + milestone_titles = release.milestones.map(&:title) + expect(milestone_titles).to match_array([new_title_1, new_title_2]) end end end |