42 lines
1.8 KiB
Ruby
42 lines
1.8 KiB
Ruby
describe DownloadableFileService do
|
|
let(:procedure) { create(:procedure, :published) }
|
|
let(:service) { ProcedureArchiveService.new(procedure) }
|
|
|
|
before do
|
|
FileUtils.mkdir_p('/tmp/test_archive_creation')
|
|
stub_const("DownloadableFileService::ARCHIVE_CREATION_DIR", '/tmp/test_archive_creation')
|
|
end
|
|
|
|
describe '#download_and_zip' do
|
|
let(:archive) { build(:archive, id: '3') }
|
|
let(:filename) { service.send(:zip_root_folder, archive) }
|
|
|
|
it 'create a tmpdir while block is running' do
|
|
previous_dir_list = Dir.entries(DownloadableFileService::ARCHIVE_CREATION_DIR)
|
|
|
|
DownloadableFileService.download_and_zip(procedure, [], filename) do |_zip_file|
|
|
new_dir_list = Dir.entries(DownloadableFileService::ARCHIVE_CREATION_DIR)
|
|
expect(previous_dir_list).not_to eq(new_dir_list)
|
|
end
|
|
end
|
|
|
|
it 'cleans up its tmpdir after block execution' do
|
|
expect { DownloadableFileService.download_and_zip(procedure, [], filename) { |zip_file| } }
|
|
.not_to change { Dir.entries(DownloadableFileService::ARCHIVE_CREATION_DIR) }
|
|
end
|
|
|
|
it 'creates a zip with zip utility' do
|
|
expected_zip_path = File.join(DownloadableFileService::ARCHIVE_CREATION_DIR, "#{service.send(:zip_root_folder, archive)}.zip")
|
|
expect(DownloadableFileService).to receive(:system).with('zip', '-0', '-r', expected_zip_path, an_instance_of(String))
|
|
DownloadableFileService.download_and_zip(procedure, [], filename) { |zip_path| }
|
|
end
|
|
|
|
it 'cleans up its generated zip' do
|
|
expected_zip_path = File.join(DownloadableFileService::ARCHIVE_CREATION_DIR, "#{service.send(:zip_root_folder, archive)}.zip")
|
|
DownloadableFileService.download_and_zip(procedure, [], filename) do |_zip_path|
|
|
expect(File.exist?(expected_zip_path)).to be_truthy
|
|
end
|
|
expect(File.exist?(expected_zip_path)).to be_falsey
|
|
end
|
|
end
|
|
end
|