Merge pull request #9372 from colinux/svr

Admin: permet l'activation du SVR
This commit is contained in:
Colin Darie 2023-09-13 12:08:39 +00:00 committed by GitHub
commit f28739d648
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 261 additions and 36 deletions

View file

@ -58,6 +58,19 @@ RSpec.describe Instructeurs::EnConstructionMenuComponent, type: :component do
expect(subject).to have_dropdown_item('Demander une correction')
expect(subject).to have_dropdown_item('Demander à compléter')
expect(subject).to have_dropdown_items(count: 4)
expect(subject).to have_text('Le délai du SVA')
end
end
context 'when procedure is svr' do
let(:dossier) { create(:dossier, :en_instruction, procedure: create(:procedure, :svr)) }
it 'renders a dropdown' do
expect(subject).to have_dropdown_title('Demander une correction')
expect(subject).to have_dropdown_item('Demander une correction')
expect(subject).to have_dropdown_item('Demander à compléter')
expect(subject).to have_dropdown_items(count: 4)
expect(subject).to have_text('Le délai du SVR')
end
end
end

View file

@ -48,6 +48,42 @@ RSpec.describe ProcedureSVASVRProcessDossierJob, type: :job do
end
end
context 'when procedure is SVR' do
let(:procedure) { create(:procedure, :published, :svr, :for_individual) }
it 'should refuse dossier' do
expect(subject.sva_svr_decision_on).to eq(Date.current)
expect(subject).to be_refuse
expect(subject.processed_at).to within(1.second).of(Time.current)
end
context 'when decision is scheduled in the future' do
let!(:dossier) { create(:dossier, :en_instruction, :with_individual, procedure:, depose_at: 1.day.ago, sva_svr_decision_on: 2.months.from_now.to_date) }
it 'should not refuses dossier' do
expect { subject }.not_to change { dossier.reload.updated_at }
expect(subject).to be_en_instruction
end
end
context 'when dossier has pending correction / is en_construction' do
before do
travel_to 2.days.ago do # create correction in past so it will be 3 days of delay
dossier.flag_as_pending_correction!(build(:commentaire, dossier: dossier))
end
end
it 'should not refuses dossier' do
subject
expect(dossier).to be_en_construction
end
it 'should update sva_svr_decision_on with corrections delay' do
expect { subject }.to change { dossier.reload.sva_svr_decision_on }.from(Date.current).to(Date.current + 3.days)
end
end
end
context 'when dossier was submitted before sva was enabled' do
let!(:dossier) { create(:dossier, :en_instruction, :with_individual, procedure:, depose_at: 2.months.ago) }

View file

