Skip to content

Commit 4ab5ee3

Browse files
authored
Merge pull request #13269 from colinux/regenerate-attestation
ETQ opérateur, ajout d'une task qui (re)génère l'attestation d'un dossier
2 parents 1b80bea + 336723d commit 4ab5ee3

2 files changed

Lines changed: 71 additions & 0 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# frozen_string_literal: true
2+
3+
module Maintenance
4+
class RegenerateAttestationTask < MaintenanceTasks::Task
5+
# Régénère l'attestation de dossiers, par exemple
6+
# si le PDF a été enregistré en base
7+
# mais dont l'upload vers l'object storage a échoué
8+
# (Excon::Error::ServiceUnavailable 503, issue Sentry RAILS-KR7).
9+
#
10+
# L'attestation existante (record + blob/attachment cassé) est supprimée,
11+
# puis régénérée via AttestationPdfGenerationJob.
12+
#
13+
# **Attention**:
14+
# utilise la dernière version de l'attestation,
15+
# pas nécessairement celle en vigueur au moment
16+
# où le dossier a été traité!
17+
#
18+
# dossier_ids : liste d'ids séparés par des virgules et/ou espaces.
19+
20+
attribute :dossier_ids, :string
21+
validates :dossier_ids, presence: true
22+
23+
def collection
24+
Dossier.where(id: parsed_dossier_ids)
25+
end
26+
27+
def process(dossier)
28+
dossier.attestation&.destroy!
29+
AttestationPdfGenerationJob.perform_later(dossier)
30+
end
31+
32+
def count
33+
collection.count
34+
end
35+
36+
private
37+
38+
def parsed_dossier_ids
39+
dossier_ids.to_s.split(/[\s,]+/).map(&:to_i).reject(&:zero?)
40+
end
41+
end
42+
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
require "rails_helper"
4+
5+
module Maintenance
6+
RSpec.describe RegenerateAttestationTask do
7+
describe "#collection" do
8+
let!(:dossier1) { create(:dossier) }
9+
let!(:dossier2) { create(:dossier) }
10+
11+
it "targets the dossiers matching the comma/space separated ids" do
12+
task = described_class.new
13+
task.dossier_ids = " #{dossier1.id}, #{dossier2.id} "
14+
expect(task.collection).to contain_exactly(dossier1, dossier2)
15+
end
16+
end
17+
18+
describe "#process" do
19+
let(:dossier) { create(:dossier, :accepte) }
20+
let!(:broken_attestation) { create(:attestation, dossier:) }
21+
22+
it "destroys the broken attestation and enqueues a regeneration job" do
23+
expect { described_class.new.process(dossier) }
24+
.to have_enqueued_job(AttestationPdfGenerationJob).with(dossier)
25+
.and change { Attestation.exists?(broken_attestation.id) }.from(true).to(false)
26+
end
27+
end
28+
end
29+
end

0 commit comments

Comments
 (0)