summaryrefslogtreecommitdiff
path: root/spec/services/releases/update_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/releases/update_service_spec.rb')
-rw-r--r--spec/services/releases/update_service_spec.rb45
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