diff options
Diffstat (limited to 'spec/controllers/projects/tags_controller_spec.rb')
-rw-r--r-- | spec/controllers/projects/tags_controller_spec.rb | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/spec/controllers/projects/tags_controller_spec.rb b/spec/controllers/projects/tags_controller_spec.rb index 15ef1c65c53..122d1b072d0 100644 --- a/spec/controllers/projects/tags_controller_spec.rb +++ b/spec/controllers/projects/tags_controller_spec.rb @@ -2,10 +2,11 @@ require 'spec_helper' -describe Projects::TagsController do +RSpec.describe Projects::TagsController do let(:project) { create(:project, :public, :repository) } let!(:release) { create(:release, project: project) } let!(:invalid_release) { create(:release, project: project, tag: 'does-not-exist') } + let(:user) { create(:user) } describe 'GET index' do before do @@ -61,4 +62,69 @@ describe Projects::TagsController do end end end + + describe 'POST #create' do + before do + project.add_developer(user) + sign_in(user) + end + + let(:release_description) { nil } + let(:request) do + post(:create, params: { + namespace_id: project.namespace.to_param, + project_id: project, + tag_name: '1.0', + ref: 'master', + release_description: release_description + }) + end + + it 'creates tag' do + request + + expect(response).to have_gitlab_http_status(:found) + expect(project.repository.find_tag('1.0')).to be_present + end + + # TODO: remove this with the release creation moved to it's own form https://gitlab.com/gitlab-org/gitlab/-/issues/214245 + context 'when release description is set' do + let(:release_description) { 'some release description' } + + it 'creates tag and release' do + request + + expect(response).to have_gitlab_http_status(:found) + expect(project.repository.find_tag('1.0')).to be_present + + release = project.releases.find_by_tag!('1.0') + + expect(release).to be_present + expect(release.description).to eq(release_description) + end + + it 'passes the last pipeline for evidence creation', :sidekiq_inline do + sha = project.repository.commit('master').sha + create(:ci_empty_pipeline, sha: sha, project: project) # old pipeline + pipeline = create(:ci_empty_pipeline, sha: sha, project: project) + + # simulating pipeline creation by new tag + expect_any_instance_of(Repository).to receive(:add_tag).and_wrap_original do |m, *args| + create(:ci_empty_pipeline, sha: sha, project: project) + m.call(*args) + end + + expect_next_instance_of(Releases::CreateEvidenceService, anything, pipeline: pipeline) do |service| + expect(service).to receive(:execute).and_call_original + end + + request + + release = project.releases.find_by_tag!('1.0') + + expect(release).to be_present + expect(release.description).to eq(release_description) + end + end + end end |