diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-20 13:49:51 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-20 13:49:51 +0000 |
commit | 71786ddc8e28fbd3cb3fcc4b3ff15e5962a1c82e (patch) | |
tree | 6a2d93ef3fb2d353bb7739e4b57e6541f51cdd71 /spec/services/releases/create_service_spec.rb | |
parent | a7253423e3403b8c08f8a161e5937e1488f5f407 (diff) | |
download | gitlab-ce-71786ddc8e28fbd3cb3fcc4b3ff15e5962a1c82e.tar.gz |
Add latest changes from gitlab-org/gitlab@15-9-stable-eev15.9.0-rc42
Diffstat (limited to 'spec/services/releases/create_service_spec.rb')
-rw-r--r-- | spec/services/releases/create_service_spec.rb | 71 |
1 files changed, 58 insertions, 13 deletions
diff --git a/spec/services/releases/create_service_spec.rb b/spec/services/releases/create_service_spec.rb index 5f49eed3e77..9768ceb12e8 100644 --- a/spec/services/releases/create_service_spec.rb +++ b/spec/services/releases/create_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Releases::CreateService do +RSpec.describe Releases::CreateService, feature_category: :continuous_integration do let(:project) { create(:project, :repository) } let(:user) { create(:user) } let(:tag_name) { project.repository.tag_names.first } @@ -132,6 +132,15 @@ RSpec.describe Releases::CreateService do expect(result[:status]).to eq(:error) expect(result[:message]).to eq("Milestone(s) not found: #{inexistent_milestone_tag}") end + + it 'raises an error saying the milestone id is inexistent' do + inexistent_milestone_id = non_existing_record_id + service = described_class.new(project, user, params.merge!({ milestone_ids: [inexistent_milestone_id] })) + result = service.execute + + expect(result[:status]).to eq(:error) + expect(result[:message]).to eq("Milestone id(s) not found: #{inexistent_milestone_id}") + end end context 'when existing milestone is passed in' do @@ -140,15 +149,27 @@ RSpec.describe Releases::CreateService do 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 - result = service.execute + shared_examples 'creates release' do + it 'creates a release and ties this milestone to it' do + result = service.execute - expect(project.releases.count).to eq(1) - expect(result[:status]).to eq(:success) + expect(project.releases.count).to eq(1) + expect(result[:status]).to eq(:success) + + release = project.releases.last + + expect(release.milestones).to match_array([milestone]) + end + end - release = project.releases.last + context 'by title' do + it_behaves_like 'creates release' + end + + context 'by ids' do + let(:params_with_milestone) { params.merge!({ milestone_ids: [milestone.id] }) } - expect(release.milestones).to match_array([milestone]) + it_behaves_like 'creates release' end context 'when another release was previously created with that same milestone linked' do @@ -164,18 +185,31 @@ RSpec.describe Releases::CreateService do end end - context 'when multiple existing milestone titles are passed in' do + context 'when multiple existing milestones 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 + shared_examples 'creates multiple releases' do + 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 'by title' do + let!(:params_with_milestones) { params.merge!({ milestones: [title_1, title_2] }) } + + it_behaves_like 'creates multiple releases' + end + + context 'by ids' do + let!(:params_with_milestones) { params.merge!({ milestone_ids: [milestone_1.id, milestone_2.id] }) } - expect(release.milestones.map(&:title)).to include(title_1, title_2) + it_behaves_like 'creates multiple releases' end end @@ -198,6 +232,17 @@ RSpec.describe Releases::CreateService do service.execute end.not_to change(Release, :count) end + + context 'with milestones as ids' do + let!(:params_with_milestones) { params.merge!({ milestone_ids: [milestone.id, non_existing_record_id] }) } + + it 'raises an error' do + result = service.execute + + expect(result[:status]).to eq(:error) + expect(result[:message]).to eq("Milestone id(s) not found: #{non_existing_record_id}") + end + end end context 'no milestone association behavior' do |