Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/bulk_imports/tracker_spec.rb')
-rw-r--r--spec/models/bulk_imports/tracker_spec.rb96
1 files changed, 96 insertions, 0 deletions
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