@ -1103,6 +1103,46 @@ describe Dossier, type: :model do
end
end
describe '#refuser_automatiquement' do
context 'as svr procedure' do
let(:last_operation) { dossier.dossier_operation_logs.last }
let(:procedure) { create(:procedure, :for_individual, :published, :svr) }
let(:dossier) { create(:dossier, :en_instruction, :with_individual, procedure:, sva_svr_decision_on: Date.current, en_instruction_at: DateTime.new(2021, 5, 1, 12)) }
before {
freeze_time
allow(NotificationMailer).to receive(:send_refuse_notification).and_return(double(deliver_later: true))
}
subject {
dossier.refuser_automatiquement!
dossier.reload
}
it 'refuses dossier automatiquement' do
expect(subject.en_instruction_at).to eq(DateTime.new(2021, 5, 1, 12))
expect(subject.processed_at).to eq(Time.current)
expect(subject.declarative_triggered_at).to be_nil
expect(subject.sva_svr_decision_triggered_at).to eq(Time.current)
expect(subject.motivation).to include("dans le délai imparti")
expect(subject).to be_refuse
expect(last_operation.operation).to eq('refuser')
expect(last_operation.automatic_operation?).to be_truthy
expect(NotificationMailer).to have_received(:send_refuse_notification).with(dossier)
expect(subject.attestation).to be_nil
expect(dossier.commentaires.count).to eq(1)
end
context 'for an user having english locale' do
before { dossier.user.update!(locale: 'en') }
it 'translates the motivation' do
expect(subject.motivation).to include('within the time limit')
end
end
end
end
describe '#passer_en_instruction!' do
let(:dossier) { create(:dossier, :en_construction, en_construction_close_to_expiration_notice_sent_at: Time.zone.now) }
let(:last_operation) { dossier.dossier_operation_logs.last }
@ -1324,6 +1364,60 @@ describe Dossier, type: :model do
end
end
describe '#can_refuser_automatiquement?' do
let(:dossier) { create(:dossier, state: initial_state) }
let(:initial_state) { :en_instruction }
it { expect(dossier.can_refuser_automatiquement?).to be_falsey }
context 'when procedure is sva/svr' do
let(:decision) { :svr }
before do
dossier.procedure.update!(sva_svr: SVASVRConfiguration.new(decision:).attributes)
dossier.update!(sva_svr_decision_on: Date.current)
end
it { expect(dossier.can_refuser_automatiquement?).to be_truthy }
context 'when procedure is svr' do
let(:decision) { :svr }
before do
dossier.procedure.update!(sva_svr: SVASVRConfiguration.new(decision:).attributes)
dossier.update!(sva_svr_decision_on: Date.current)
end
it { expect(dossier.can_refuser_automatiquement?).to be_truthy }
context 'when sva_svr_decision_on is in the future' do
before { dossier.update!(sva_svr_decision_on: 1.day.from_now) }
it { expect(dossier.can_refuser_automatiquement?).to be_falsey }
end
context 'when dossier has pending correction' do
let(:dossier) { create(:dossier, :en_construction) }
let!(:dossier_correction) { create(:dossier_correction, dossier:) }
it { expect(dossier.can_refuser_automatiquement?).to be_falsey }
end
context 'when decision is sva' do
let(:decision) { :sva }
it { expect(dossier.can_refuser_automatiquement?).to be_falsey }
end
context 'when dossier was already processed by svr' do
before { dossier.update!(sva_svr_decision_triggered_at: 1.hour.ago) }
it { expect(dossier.can_refuser_automatiquement?).to be_falsey }
end
end
end
end
describe "can't transition to terminer when etablissement is in degraded mode" do
let(:instructeur) { create(:instructeur) }
let(:motivation) { 'motivation' }
@ -1955,7 +2049,13 @@ describe Dossier, type: :model do
context 'procedure sva' do
let(:dossier) { create(:dossier, :en_instruction, procedure: create(:procedure, :sva)) }
it { expect(dossier.spreadsheet_columns(types_de_champ: [])).to include(["Date SVA", :sva_svr_decision_on]) }
it { expect(dossier.spreadsheet_columns(types_de_champ: [])).to include(["Date décision SVA", :sva_svr_decision_on]) }
end
context 'procedure svr' do
let(:dossier) { create(:dossier, :en_instruction, procedure: create(:procedure, :svr)) }
it { expect(dossier.spreadsheet_columns(types_de_champ: [])).to include(["Date décision SVR", :sva_svr_decision_on]) }
end
end

View file

@ -116,7 +116,7 @@ describe ProcedurePresentation do
it { is_expected.to include(name_field, surname_field, gender_field) }
end
context 'when the procedure is sva/svr' do
context 'when the procedure is sva' do
let(:procedure) { create(:procedure, :for_individual, :sva) }
let(:procedure_presentation) { create(:procedure_presentation, assign_to: assign_to) }
@ -127,6 +127,18 @@ describe ProcedurePresentation do
it { is_expected.to include(decision_on, decision_before_field) }
end
context 'when the procedure is svr' do
let(:procedure) { create(:procedure, :for_individual, :svr) }
let(:procedure_presentation) { create(:procedure_presentation, assign_to: assign_to) }
let(:decision_on) { { "label" => "Date décision SVR", "table" => "self", "column" => "sva_svr_decision_on", 'classname' => '', 'virtual' => false, "type" => :date, "scope" => '', "value_column" => :value, 'filterable' => true } }
let(:decision_before_field) { { "label" => "Date décision SVR avant", "table" => "self", "column" => "sva_svr_decision_before", 'classname' => '', 'virtual' => true, "type" => :date, "scope" => '', "value_column" => :value, 'filterable' => true } }
subject { procedure_presentation.fields }
it { is_expected.to include(decision_on, decision_before_field) }
end
end
describe "#displayable_fields_for_select" do