Commit ae8529ea authored by Mehmet Emin INAC's avatar Mehmet Emin INAC

Use Pipeline#can_store_security_reports? method to consolidate logic

parent 830379e8
...@@ -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,59 +165,76 @@ RSpec.describe Ci::Pipeline do ...@@ -165,59 +165,76 @@ 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|
where(:state, :transition) do
:success | :succeed
:failed | :drop
:skipped | :skip
:cancelled | :cancel
end
with_them do
context 'when pipeline has security reports and ref is the default branch of project' do
let(:default_branch) { pipeline.ref } let(:default_branch) { pipeline.ref }
subject(:transition_pipeline) { pipeline.update!(status_event: transition) }
before do before do
create(:ee_ci_build, :sast, pipeline: pipeline, project: project) allow(StoreSecurityReportsWorker).to receive(:perform_async)
allow(project).to receive(:default_branch) { default_branch } 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 end
context "when transitioning to #{params[:state]}" do context 'when the security reports can be stored for the pipeline' do
let(:can_store_security_reports) { true }
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
expect(StoreSecurityReportsWorker).not_to have_received(:perform_async)
end
end
end
end
pipeline.update!(status_event: transition) context 'when pipeline is succeeded' do
it_behaves_like 'storing the security reports', :succeed
end end
context 'when pipeline is dropped' do
it_behaves_like 'storing the security reports', :drop
end end
context 'when pipeline is skipped' do
it_behaves_like 'storing the security reports', :skip
end end
context 'when pipeline is canceled' do
it_behaves_like 'storing the security reports', :cancel
end end
end end
......
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