commit
d7f9b4fdf6
2 changed files with 1 additions and 140 deletions
|
@ -16,14 +16,6 @@ class ProcedureArchiveService
|
||||||
end
|
end
|
||||||
|
|
||||||
def collect_files_archive(archive, instructeur)
|
def collect_files_archive(archive, instructeur)
|
||||||
if Flipper.enabled?(:zip_using_binary, @procedure)
|
|
||||||
new_collect_files_archive(archive, instructeur)
|
|
||||||
else
|
|
||||||
old_collect_files_archive(archive, instructeur)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def new_collect_files_archive(archive, instructeur)
|
|
||||||
dossiers = Dossier.visible_by_administration
|
dossiers = Dossier.visible_by_administration
|
||||||
.where(groupe_instructeur: archive.groupe_instructeurs)
|
.where(groupe_instructeur: archive.groupe_instructeurs)
|
||||||
|
|
||||||
|
@ -42,47 +34,6 @@ class ProcedureArchiveService
|
||||||
InstructeurMailer.send_archive(instructeur, @procedure, archive).deliver_later
|
InstructeurMailer.send_archive(instructeur, @procedure, archive).deliver_later
|
||||||
end
|
end
|
||||||
|
|
||||||
def old_collect_files_archive(archive, instructeur)
|
|
||||||
dossiers = Dossier.visible_by_administration
|
|
||||||
.where(groupe_instructeur: archive.groupe_instructeurs)
|
|
||||||
|
|
||||||
dossiers = if archive.time_span_type == 'everything'
|
|
||||||
dossiers.state_termine
|
|
||||||
else
|
|
||||||
dossiers.processed_in_month(archive.month)
|
|
||||||
end
|
|
||||||
|
|
||||||
files = create_list_of_attachments(dossiers)
|
|
||||||
|
|
||||||
tmp_file = Tempfile.new(['tc', '.zip'])
|
|
||||||
|
|
||||||
Zip::OutputStream.open(tmp_file) do |zipfile|
|
|
||||||
bug_reports = ''
|
|
||||||
files.each do |attachment, pj_filename|
|
|
||||||
zipfile.put_next_entry("#{zip_root_folder}/#{pj_filename}")
|
|
||||||
begin
|
|
||||||
zipfile.puts(attachment.download)
|
|
||||||
rescue
|
|
||||||
bug_reports += "Impossible de récupérer le fichier #{pj_filename}\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if !bug_reports.empty?
|
|
||||||
zipfile.put_next_entry("#{zip_root_folder}/LISEZMOI.txt")
|
|
||||||
zipfile.puts(bug_reports)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
archive.file.attach(
|
|
||||||
io: File.open(tmp_file),
|
|
||||||
filename: archive.filename(@procedure),
|
|
||||||
# we don't want to run virus scanner on this file
|
|
||||||
metadata: { virus_scan_result: ActiveStorage::VirusScanner::SAFE }
|
|
||||||
)
|
|
||||||
tmp_file.delete
|
|
||||||
archive.make_available!
|
|
||||||
InstructeurMailer.send_archive(instructeur, @procedure, archive).deliver_later
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.procedure_files_size(procedure)
|
def self.procedure_files_size(procedure)
|
||||||
dossiers_files_size(procedure.dossiers)
|
dossiers_files_size(procedure.dossiers)
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,97 +33,7 @@ describe ProcedureArchiveService do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#old_collect_files_archive' do
|
describe '#collect_files_archive' do
|
||||||
before do
|
|
||||||
create_dossier_for_month(year, month)
|
|
||||||
create_dossier_for_month(2020, month)
|
|
||||||
end
|
|
||||||
|
|
||||||
after { Timecop.return }
|
|
||||||
|
|
||||||
context 'for a specific month' do
|
|
||||||
let(:archive) { create(:archive, time_span_type: 'monthly', status: 'pending', month: date_month, groupe_instructeurs: groupe_instructeurs) }
|
|
||||||
let(:year) { 2021 }
|
|
||||||
let(:mailer) { double('mailer', deliver_later: true) }
|
|
||||||
|
|
||||||
it 'collect files' do
|
|
||||||
expect(InstructeurMailer).to receive(:send_archive).and_return(mailer)
|
|
||||||
|
|
||||||
service.collect_files_archive(archive, instructeur)
|
|
||||||
|
|
||||||
archive.file.open do |f|
|
|
||||||
files = ZipTricks::FileReader.read_zip_structure(io: f)
|
|
||||||
expect(files.size).to be 2
|
|
||||||
expect(files.first.filename).to include("export")
|
|
||||||
expect(files.last.filename).to include("attestation")
|
|
||||||
end
|
|
||||||
expect(archive.file.attached?).to be_truthy
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with a missing file' do
|
|
||||||
let(:pj) do
|
|
||||||
PiecesJustificativesService::FakeAttachment.new(
|
|
||||||
file: StringIO.new('coucou'),
|
|
||||||
filename: "export-dossier.pdf",
|
|
||||||
name: 'pdf_export_for_instructeur',
|
|
||||||
id: 1,
|
|
||||||
created_at: Time.zone.now
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
let(:bad_pj) do
|
|
||||||
PiecesJustificativesService::FakeAttachment.new(
|
|
||||||
file: nil,
|
|
||||||
filename: "cni.png",
|
|
||||||
name: 'cni.png',
|
|
||||||
id: 2,
|
|
||||||
created_at: Time.zone.now
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
let(:documents) { [pj, bad_pj] }
|
|
||||||
before do
|
|
||||||
allow(PiecesJustificativesService).to receive(:liste_documents).and_return(documents)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'collect files without raising exception' do
|
|
||||||
expect { service.collect_files_archive(archive, instructeur) }.not_to raise_exception
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'add bug report to archive' do
|
|
||||||
service.collect_files_archive(archive, instructeur)
|
|
||||||
|
|
||||||
archive.file.open do |f|
|
|
||||||
files = ZipTricks::FileReader.read_zip_structure(io: f)
|
|
||||||
expect(files.size).to be 4
|
|
||||||
expect(files.last.filename).to eq("procedure-#{procedure.id}/LISEZMOI.txt")
|
|
||||||
expect(extract(f, files.last)).to match(/Impossible de .*cni.*png/)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'for all months' do
|
|
||||||
let(:archive) { create(:archive, time_span_type: 'everything', status: 'pending', groupe_instructeurs: groupe_instructeurs) }
|
|
||||||
let(:mailer) { double('mailer', deliver_later: true) }
|
|
||||||
|
|
||||||
it 'collect files' do
|
|
||||||
expect(InstructeurMailer).to receive(:send_archive).and_return(mailer)
|
|
||||||
|
|
||||||
service.collect_files_archive(archive, instructeur)
|
|
||||||
|
|
||||||
archive = Archive.last
|
|
||||||
archive.file.open do |f|
|
|
||||||
files = ZipTricks::FileReader.read_zip_structure(io: f)
|
|
||||||
expect(files.size).to be 4
|
|
||||||
end
|
|
||||||
expect(archive.file.attached?).to be_truthy
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#new_collect_files_archive' do
|
|
||||||
before { Flipper.enable_actor(:zip_using_binary, procedure) }
|
|
||||||
let!(:dossier) { create_dossier_for_month(year, month) }
|
let!(:dossier) { create_dossier_for_month(year, month) }
|
||||||
let!(:dossier_2020) { create_dossier_for_month(2020, month) }
|
let!(:dossier_2020) { create_dossier_for_month(2020, month) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue