diff options
Diffstat (limited to 'spec/services/bulk_imports/lfs_objects_export_service_spec.rb')
-rw-r--r-- | spec/services/bulk_imports/lfs_objects_export_service_spec.rb | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/spec/services/bulk_imports/lfs_objects_export_service_spec.rb b/spec/services/bulk_imports/lfs_objects_export_service_spec.rb new file mode 100644 index 00000000000..5ae54ed309b --- /dev/null +++ b/spec/services/bulk_imports/lfs_objects_export_service_spec.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe BulkImports::LfsObjectsExportService do + let_it_be(:project) { create(:project) } + let_it_be(:lfs_json_filename) { "#{BulkImports::FileTransfer::ProjectConfig::LFS_OBJECTS_RELATION}.json" } + let_it_be(:remote_url) { 'http://my-object-storage.local' } + + let(:export_path) { Dir.mktmpdir } + let(:lfs_object) { create(:lfs_object, :with_file) } + + subject(:service) { described_class.new(project, export_path) } + + before do + stub_lfs_object_storage + + %w(wiki design).each do |repository_type| + create( + :lfs_objects_project, + project: project, + repository_type: repository_type, + lfs_object: lfs_object + ) + end + + project.lfs_objects << lfs_object + end + + after do + FileUtils.remove_entry(export_path) if Dir.exist?(export_path) + end + + describe '#execute' do + it 'exports lfs objects and their repository types' do + filepath = File.join(export_path, lfs_json_filename) + + service.execute + + expect(File).to exist(File.join(export_path, lfs_object.oid)) + expect(File).to exist(filepath) + + lfs_json = Gitlab::Json.parse(File.read(filepath)) + + expect(lfs_json).to eq( + { + lfs_object.oid => [ + LfsObjectsProject.repository_types['wiki'], + LfsObjectsProject.repository_types['design'], + nil + ] + } + ) + end + + context 'when lfs object is remotely stored' do + let(:lfs_object) { create(:lfs_object, :object_storage) } + + it 'downloads lfs object from object storage' do + expect_next_instance_of(LfsObjectUploader) do |instance| + expect(instance).to receive(:url).and_return(remote_url) + end + + expect(subject).to receive(:download).with(remote_url, File.join(export_path, lfs_object.oid)) + + service.execute + end + end + end +end |