diff options
Diffstat (limited to 'spec/models/bulk_imports')
-rw-r--r-- | spec/models/bulk_imports/entity_spec.rb | 67 | ||||
-rw-r--r-- | spec/models/bulk_imports/export_status_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/bulk_imports/tracker_spec.rb | 96 |
3 files changed, 171 insertions, 0 deletions
diff --git a/spec/models/bulk_imports/entity_spec.rb b/spec/models/bulk_imports/entity_spec.rb index 014b050a5b5..9454549ee1c 100644 --- a/spec/models/bulk_imports/entity_spec.rb +++ b/spec/models/bulk_imports/entity_spec.rb @@ -487,4 +487,71 @@ RSpec.describe BulkImports::Entity, type: :model, feature_category: :importers d expect(subject.source_version).to eq(subject.bulk_import.source_version_info) end end + + describe '#checksums' do + let(:entity) { create(:bulk_import_entity) } + + it 'returns checksums for all imported relations' do + create(:bulk_import_tracker, + entity: entity, + relation: 'BulkImports::Common::Pipelines::MilestonesPipeline', + source_objects_count: 7, + fetched_objects_count: 6, + imported_objects_count: 5 + ) + + create(:bulk_import_tracker, + entity: entity, + relation: 'BulkImports::Common::Pipelines::LabelsPipeline', + source_objects_count: 10, + fetched_objects_count: 9, + imported_objects_count: 8 + ) + + expect(entity.checksums).to eq( + { + milestones: { + source: 7, + fetched: 6, + imported: 5 + }, + labels: { + source: 10, + fetched: 9, + imported: 8 + } + } + ) + end + + context 'when tracker should not be included' do + let(:tracker) { create(:bulk_import_tracker, entity: entity, relation: 'BulkImports::Common::Pipelines::MilestonesPipeline') } + + context 'when tracker is for a file extraction pipeline' do + it 'does not include the tracker' do + expect(entity.checksums).to eq({}) + end + end + + context 'when tracker is skipped' do + it 'does not include the tracker' do + tracker.skip! + + expect(entity.checksums).to eq({}) + end + end + + context 'when tracker checksums are zeros' do + it 'does not include the tracker' do + tracker.update!( + source_objects_count: 0, + fetched_objects_count: 0, + imported_objects_count: 0 + ) + + expect(entity.checksums).to eq({}) + end + end + end + end end diff --git a/spec/models/bulk_imports/export_status_spec.rb b/spec/models/bulk_imports/export_status_spec.rb index aa3bce78534..d17ca0aeaaf 100644 --- a/spec/models/bulk_imports/export_status_spec.rb +++ b/spec/models/bulk_imports/export_status_spec.rb @@ -389,4 +389,12 @@ RSpec.describe BulkImports::ExportStatus, :clean_gitlab_redis_cache, feature_cat end end end + + describe '#total_objects_count' do + let(:status) { BulkImports::Export::FINISHED } + + it 'returns total objects count' do + expect(subject.total_objects_count).to eq(1) + end + end end diff --git a/spec/models/bulk_imports/tracker_spec.rb b/spec/models/bulk_imports/tracker_spec.rb index 25cd5489a9f..474fc4e2ead 100644 --- a/spec/models/bulk_imports/tracker_spec.rb +++ b/spec/models/bulk_imports/tracker_spec.rb @@ -110,4 +110,100 @@ RSpec.describe BulkImports::Tracker, type: :model, feature_category: :importers end end end + + describe '#checksums' do + let(:tracker) { create(:bulk_import_tracker) } + let(:checksums) { { source: 1, fetched: 1, imported: 1 } } + + before do + allow(tracker).to receive(:file_extraction_pipeline?).and_return(true) + allow(tracker).to receive_message_chain(:pipeline_class, :relation, :to_sym).and_return(:labels) + end + + context 'when checksums are cached' do + it 'returns the cached checksums' do + allow(BulkImports::ObjectCounter).to receive(:summary).and_return(checksums) + + expect(tracker.checksums).to eq({ labels: checksums }) + end + end + + context 'when checksums are persisted' do + it 'returns the persisted checksums' do + allow(BulkImports::ObjectCounter).to receive(:summary).and_return(nil) + + tracker.update!( + source_objects_count: checksums[:source], + fetched_objects_count: checksums[:fetched], + imported_objects_count: checksums[:imported] + ) + + expect(tracker.checksums).to eq({ labels: checksums }) + end + end + + context 'when pipeline is not a file extraction pipeline' do + it 'returns nil' do + allow(tracker).to receive(:file_extraction_pipeline?).and_return(false) + + expect(tracker.checksums).to be_nil + end + end + end + + describe '#checksums_empty?' do + let(:tracker) { create(:bulk_import_tracker) } + + before do + allow(tracker).to receive_message_chain(:pipeline_class, :relation, :to_sym).and_return(:labels) + end + + context 'when checksums are missing' do + it 'returns true' do + allow(tracker).to receive(:checksums).and_return(nil) + + expect(tracker.checksums_empty?).to eq(true) + end + end + + context 'when checksums are present' do + it 'returns false' do + allow(tracker) + .to receive(:checksums) + .and_return({ labels: { source: 1, fetched: 1, imported: 1 } }) + + expect(tracker.checksums_empty?).to eq(false) + end + end + + context 'when checksums are all zeros' do + it 'returns true' do + allow(tracker) + .to receive(:checksums) + .and_return({ labels: { source: 0, fetched: 0, imported: 0 } }) + + expect(tracker.checksums_empty?).to eq(true) + end + end + end + + describe 'checksums persistence' do + let(:tracker) { create(:bulk_import_tracker, :started) } + + context 'when transitioned to finished' do + it 'persists the checksums' do + expect(BulkImports::ObjectCounter).to receive(:persist!).with(tracker) + + tracker.finish! + end + end + + context 'when transitioned to failed' do + it 'persists the checksums' do + expect(BulkImports::ObjectCounter).to receive(:persist!).with(tracker) + + tracker.fail_op! + end + end + end end |