Commit 1de70204 authored by Michael Kozono's avatar Michael Kozono

Merge branch '262038_use_can_store_security_reports' into 'master'

Use Pipeline#can_store_security_reports? method to consolidate logic

See merge request gitlab-org/gitlab!50375
parents 4655f3b6 ae8529ea
...@@ -53,7 +53,7 @@ module EE ...@@ -53,7 +53,7 @@ module EE
state_machine :status do state_machine :status do
after_transition any => ::Ci::Pipeline.completed_statuses do |pipeline| after_transition any => ::Ci::Pipeline.completed_statuses do |pipeline|
next unless pipeline.has_reports?(::Ci::JobArtifact.security_reports.or(::Ci::JobArtifact.license_scanning_reports)) next unless pipeline.can_store_security_reports?
pipeline.run_after_commit do pipeline.run_after_commit do
StoreSecurityReportsWorker.perform_async(pipeline.id) if pipeline.default_branch? StoreSecurityReportsWorker.perform_async(pipeline.id) if pipeline.default_branch?
......
...@@ -165,60 +165,77 @@ RSpec.describe Ci::Pipeline do ...@@ -165,60 +165,77 @@ RSpec.describe Ci::Pipeline do
end end
describe 'Store security reports worker' do describe 'Store security reports worker' do
using RSpec::Parameterized::TableSyntax shared_examples_for 'storing the security reports' do |transition|
let(:default_branch) { pipeline.ref }
where(:state, :transition) do subject(:transition_pipeline) { pipeline.update!(status_event: transition) }
:success | :succeed
:failed | :drop
:skipped | :skip
:cancelled | :cancel
end
with_them do before do
context 'when pipeline has security reports and ref is the default branch of project' do allow(StoreSecurityReportsWorker).to receive(:perform_async)
let(:default_branch) { pipeline.ref } allow(project).to receive(:default_branch).and_return(default_branch)
allow(pipeline).to receive(:can_store_security_reports?).and_return(can_store_security_reports)
end
before do context 'when the security reports can be stored for the pipeline' do
create(:ee_ci_build, :sast, pipeline: pipeline, project: project) let(:can_store_security_reports) { true }
allow(project).to receive(:default_branch) { default_branch }
end
context "when transitioning to #{params[:state]}" do context 'when the ref is the default branch of project' do
it 'schedules store security report worker' do it 'schedules store security report worker' do
expect(StoreSecurityReportsWorker).to receive(:perform_async).with(pipeline.id) transition_pipeline
pipeline.update!(status_event: transition) expect(StoreSecurityReportsWorker).to have_received(:perform_async).with(pipeline.id)
end end
end end
end
context 'when pipeline does NOT have security reports' do context 'when the ref is not the default branch of project' do
context "when transitioning to #{params[:state]}" do let(:default_branch) { 'another_branch' }
it 'does NOT schedule store security report worker' do
expect(StoreSecurityReportsWorker).not_to receive(:perform_async).with(pipeline.id) it 'does not schedule store security report worker' do
transition_pipeline
pipeline.update!(status_event: transition) expect(StoreSecurityReportsWorker).not_to have_received(:perform_async)
end end
end end
end end
context "when pipeline ref is not the project's default branch" do context 'when the security reports can not be stored for the pipeline' do
let(:default_branch) { 'another_branch' } let(:can_store_security_reports) { false }
before do context 'when the ref is the default branch of project' do
stub_licensed_features(sast: true) it 'does not schedule store security report worker' do
allow(project).to receive(:default_branch) { default_branch } transition_pipeline
expect(StoreSecurityReportsWorker).not_to have_received(:perform_async)
end
end end
context "when transitioning to #{params[:state]}" do context 'when the ref is not the default branch of project' do
it 'does NOT schedule store security report worker' do let(:default_branch) { 'another_branch' }
expect(StoreSecurityReportsWorker).not_to receive(:perform_async).with(pipeline.id)
it 'does not schedule store security report worker' do
transition_pipeline
pipeline.update!(status_event: transition) expect(StoreSecurityReportsWorker).not_to have_received(:perform_async)
end end
end end
end end
end end
context 'when pipeline is succeeded' do
it_behaves_like 'storing the security reports', :succeed
end
context 'when pipeline is dropped' do
it_behaves_like 'storing the security reports', :drop
end
context 'when pipeline is skipped' do
it_behaves_like 'storing the security reports', :skip
end
context 'when pipeline is canceled' do
it_behaves_like 'storing the security reports', :cancel
end
end end
describe '#license_scanning_reports' do describe '#license_scanning_reports' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment