Commit b70dfdb9 authored by Kassio Borges's avatar Kassio Borges

BulkImports: Avoid exception in EpicsPipeline when there's no Group

parent 9dd41bd6
......@@ -9,13 +9,15 @@ module EE
def initialize(context)
super(context)
return if context.group.blank?
@epic_iids = context.group.epics.order(iid: :desc).pluck(:iid) # rubocop: disable CodeReuse/ActiveRecord
set_next_epic
end
def run
return skip!('Skipping because group has no epics') if current_epic_iid.blank?
return skip!(skip_reason) if current_epic_iid.blank?
super
end
......@@ -43,6 +45,14 @@ module EE
def current_epic_iid
context.extra[:epic_iid]
end
def skip_reason
if context.group.blank?
'Skipping because bulk import has no group'
else
'Skipping because group has no epics'
end
end
end
end
end
......
......@@ -3,11 +3,6 @@
require 'spec_helper'
RSpec.describe EE::BulkImports::Pipeline::EpicBase do
let_it_be(:group) { create(:group) }
let_it_be(:entity) { create(:bulk_import_entity, group: group) }
let_it_be(:pipeline_tracker) { create(:bulk_import_tracker, entity: entity) }
let_it_be(:context) { BulkImports::Pipeline::Context.new(pipeline_tracker) }
let(:pipeline_class) do
Class.new(EE::BulkImports::Pipeline::EpicBase) do
def extract(_)
......@@ -30,6 +25,33 @@ RSpec.describe EE::BulkImports::Pipeline::EpicBase do
stub_const('MyPipeline', pipeline_class)
end
context 'when the group was not imported' do
let_it_be(:pipeline_tracker) { create(:bulk_import_tracker) }
let_it_be(:context) { BulkImports::Pipeline::Context.new(pipeline_tracker) }
it 'skips the pipeline' do
expect_next_instance_of(Gitlab::Import::Logger) do |logger|
expect(logger).to receive(:warn)
.with(
bulk_import_id: pipeline_tracker.entity.bulk_import.id,
bulk_import_entity_id: pipeline_tracker.entity.id,
bulk_import_entity_type: pipeline_tracker.entity.source_type,
message: 'Skipping because bulk import has no group',
pipeline_class: 'MyPipeline'
)
end
expect { subject.run }
.to change(pipeline_tracker, :status_name).to(:skipped)
end
end
context 'when the group was already imported' do
let_it_be(:group) { create(:group) }
let_it_be(:entity) { create(:bulk_import_entity, group: group) }
let_it_be(:pipeline_tracker) { create(:bulk_import_tracker, entity: entity) }
let_it_be(:context) { BulkImports::Pipeline::Context.new(pipeline_tracker) }
context 'when the group has no epics' do
it 'skips the pipeline' do
expect_next_instance_of(Gitlab::Import::Logger) do |logger|
......@@ -131,4 +153,5 @@ RSpec.describe EE::BulkImports::Pipeline::EpicBase do
subject.run
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