File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments