aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/workers/workbench_import_worker.rb24
-rw-r--r--spec/fixtures/multiref.zipbin0 -> 11432 bytes
-rw-r--r--spec/fixtures/uniref.zip (renamed from spec/fixtures/neptune.zip)bin4904 -> 4904 bytes
-rw-r--r--spec/workers/workbench_import_worker_spec.rb36
4 files changed, 51 insertions, 9 deletions
diff --git a/app/workers/workbench_import_worker.rb b/app/workers/workbench_import_worker.rb
index 1def3cb86..18d3ae112 100644
--- a/app/workers/workbench_import_worker.rb
+++ b/app/workers/workbench_import_worker.rb
@@ -12,10 +12,32 @@ class WorkbenchImportWorker
def download
logger.warn "HTTP GET #{import_url}"
- @downloaded = AF83::HTTPFetcher.get_resource(
+ zipfile_data = AF83::HTTPFetcher.get_resource(
host: import_host,
path: import_path,
params: {token: import.token_download})
+
+ Tempfile.open( do | tmpfile |
+ tmpfile.write zipfile_data
+ @downloaded = tmpfile.path
+ end
+
+ if one_entry?
+ upload(@downloaded)
+ else
+ split_zip.each(&method(:upload))
+ end
+ end
+
+ def single_entry?
+ true
+ end
+
+ def split_zip
+ []
+ end
+
+ def upload zip_file
end
def import_host
diff --git a/spec/fixtures/multiref.zip b/spec/fixtures/multiref.zip
new file mode 100644
index 000000000..5b28f7cad
--- /dev/null
+++ b/spec/fixtures/multiref.zip
Binary files differ
diff --git a/spec/fixtures/neptune.zip b/spec/fixtures/uniref.zip
index 86b688b51..86b688b51 100644
--- a/spec/fixtures/neptune.zip
+++ b/spec/fixtures/uniref.zip
Binary files differ
diff --git a/spec/workers/workbench_import_worker_spec.rb b/spec/workers/workbench_import_worker_spec.rb
index a1f8659e7..9a1df5bc3 100644
--- a/spec/workers/workbench_import_worker_spec.rb
+++ b/spec/workers/workbench_import_worker_spec.rb
@@ -1,7 +1,7 @@
RSpec.describe WorkbenchImportWorker, type: [:worker, :request] do
let( :worker ) { described_class.new }
- let( :import ){ build_stubbed :import, token_download: download_token }
+ let( :import ){ build_stubbed :import, token_download: download_token, file: File.open(zip_file) }
let( :workbench ){ import.workbench }
let( :referential ){ import.referential }
@@ -19,16 +19,36 @@ RSpec.describe WorkbenchImportWorker, type: [:worker, :request] do
end
- it 'downloads a zip file' do
+ context 'multireferential zipfile' do
+ let( :zip_file ){ File.join(fixture_path, 'multiref.zip') }
- default_headers = {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}
- stub_request(:get, url)
- .with(headers: default_headers)
- .to_return(body: result)
+ it 'downloads a zip file' do
+ default_headers = {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}
+ stub_request(:get, url)
+ .with(headers: default_headers)
+ .to_return(body: result)
- worker.perform import.id
+ worker.perform import.id
- expect( worker.downloaded ).to eq( result )
+ expect( File.read(worker.downloaded) ).to eq( result )
+ expect( worker ).not_to be_single_entry
+ end
+ end
+
+ context 'unireferential zipfile' do
+ let( :zip_file ){ File.join(fixture_path, 'uniref.zip') }
+
+ it 'downloads a zip file' do
+ default_headers = {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}
+ stub_request(:get, url)
+ .with(headers: default_headers)
+ .to_return(body: result)
+
+ worker.perform import.id
+
+ expect( File.read(worker.downloaded) ).to eq( result )
+ expect( worker ).to be_single_entry
+ end
end
end