diff options
Diffstat (limited to 'spec/workers/bulk_imports/pipeline_worker_spec.rb')
-rw-r--r-- | spec/workers/bulk_imports/pipeline_worker_spec.rb | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/spec/workers/bulk_imports/pipeline_worker_spec.rb b/spec/workers/bulk_imports/pipeline_worker_spec.rb new file mode 100644 index 00000000000..27151177634 --- /dev/null +++ b/spec/workers/bulk_imports/pipeline_worker_spec.rb @@ -0,0 +1,125 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe BulkImports::PipelineWorker do + let(:pipeline_class) do + Class.new do + def initialize(_); end + + def run; end + end + end + + let_it_be(:entity) { create(:bulk_import_entity) } + + before do + stub_const('FakePipeline', pipeline_class) + end + + it 'runs the given pipeline successfully' do + pipeline_tracker = create( + :bulk_import_tracker, + entity: entity, + pipeline_name: 'FakePipeline' + ) + + expect(BulkImports::Stage) + .to receive(:pipeline_exists?) + .with('FakePipeline') + .and_return(true) + + expect_next_instance_of(Gitlab::Import::Logger) do |logger| + expect(logger) + .to receive(:info) + .with( + worker: described_class.name, + pipeline_name: 'FakePipeline', + entity_id: entity.id + ) + end + + expect(BulkImports::EntityWorker) + .to receive(:perform_async) + .with(entity.id, pipeline_tracker.stage) + + expect(subject).to receive(:jid).and_return('jid') + + subject.perform(pipeline_tracker.id, pipeline_tracker.stage, entity.id) + + pipeline_tracker.reload + + expect(pipeline_tracker.status_name).to eq(:finished) + expect(pipeline_tracker.jid).to eq('jid') + end + + context 'when the pipeline cannot be found' do + it 'logs the error' do + pipeline_tracker = create( + :bulk_import_tracker, + :started, + entity: entity, + pipeline_name: 'FakePipeline' + ) + + expect_next_instance_of(Gitlab::Import::Logger) do |logger| + expect(logger) + .to receive(:error) + .with( + worker: described_class.name, + pipeline_tracker_id: pipeline_tracker.id, + entity_id: entity.id, + message: 'Unstarted pipeline not found' + ) + end + + expect(BulkImports::EntityWorker) + .to receive(:perform_async) + .with(entity.id, pipeline_tracker.stage) + + subject.perform(pipeline_tracker.id, pipeline_tracker.stage, entity.id) + end + end + + context 'when the pipeline raises an exception' do + it 'logs the error' do + pipeline_tracker = create( + :bulk_import_tracker, + entity: entity, + pipeline_name: 'InexistentPipeline' + ) + + expect_next_instance_of(Gitlab::Import::Logger) do |logger| + expect(logger) + .to receive(:error) + .with( + worker: described_class.name, + pipeline_name: 'InexistentPipeline', + entity_id: entity.id, + message: "'InexistentPipeline' is not a valid BulkImport Pipeline" + ) + end + + expect(Gitlab::ErrorTracking) + .to receive(:track_exception) + .with( + instance_of(NameError), + entity_id: entity.id, + pipeline_name: pipeline_tracker.pipeline_name + ) + + expect(BulkImports::EntityWorker) + .to receive(:perform_async) + .with(entity.id, pipeline_tracker.stage) + + expect(subject).to receive(:jid).and_return('jid') + + subject.perform(pipeline_tracker.id, pipeline_tracker.stage, entity.id) + + pipeline_tracker.reload + + expect(pipeline_tracker.status_name).to eq(:failed) + expect(pipeline_tracker.jid).to eq('jid') + end + end +end |