From 384a06676b8e0985f39fbc894a2d7dd458823529 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 21 Jul 2017 22:32:28 +0200 Subject: Sketching out the unzip/zip process, need to change Tempfile to File.open(..., r) in a configurable directory [amend me] --- app/workers/workbench_import_worker.rb | 24 +++++++++++++++++- spec/fixtures/multiref.zip | Bin 0 -> 11432 bytes spec/fixtures/neptune.zip | Bin 4904 -> 0 bytes spec/fixtures/uniref.zip | Bin 0 -> 4904 bytes spec/workers/workbench_import_worker_spec.rb | 36 +++++++++++++++++++++------ 5 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 spec/fixtures/multiref.zip delete mode 100644 spec/fixtures/neptune.zip create mode 100644 spec/fixtures/uniref.zip 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 Binary files /dev/null and b/spec/fixtures/multiref.zip differ diff --git a/spec/fixtures/neptune.zip b/spec/fixtures/neptune.zip deleted file mode 100644 index 86b688b51..000000000 Binary files a/spec/fixtures/neptune.zip and /dev/null differ diff --git a/spec/fixtures/uniref.zip b/spec/fixtures/uniref.zip new file mode 100644 index 000000000..86b688b51 Binary files /dev/null and b/spec/fixtures/uniref.zip 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 -- cgit v1.2.3