2021-12-22 16:03:36 +01:00
|
|
|
describe DownloadManager::ParallelDownloadQueue do
|
2021-12-13 14:35:13 +01:00
|
|
|
let(:test_dir) { Dir.mktmpdir(nil, Dir.tmpdir) }
|
|
|
|
let(:download_to_dir) { test_dir }
|
2021-12-22 16:03:36 +01:00
|
|
|
before do
|
|
|
|
downloadable_manager.on_error = proc { |_, _, _| }
|
|
|
|
end
|
2021-12-13 14:35:13 +01:00
|
|
|
|
2021-12-22 16:03:36 +01:00
|
|
|
after { FileUtils.remove_entry_secure(test_dir) if Dir.exist?(test_dir) }
|
2021-12-13 14:35:13 +01:00
|
|
|
|
2021-12-22 16:03:36 +01:00
|
|
|
let(:downloadable_manager) { DownloadManager::ParallelDownloadQueue.new([attachment], download_to_dir) }
|
2021-12-13 14:35:13 +01:00
|
|
|
describe '#download_one' do
|
2021-12-22 16:03:36 +01:00
|
|
|
subject { downloadable_manager.download_one(attachment: attachment, path_in_download_dir: destination, http_client: double) }
|
2021-12-13 14:35:13 +01:00
|
|
|
|
2021-12-22 16:03:36 +01:00
|
|
|
let(:destination) { 'lol.png' }
|
2021-12-13 14:35:13 +01:00
|
|
|
let(:attachment) do
|
2022-11-18 11:30:21 +01:00
|
|
|
ActiveStorage::FakeAttachment.new(
|
2021-12-13 14:35:13 +01:00
|
|
|
file: StringIO.new('coucou'),
|
|
|
|
filename: "export-dossier.pdf",
|
|
|
|
name: 'pdf_export_for_instructeur',
|
|
|
|
id: 1,
|
|
|
|
created_at: Time.zone.now
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2022-11-18 11:30:21 +01:00
|
|
|
context 'with a ActiveStorage::FakeAttachment and it works' do
|
2021-12-13 14:35:13 +01:00
|
|
|
it 'write attachment.file to disk' do
|
2021-12-22 16:03:36 +01:00
|
|
|
target = File.join(download_to_dir, destination)
|
2021-12-13 14:35:13 +01:00
|
|
|
expect { subject }.to change { File.exist?(target) }
|
|
|
|
attachment.file.rewind
|
|
|
|
expect(attachment.file.read).to eq(File.read(target))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-11-18 11:30:21 +01:00
|
|
|
context 'with a ActiveStorage::FakeAttachment and it fails' do
|
2021-12-13 14:35:13 +01:00
|
|
|
it 'write attachment.file to disk' do
|
|
|
|
expect(attachment.file).to receive(:read).and_raise("boom")
|
2021-12-22 16:03:36 +01:00
|
|
|
target = File.join(download_to_dir, destination)
|
2021-12-13 14:35:13 +01:00
|
|
|
expect { subject }.to raise_error(StandardError)
|
|
|
|
expect(File.exist?(target)).to be_falsey
|
2021-12-22 16:03:36 +01:00
|
|
|
# expect(downloadable_manager.errors).to have_key(destination)
|
2021-12-13 14:35:13 +01:00
|
|
|
end
|
|
|
|
end
|
2023-05-04 12:45:58 +02:00
|
|
|
|
|
|
|
context 'with a destination filename too long' do
|
|
|
|
let(:destination) { 'a' * 252 + '.txt' }
|
|
|
|
|
|
|
|
it 'limit the file path to 255 bytes' do
|
|
|
|
target = File.join(download_to_dir, 'a' * 251 + '.txt')
|
|
|
|
expect { subject }.to change { File.exist?(target) }
|
|
|
|
attachment.file.rewind
|
|
|
|
expect(attachment.file.read).to eq(File.read(target))
|
|
|
|
end
|
|
|
|
end
|
2021-12-13 14:35:13 +01:00
|
|
|
end
|
|
|
|
end
|