fix(dossier): we can't terminer any dossier having etablissements in degraded mode

Closes #8449
This commit is contained in:
Colin Darie 2023-01-18 18:31:37 +01:00
parent d986c998b8
commit 428dd9bf1a
3 changed files with 24 additions and 2 deletions

View file

@ -315,7 +315,7 @@ module Instructeurs
def aasm_error_message(exception, target_state:)
if exception.originating_state == target_state
"Le dossier est déjà #{dossier_display_state(target_state, lower: true)}."
elsif exception.failures.include?(:can_terminer?)
elsif exception.failures.include?(:can_terminer?) && dossier.any_etablissement_as_degraded_mode?
"Les données relatives au SIRET de ce dossier nont pas pu encore être vérifiées : il nest pas possible de le passer #{dossier_display_state(target_state, lower: true)}."
else
"Le dossier est en ce moment #{dossier_display_state(exception.originating_state, lower: true)} : il nest pas possible de le passer #{dossier_display_state(target_state, lower: true)}."

View file

@ -540,7 +540,7 @@ class Dossier < ApplicationRecord
end
def can_terminer?
return false if etablissement&.as_degraded_mode?
return false if any_etablissement_as_degraded_mode?
true
end
@ -569,6 +569,13 @@ class Dossier < ApplicationRecord
termine? || reason == :procedure_removed
end
def any_etablissement_as_degraded_mode?
return true if etablissement&.as_degraded_mode?
return true if champs_public_all.any? { _1.etablissement&.as_degraded_mode? }
false
end
def messagerie_available?
visible_by_administration? && !hidden_by_user? && !user_deleted? && !archived
end

View file

@ -1192,6 +1192,21 @@ describe Dossier do
expect(dossier_ok.accepter_automatiquement(instructeur:, motivation:)).to be_truthy
end
end
context "when a SIRET champ has etablissement in degraded mode" do
let(:dossier_incomplete) { create(:dossier, :en_instruction) }
let(:dossier_ok) { create(:dossier, :en_instruction) }
before do
dossier_incomplete.champs_public << create(:champ_siret, dossier: dossier_incomplete, etablissement: Etablissement.new(siret: build(:etablissement).siret))
dossier_ok.champs_public << create(:champ_siret, dossier: dossier_ok)
end
it "can't accepter" do
expect(dossier_incomplete.may_accepter?(instructeur:, motivation:)).to be_falsey
expect(dossier_ok.may_accepter?(instructeur:, motivation:)).to be_truthy
end
end
end
describe "#check_mandatory_and_visible_champs" do