diff options
Diffstat (limited to 'spec/services/releases/update_service_spec.rb')
-rw-r--r-- | spec/services/releases/update_service_spec.rb | 45 |
1 files changed, 33 insertions, 12 deletions
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 |