refactor(sva): dossier can't repasser en construction without pending correction

This commit is contained in:
Colin Darie 2023-06-06 14:41:47 +02:00
parent 30df476791
commit d70278a534
No known key found for this signature in database
GPG key ID: 4FB865FDBCA4BCC4
9 changed files with 48 additions and 5 deletions

View file

@ -15,7 +15,7 @@ class Instructeurs::EnConstructionMenuComponent < ApplicationComponent
end end
def menu_label def menu_label
if dossier.en_construction? if !dossier.may_repasser_en_construction?
t('.request_correction') t('.request_correction')
else else
t(".revert_en_construction") t(".revert_en_construction")

View file

@ -15,13 +15,13 @@ module DossierCorrectableConcern
return if en_construction? return if en_construction?
repasser_en_construction!(instructeur: commentaire.instructeur) repasser_en_construction_with_pending_correction!(instructeur: commentaire.instructeur)
end end
def may_flag_as_pending_correction? def may_flag_as_pending_correction?
return false if pending_corrections.exists? return false if pending_corrections.exists?
en_construction? || may_repasser_en_construction? en_construction? || may_repasser_en_construction_with_pending_correction?
end end
def pending_correction? def pending_correction?

View file

@ -201,6 +201,10 @@ class Dossier < ApplicationRecord
end end
event :repasser_en_construction, after: :after_repasser_en_construction do event :repasser_en_construction, after: :after_repasser_en_construction do
transitions from: :en_instruction, to: :en_construction, guard: :can_repasser_en_construction?
end
event :repasser_en_construction_with_pending_correction, after: :after_repasser_en_construction do
transitions from: :en_instruction, to: :en_construction transitions from: :en_instruction, to: :en_construction
end end
@ -581,6 +585,10 @@ class Dossier < ApplicationRecord
false false
end end
def can_repasser_en_construction?
!procedure.sva_svr_enabled?
end
def can_repasser_en_instruction? def can_repasser_en_instruction?
termine? && !user_deleted? termine? && !user_deleted?
end end

View file

@ -46,7 +46,7 @@
%li{ 'data-turbo': turbo ? 'true' : 'false' } %li{ 'data-turbo': turbo ? 'true' : 'false' }
= button_to passer_en_instruction_instructeur_dossier_path(procedure_id, dossier_id), method: :post, class: 'fr-btn fr-icon-edit-line' do = button_to passer_en_instruction_instructeur_dossier_path(procedure_id, dossier_id), method: :post, class: 'fr-btn fr-icon-edit-line' do
Passer en instruction Passer en instruction
- elsif Dossier.states[:en_instruction] == state && !with_menu - elsif Dossier.states[:en_instruction] == state && !with_menu && !sva_svr
%li{ 'data-turbo': turbo ? 'true' : 'false' } %li{ 'data-turbo': turbo ? 'true' : 'false' }
= button_to repasser_en_construction_instructeur_dossier_path(procedure_id, dossier_id), method: :post, class: 'fr-btn fr-btn--secondary fr-icon-draft-line' do = button_to repasser_en_construction_instructeur_dossier_path(procedure_id, dossier_id), method: :post, class: 'fr-btn fr-btn--secondary fr-icon-draft-line' do
Repasser en construction Repasser en construction

View file

@ -183,6 +183,7 @@
dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id),
close_to_expiration: @statut == 'expirant', close_to_expiration: @statut == 'expirant',
hidden_by_administration: @statut == 'supprimes_recemment', hidden_by_administration: @statut == 'supprimes_recemment',
sva_svr: @procedure.sva_svr_enabled?,
turbo: false, turbo: false,
with_menu: false } with_menu: false }
%tfoot %tfoot

View file

@ -101,6 +101,7 @@
dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id), dossier_is_followed: @followed_dossiers_id.include?(p.dossier_id),
close_to_expiration: nil, close_to_expiration: nil,
hidden_by_administration: nil, hidden_by_administration: nil,
sva_svr: p.sva_svr_decision_on.present?,
turbo: false, turbo: false,
with_menu: false } with_menu: false }

View file

@ -49,5 +49,15 @@ RSpec.describe Instructeurs::EnConstructionMenuComponent, type: :component do
expect(subject).to have_dropdown_item('Repasser en construction') expect(subject).to have_dropdown_item('Repasser en construction')
expect(subject).to have_dropdown_items(count: 3) expect(subject).to have_dropdown_items(count: 3)
end end
context 'when procedure is sva' do
let(:dossier) { create(:dossier, :en_instruction, procedure: create(:procedure, :sva)) }
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_items(count: 2)
end
end
end end
end end

View file

@ -41,7 +41,7 @@ describe DossierCorrectableConcern do
end end
end end
context 'when dossier is not en_instruction' do context 'when dossier is en_instruction' do
let(:dossier) { create(:dossier, :en_instruction) } let(:dossier) { create(:dossier, :en_instruction) }
it 'creates a correction' do it 'creates a correction' do
@ -76,6 +76,18 @@ describe DossierCorrectableConcern do
expect { dossier.flag_as_pending_correction!(commentaire) }.not_to change { dossier.corrections.pending.count } expect { dossier.flag_as_pending_correction!(commentaire) }.not_to change { dossier.corrections.pending.count }
end end
end end
context 'when procedure is sva' do
let(:dossier) { create(:dossier, :en_instruction, procedure: create(:procedure, :published, :sva)) }
it 'creates a correction' do
expect { dossier.flag_as_pending_correction!(commentaire) }.to change { dossier.corrections.pending.count }.by(1)
end
it 'repasse dossier en_construction' do
expect { dossier.flag_as_pending_correction!(commentaire) }.to change { dossier.state }.to('en_construction')
end
end
end end
describe "#resolve_pending_correction!" do describe "#resolve_pending_correction!" do

View file

@ -1135,6 +1135,17 @@ describe Dossier, type: :model do
end end
end end
describe '#can_repasser_en_construction?' do
let(:dossier) { create(:dossier, :en_instruction) }
it { expect(dossier.can_repasser_en_construction?).to be_truthy }
context 'when procedure is sva' do
let(:dossier) { create(:dossier, :en_instruction, procedure: create(:procedure, :sva)) }
it { expect(dossier.can_repasser_en_construction?).to be_falsey }
end
end
describe '#can_passer_automatiquement_en_instruction?' do describe '#can_passer_automatiquement_en_instruction?' do
let(:dossier) { create(:dossier, :en_construction, declarative_triggered_at: declarative_triggered_at) } let(:dossier) { create(:dossier, :en_construction, declarative_triggered_at: declarative_triggered_at) }
let(:declarative_triggered_at) { nil } let(:declarative_triggered_at) { nil }