db(task): create previews for pjs in one week
This commit is contained in:
parent
c9d74c46d1
commit
30da11823b
2 changed files with 85 additions and 0 deletions
|
@ -0,0 +1,36 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Maintenance
|
||||
class CreatePreviewsForPjOfLatestDossiersTask < MaintenanceTasks::Task
|
||||
attribute :start_text, :string
|
||||
validates :start_text, presence: true
|
||||
|
||||
attribute :end_text, :string
|
||||
validates :end_text, presence: true
|
||||
|
||||
def collection
|
||||
start_date = DateTime.parse(start_text)
|
||||
end_date = DateTime.parse(end_text)
|
||||
|
||||
Dossier
|
||||
.state_en_construction_ou_instruction
|
||||
.where(depose_at: start_date..end_date)
|
||||
end
|
||||
|
||||
def process(dossier)
|
||||
champ_ids = Champ
|
||||
.where(dossier_id: dossier)
|
||||
.where(type: ["Champs::PieceJustificativeChamp", 'Champs::TitreIdentiteChamp'])
|
||||
.ids
|
||||
|
||||
attachments = ActiveStorage::Attachment
|
||||
.where(record_id: champ_ids)
|
||||
|
||||
attachments.each do |attachment|
|
||||
next if !(attachment.previewable? && attachment.representation_required?)
|
||||
attachment.preview(resize_to_limit: [400, 400]).processed unless attachment.preview(resize_to_limit: [400, 400]).image.attached?
|
||||
rescue MiniMagick::Error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,49 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
module Maintenance
|
||||
RSpec.describe CreatePreviewsForPjOfLatestDossiersTask do
|
||||
describe "#process" do
|
||||
let(:procedure) { create(:procedure_with_dossiers) }
|
||||
let(:dossier) { procedure.dossiers.first }
|
||||
let(:type_de_champ_pj) { create(:type_de_champ_piece_justificative, stable_id: 3, libelle: 'Justificatif de domicile', procedure:) }
|
||||
let(:champ_pj) { create(:champ_piece_justificative, type_de_champ: type_de_champ_pj, dossier:) }
|
||||
let(:blob_info) do
|
||||
{
|
||||
filename: file.original_filename,
|
||||
byte_size: file.size,
|
||||
checksum: Digest::SHA256.file(file.path),
|
||||
content_type: file.content_type,
|
||||
# we don't want to run virus scanner on this file
|
||||
metadata: { virus_scan_result: ActiveStorage::VirusScanner::SAFE }
|
||||
}
|
||||
end
|
||||
let(:blob) do
|
||||
blob = ActiveStorage::Blob.create_before_direct_upload!(**blob_info)
|
||||
blob.upload(file)
|
||||
blob
|
||||
end
|
||||
|
||||
let(:attachment) { ActiveStorage::Attachment.create(name: "test", blob: blob, record: champ_pj) }
|
||||
|
||||
before do
|
||||
dossier.update(
|
||||
depose_at: Date.new(2024, 05, 23),
|
||||
state: "en_construction"
|
||||
)
|
||||
end
|
||||
|
||||
subject(:process) { described_class.process(dossier) }
|
||||
|
||||
context "when pj is a pdf" do
|
||||
let(:file) { fixture_file_upload('spec/fixtures/files/RIB.pdf', 'application/pdf') }
|
||||
|
||||
it "creates a preview" do
|
||||
expect(attachment.preview(resize_to_limit: [400, 400]).image.attached?).to be false
|
||||
expect { subject }.to change { attachment.reload.preview(resize_to_limit: [400, 400]).image.attached? }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue