diff --git a/app/controllers/instructeurs/avis_controller.rb b/app/controllers/instructeurs/avis_controller.rb index 2e552b707..f44da58cf 100644 --- a/app/controllers/instructeurs/avis_controller.rb +++ b/app/controllers/instructeurs/avis_controller.rb @@ -12,13 +12,13 @@ module Instructeurs DONNES_STATUS = 'donnes' def index - avis = current_instructeur.avis.includes(dossier: [groupe_instructeur: :procedure]) + avis = current_instructeur.avis.includes(:procedure) @avis_by_procedure = avis.to_a.group_by(&:procedure) end def procedure @procedure = Procedure.find(params[:procedure_id]) - instructeur_avis = current_instructeur.avis.includes(:dossier).where(dossiers: { groupe_instructeur: GroupeInstructeur.where(procedure: @procedure.id) }) + instructeur_avis = current_instructeur.avis.includes(:dossier).where(dossiers: { revision: @procedure.revisions }) @avis_a_donner = instructeur_avis.without_answer @avis_donnes = instructeur_avis.with_answer diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 21d93ef9f..486682003 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -254,7 +254,7 @@ module Users dossier = Dossier.new( revision: procedure.active_revision, - groupe_instructeur: procedure.defaut_groupe_instructeur, + groupe_instructeur: procedure.defaut_groupe_instructeur_for_new_dossier, user: current_user, state: Dossier.states.fetch(:brouillon) ) @@ -338,7 +338,21 @@ module Users end def change_groupe_instructeur? - params[:dossier][:groupe_instructeur_id].present? && @dossier.groupe_instructeur_id != params[:dossier][:groupe_instructeur_id].to_i + if params[:dossier].key?(:groupe_instructeur_id) + groupe_instructeur_id = params[:dossier][:groupe_instructeur_id] + if groupe_instructeur_id.nil? + @dossier.groupe_instructeur_id.present? + else + @dossier.groupe_instructeur_id != groupe_instructeur_id.to_i + end + end + end + + def groupe_instructeur_from_params + groupe_instructeur_id = params[:dossier][:groupe_instructeur_id] + if groupe_instructeur_id.present? + @dossier.procedure.groupe_instructeurs.find(groupe_instructeur_id) + end end def update_dossier_and_compute_errors @@ -357,13 +371,16 @@ module Users if !@dossier.save errors += @dossier.errors.full_messages elsif change_groupe_instructeur? - groupe_instructeur = @dossier.procedure.groupe_instructeurs.find(params[:dossier][:groupe_instructeur_id]) - @dossier.assign_to_groupe_instructeur(groupe_instructeur) + @dossier.assign_to_groupe_instructeur(groupe_instructeur_from_params) end end if !save_draft? errors += @dossier.check_mandatory_champs + + if @dossier.groupe_instructeur.nil? + errors << "Le champ « #{@dossier.procedure.routing_criteria_name} » doit être rempli" + end end errors diff --git a/app/graphql/mutations/dossier_changer_groupe_instructeur.rb b/app/graphql/mutations/dossier_changer_groupe_instructeur.rb index 0109d00aa..11a21db8f 100644 --- a/app/graphql/mutations/dossier_changer_groupe_instructeur.rb +++ b/app/graphql/mutations/dossier_changer_groupe_instructeur.rb @@ -19,7 +19,7 @@ module Mutations def authorized?(dossier:, groupe_instructeur:) if dossier.groupe_instructeur == groupe_instructeur return false, { errors: ["Le dossier est déjà avec le grope instructeur: '#{groupe_instructeur.label}'"] } - elsif dossier.groupe_instructeur.procedure != groupe_instructeur.procedure + elsif dossier.procedure != groupe_instructeur.procedure return false, { errors: ["Le groupe instructeur '#{groupe_instructeur.label}' n’appartient pas à la même démarche que le dossier"] } else true diff --git a/app/models/avis.rb b/app/models/avis.rb index ba410c41f..a571f44fa 100644 --- a/app/models/avis.rb +++ b/app/models/avis.rb @@ -22,6 +22,7 @@ class Avis < ApplicationRecord belongs_to :instructeur, optional: true belongs_to :experts_procedure, optional: true belongs_to :claimant, class_name: 'Instructeur', optional: false + has_one :procedure, through: :dossier has_one_attached :piece_justificative_file has_one_attached :introduction_file @@ -79,10 +80,6 @@ class Avis < ApplicationRecord ] end - def procedure - dossier.procedure - end - def revoked? revoked_at.present? end diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 4796b18f0..368e4ef6e 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -77,7 +77,7 @@ class Dossier < ApplicationRecord has_many :dossier_operation_logs, -> { order(:created_at) }, inverse_of: :dossier - belongs_to :groupe_instructeur, optional: false + belongs_to :groupe_instructeur, optional: true belongs_to :revision, class_name: 'ProcedureRevision', optional: false belongs_to :user, optional: false @@ -293,8 +293,8 @@ class Dossier < ApplicationRecord # select users who have submitted dossier for the given 'procedures.id' users_who_submitted = state_not_brouillon - .joins(:groupe_instructeur) - .where("groupe_instructeurs.procedure_id = procedures.id") + .joins(:revision) + .where("procedure_revisions.procedure_id = procedures.id") .select(:user_id) # select dossier in brouillon where procedure closes in two days and for which the user has not submitted a Dossier state_brouillon @@ -321,7 +321,7 @@ class Dossier < ApplicationRecord delegate :siret, :siren, to: :etablissement, allow_nil: true delegate :france_connect_information, to: :user - before_save :build_default_champs, if: Proc.new { groupe_instructeur_id_was.nil? } + before_save :build_default_champs, if: Proc.new { revision_id_was.nil? } before_save :update_search_terms after_save :send_dossier_received @@ -330,7 +330,7 @@ class Dossier < ApplicationRecord validates :user, presence: true validates :individual, presence: true, if: -> { revision.procedure.for_individual? } - validates :groupe_instructeur, presence: true + validates :groupe_instructeur, presence: true, if: -> { !brouillon? } def motivation return nil if !termine? @@ -419,7 +419,7 @@ class Dossier < ApplicationRecord end def show_groupe_instructeur_details? - procedure.routee? && (!procedure.feature_enabled?(:procedure_routage_api) || !defaut_groupe_instructeur?) + procedure.routee? && groupe_instructeur.present? && (!procedure.feature_enabled?(:procedure_routage_api) || !defaut_groupe_instructeur?) end def show_groupe_instructeur_selector? @@ -427,7 +427,7 @@ class Dossier < ApplicationRecord end def assign_to_groupe_instructeur(groupe_instructeur, author = nil) - if groupe_instructeur.procedure == procedure && groupe_instructeur != self.groupe_instructeur + if (groupe_instructeur.nil? || groupe_instructeur.procedure == procedure) && self.groupe_instructeur != groupe_instructeur if update(groupe_instructeur: groupe_instructeur, groupe_instructeur_updated_at: Time.zone.now) unfollow_stale_instructeurs diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 65037a387..37c97e980 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -599,6 +599,12 @@ class Procedure < ApplicationRecord groupe_instructeurs.count > 1 end + def defaut_groupe_instructeur_for_new_dossier + if !routee? || feature_enabled?(:procedure_routage_api) + defaut_groupe_instructeur + end + end + def can_be_deleted_by_administrateur? brouillon? || dossiers.state_instruction_commencee.empty? end diff --git a/app/services/administrateur_usage_statistics_service.rb b/app/services/administrateur_usage_statistics_service.rb index d00de6cb0..3c46a6ab0 100644 --- a/app/services/administrateur_usage_statistics_service.rb +++ b/app/services/administrateur_usage_statistics_service.rb @@ -125,10 +125,10 @@ class AdministrateurUsageStatisticsService result = {} Dossier - .joins(groupe_instructeur: { procedure: [:administrateurs] }) + .joins(revision: { procedure: [:administrateurs] }) .group( 'administrateurs.id', - 'groupe_instructeurs.procedure_id', + 'procedure_revisions.procedure_id', <<~EOSQL CASE WHEN state IN('accepte', 'refuse', 'sans_suite') THEN 'termine' diff --git a/app/views/commencer/show.html.haml b/app/views/commencer/show.html.haml index 81c357f55..7abafdd4a 100644 --- a/app/views/commencer/show.html.haml +++ b/app/views/commencer/show.html.haml @@ -11,7 +11,7 @@ = link_to 'J’ai déjà un compte', commencer_sign_in_path(path: @procedure.path), class: ['button large expand'] - else - - dossiers = current_user.dossiers.where(groupe_instructeur: @procedure.groupe_instructeurs) + - dossiers = current_user.dossiers.where(revision: @procedure.revisions) - drafts = dossiers.merge(Dossier.state_brouillon) - not_drafts = dossiers.merge(Dossier.state_not_brouillon) diff --git a/app/views/shared/dossiers/_edit.html.haml b/app/views/shared/dossiers/_edit.html.haml index 290d91e6f..dc8d31118 100644 --- a/app/views/shared/dossiers/_edit.html.haml +++ b/app/views/shared/dossiers/_edit.html.haml @@ -34,19 +34,9 @@ = f.label :groupe_instructeur_id do = dossier.procedure.routing_criteria_name %span.mandatory * - -# The routing dropdown has 'include_blank: false', because otherwise a blank - -# value may nullify the groupe_instructeur – and thus the link between the dossier - -# and its procedure. - -# - -# If, one day, we need to make clearer to the user that they must actually choose an - -# option, THINK TWICE before adding a blank option, and what would happen if the form is - -# saved when the blank option is selected. - -# Instead please consider other possibilities; like using CSS to gray out the default option, - -# or adding some "(please select an option)" wording aside the label of the default group. - -# CSS = f.select :groupe_instructeur_id, dossier.procedure.groupe_instructeurs.order(:label).map { |gi| [gi.label, gi.id] }, - { include_blank: false } + { include_blank: dossier.brouillon? } = f.fields_for :champs, dossier.champs do |champ_form| - champ = champ_form.object diff --git a/spec/controllers/instructeurs/procedures_controller_spec.rb b/spec/controllers/instructeurs/procedures_controller_spec.rb index 7e5f2e561..eddbdeef4 100644 --- a/spec/controllers/instructeurs/procedures_controller_spec.rb +++ b/spec/controllers/instructeurs/procedures_controller_spec.rb @@ -275,20 +275,8 @@ describe Instructeurs::ProceduresController, type: :controller do it { expect(assigns(:procedure)).to eq(procedure) } end - context 'with a new brouillon dossier' do - let!(:brouillon_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:brouillon)) } - - before { subject } - - it { expect(assigns(:a_suivre_dossiers)).to be_empty } - it { expect(assigns(:followed_dossiers)).to be_empty } - it { expect(assigns(:termines_dossiers)).to be_empty } - it { expect(assigns(:all_state_dossiers)).to be_empty } - it { expect(assigns(:archived_dossiers)).to be_empty } - end - context 'with a new dossier without follower' do - let!(:new_unfollow_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) } + let!(:new_unfollow_dossier) { create(:dossier, :en_instruction, procedure: procedure) } before { subject } @@ -310,7 +298,7 @@ describe Instructeurs::ProceduresController, type: :controller do end context 'with a new dossier with a follower' do - let!(:new_followed_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) } + let!(:new_followed_dossier) { create(:dossier, :en_instruction, procedure: procedure) } before do instructeur.followed_dossiers << new_followed_dossier @@ -339,7 +327,7 @@ describe Instructeurs::ProceduresController, type: :controller do end context 'with a termine dossier with a follower' do - let!(:termine_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:accepte)) } + let!(:termine_dossier) { create(:dossier, :accepte, procedure: procedure) } before { subject } @@ -361,7 +349,7 @@ describe Instructeurs::ProceduresController, type: :controller do end context 'with an archived dossier' do - let!(:archived_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction), archived: true) } + let!(:archived_dossier) { create(:dossier, :en_instruction, procedure: procedure, archived: true) } before { subject } @@ -372,8 +360,8 @@ describe Instructeurs::ProceduresController, type: :controller do it { expect(assigns(:archived_dossiers)).to match_array([archived_dossier]) } context 'and terminer dossiers on each of the others groups' do - let!(:archived_dossier_on_gi_2) { create(:dossier, groupe_instructeur: gi_2, state: Dossier.states.fetch(:en_instruction), archived: true) } - let!(:archived_dossier_on_gi_3) { create(:dossier, groupe_instructeur: gi_3, state: Dossier.states.fetch(:en_instruction), archived: true) } + let!(:archived_dossier_on_gi_2) { create(:dossier, :en_instruction, groupe_instructeur: gi_2, archived: true) } + let!(:archived_dossier_on_gi_3) { create(:dossier, :en_instruction, groupe_instructeur: gi_3, archived: true) } before { subject } @@ -382,10 +370,10 @@ describe Instructeurs::ProceduresController, type: :controller do end describe 'statut' do - let!(:a_suivre__dossier) { Timecop.freeze(1.day.ago) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) } } - let!(:new_followed_dossier) { Timecop.freeze(2.days.ago) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) } } - let!(:termine_dossier) { Timecop.freeze(3.days.ago) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:accepte)) } } - let!(:archived_dossier) { Timecop.freeze(4.days.ago) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction), archived: true) } } + let!(:a_suivre__dossier) { Timecop.freeze(1.day.ago) { create(:dossier, :en_instruction, procedure: procedure) } } + let!(:new_followed_dossier) { Timecop.freeze(2.days.ago) { create(:dossier, :en_instruction, procedure: procedure) } } + let!(:termine_dossier) { Timecop.freeze(3.days.ago) { create(:dossier, :accepte, procedure: procedure) } } + let!(:archived_dossier) { Timecop.freeze(4.days.ago) { create(:dossier, :en_instruction, procedure: procedure, archived: true) } } before do instructeur.followed_dossiers << new_followed_dossier diff --git a/spec/controllers/users/dossiers_controller_spec.rb b/spec/controllers/users/dossiers_controller_spec.rb index 5c81263f7..1bd747264 100644 --- a/spec/controllers/users/dossiers_controller_spec.rb +++ b/spec/controllers/users/dossiers_controller_spec.rb @@ -342,6 +342,7 @@ describe Users::DossiersController, type: :controller do { id: dossier.id, dossier: { + groupe_instructeur_id: dossier.groupe_instructeur_id, champs_attributes: { id: first_champ.id, value: value @@ -418,19 +419,44 @@ describe Users::DossiersController, type: :controller do let(:another_group) { create(:groupe_instructeur, procedure: procedure) } let(:instructeur_of_dossier) { create(:instructeur) } let(:instructeur_in_another_group) { create(:instructeur) } - let!(:dossier) { create(:dossier, groupe_instructeur: dossier_group, user: user) } - before do - allow(DossierMailer).to receive(:notify_new_dossier_depose_to_instructeur).and_return(double(deliver_later: nil)) - create(:assign_to, instructeur: instructeur_of_dossier, procedure: dossier.procedure, instant_email_dossier_notifications_enabled: true, groupe_instructeur: dossier_group) - create(:assign_to, instructeur: instructeur_in_another_group, procedure: dossier.procedure, instant_email_dossier_notifications_enabled: true, groupe_instructeur: another_group) + context "and grope instructeur is set" do + let!(:dossier) { create(:dossier, groupe_instructeur: dossier_group, user: user) } + + before do + allow(DossierMailer).to receive(:notify_new_dossier_depose_to_instructeur).and_return(double(deliver_later: nil)) + create(:assign_to, instructeur: instructeur_of_dossier, procedure: dossier.procedure, instant_email_dossier_notifications_enabled: true, groupe_instructeur: dossier_group) + create(:assign_to, instructeur: instructeur_in_another_group, procedure: dossier.procedure, instant_email_dossier_notifications_enabled: true, groupe_instructeur: another_group) + end + + it "sends notification mail to instructeurs in the correct group instructeur" do + subject + + expect(DossierMailer).to have_received(:notify_new_dossier_depose_to_instructeur).once.with(dossier, instructeur_of_dossier.email) + expect(DossierMailer).not_to have_received(:notify_new_dossier_depose_to_instructeur).with(dossier, instructeur_in_another_group.email) + end end - it "sends notification mail to instructeurs in the correct group instructeur" do - subject + context "and groupe instructeur is not set" do + let(:dossier) { create(:dossier, procedure: procedure, user: user) } + let(:submit_payload) do + { + id: dossier.id, + dossier: { + champs_attributes: { + id: first_champ.id, + value: value + } + }, + submit_draft: false + } + end - expect(DossierMailer).to have_received(:notify_new_dossier_depose_to_instructeur).once.with(dossier, instructeur_of_dossier.email) - expect(DossierMailer).not_to have_received(:notify_new_dossier_depose_to_instructeur).with(dossier, instructeur_in_another_group.email) + it "can not submit" do + subject + + expect(flash.alert).to eq(['Le champ « Votre ville » doit être rempli']) + end end end @@ -557,6 +583,7 @@ describe Users::DossiersController, type: :controller do { id: dossier.id, dossier: { + groupe_instructeur_id: dossier.groupe_instructeur_id, champs_attributes: [ { id: first_champ.id, @@ -826,15 +853,16 @@ describe Users::DossiersController, type: :controller do context "with PDF output" do let(:procedure) { create(:procedure) } - let(:dossier) { - create(:dossier, - :accepte, - :with_all_champs, - :with_motivation, - :with_commentaires, - procedure: procedure, - user: user) -} + let(:dossier) do + create(:dossier, + :accepte, + :with_all_champs, + :with_motivation, + :with_commentaires, + procedure: procedure, + user: user) + end + subject! { get(:show, params: { id: dossier.id, format: :pdf }) } context 'when the dossier is a brouillon' do diff --git a/spec/factories/dossier.rb b/spec/factories/dossier.rb index 4ec2e572e..29d01759b 100644 --- a/spec/factories/dossier.rb +++ b/spec/factories/dossier.rb @@ -19,7 +19,7 @@ FactoryBot.define do # Assign the procedure to the dossier through the groupe_instructeur if dossier.groupe_instructeur.nil? - dossier.groupe_instructeur = procedure.defaut_groupe_instructeur + dossier.groupe_instructeur = procedure.routee? ? nil : procedure.defaut_groupe_instructeur end dossier.build_default_individual @@ -117,6 +117,7 @@ FactoryBot.define do trait :en_construction do after(:create) do |dossier, _evaluator| dossier.state = Dossier.states.fetch(:en_construction) + dossier.groupe_instructeur ||= dossier.procedure&.defaut_groupe_instructeur dossier.en_construction_at ||= dossier.created_at + 1.minute dossier.save! end @@ -125,6 +126,7 @@ FactoryBot.define do trait :en_instruction do after(:create) do |dossier, _evaluator| dossier.state = Dossier.states.fetch(:en_instruction) + dossier.groupe_instructeur ||= dossier.procedure&.defaut_groupe_instructeur dossier.en_construction_at ||= dossier.created_at + 1.minute dossier.en_instruction_at ||= dossier.en_construction_at + 1.minute dossier.save! @@ -139,6 +141,7 @@ FactoryBot.define do after(:create) do |dossier, evaluator| dossier.state = Dossier.states.fetch(:accepte) + dossier.groupe_instructeur ||= dossier.procedure&.defaut_groupe_instructeur processed_at = evaluator.processed_at if processed_at.present? dossier.en_construction_at ||= processed_at - 2.minutes @@ -156,6 +159,7 @@ FactoryBot.define do trait :refuse do after(:create) do |dossier, _evaluator| dossier.state = Dossier.states.fetch(:refuse) + dossier.groupe_instructeur ||= dossier.procedure&.defaut_groupe_instructeur dossier.en_construction_at ||= dossier.created_at + 1.minute dossier.en_instruction_at ||= dossier.en_construction_at + 1.minute dossier.traitements.build(state: Dossier.states.fetch(:refuse), processed_at: dossier.en_instruction_at + 1.minute) @@ -166,6 +170,7 @@ FactoryBot.define do trait :sans_suite do after(:create) do |dossier, _evaluator| dossier.state = Dossier.states.fetch(:sans_suite) + dossier.groupe_instructeur ||= dossier.procedure&.defaut_groupe_instructeur dossier.en_construction_at ||= dossier.created_at + 1.minute dossier.en_instruction_at ||= dossier.en_construction_at + 1.minute dossier.traitements.build(state: Dossier.states.fetch(:sans_suite), processed_at: dossier.en_instruction_at + 1.minute) diff --git a/spec/models/procedure_presentation_spec.rb b/spec/models/procedure_presentation_spec.rb index 6d600bfb1..1949fb4b9 100644 --- a/spec/models/procedure_presentation_spec.rb +++ b/spec/models/procedure_presentation_spec.rb @@ -733,8 +733,8 @@ describe ProcedurePresentation do let!(:gi_2) { procedure.groupe_instructeurs.create(label: 'gi2') } let!(:gi_3) { procedure.groupe_instructeurs.create(label: 'gi3') } - let!(:kept_dossier) { create(:dossier, procedure: procedure) } - let!(:discarded_dossier) { create(:dossier, procedure: procedure, groupe_instructeur: gi_2) } + let!(:kept_dossier) { create(:dossier, :en_construction, procedure: procedure) } + let!(:discarded_dossier) { create(:dossier, :en_construction, procedure: procedure, groupe_instructeur: gi_2) } it { is_expected.to contain_exactly(kept_dossier.id) } diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index f767a1fce..273527ea6 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -603,6 +603,7 @@ describe Procedure do Timecop.freeze(now) do procedure.publish_or_reopen!(administrateur) end + procedure.reload canonical_procedure.reload end @@ -1054,7 +1055,7 @@ describe Procedure do end context 'with a new brouillon dossier' do - let!(:brouillon_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:brouillon)) } + let!(:brouillon_dossier) { create(:dossier, procedure: procedure) } it { expect(subject['a_suivre']).to eq(0) } it { expect(subject['suivis']).to eq(0) } @@ -1064,7 +1065,7 @@ describe Procedure do end context 'with a new dossier without follower' do - let!(:new_unfollow_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) } + let!(:new_unfollow_dossier) { create(:dossier, :en_instruction, procedure: procedure) } it { expect(subject['a_suivre']).to eq(1) } it { expect(subject['suivis']).to eq(0) } @@ -1073,8 +1074,8 @@ describe Procedure do it { expect(subject['archived']).to eq(0) } context 'and dossiers without follower on each of the others groups' do - let!(:new_unfollow_dossier_on_gi_2) { create(:dossier, groupe_instructeur: gi_2, state: Dossier.states.fetch(:en_instruction)) } - let!(:new_unfollow_dossier_on_gi_3) { create(:dossier, groupe_instructeur: gi_3, state: Dossier.states.fetch(:en_instruction)) } + let!(:new_unfollow_dossier_on_gi_2) { create(:dossier, :en_instruction, groupe_instructeur: gi_2) } + let!(:new_unfollow_dossier_on_gi_3) { create(:dossier, :en_instruction, groupe_instructeur: gi_3) } before { subject } @@ -1084,7 +1085,7 @@ describe Procedure do end context 'with a new dossier with a follower' do - let!(:new_followed_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) } + let!(:new_followed_dossier) { create(:dossier, :en_instruction, procedure: procedure) } before do instructeur.followed_dossiers << new_followed_dossier @@ -1097,8 +1098,8 @@ describe Procedure do it { expect(subject['archived']).to eq(0) } context 'and dossier with a follower on each of the others groups' do - let!(:new_follow_dossier_on_gi_2) { create(:dossier, groupe_instructeur: gi_2, state: Dossier.states.fetch(:en_instruction)) } - let!(:new_follow_dossier_on_gi_3) { create(:dossier, groupe_instructeur: gi_3, state: Dossier.states.fetch(:en_instruction)) } + let!(:new_follow_dossier_on_gi_2) { create(:dossier, :en_instruction, groupe_instructeur: gi_2) } + let!(:new_follow_dossier_on_gi_3) { create(:dossier, :en_instruction, groupe_instructeur: gi_3) } before do instructeur.followed_dossiers << new_follow_dossier_on_gi_2 << new_follow_dossier_on_gi_3 @@ -1121,7 +1122,7 @@ describe Procedure do end context 'with a termine dossier' do - let!(:termine_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:accepte)) } + let!(:termine_dossier) { create(:dossier, :accepte, procedure: procedure) } it { expect(subject['a_suivre']).to eq(0) } it { expect(subject['suivis']).to eq(0) } @@ -1130,8 +1131,8 @@ describe Procedure do it { expect(subject['archived']).to eq(0) } context 'and terminer dossiers on each of the others groups' do - let!(:termine_dossier_on_gi_2) { create(:dossier, groupe_instructeur: gi_2, state: Dossier.states.fetch(:accepte)) } - let!(:termine_dossier_on_gi_3) { create(:dossier, groupe_instructeur: gi_3, state: Dossier.states.fetch(:accepte)) } + let!(:termine_dossier_on_gi_2) { create(:dossier, :accepte, groupe_instructeur: gi_2) } + let!(:termine_dossier_on_gi_3) { create(:dossier, :accepte, groupe_instructeur: gi_3) } before { subject } @@ -1144,7 +1145,7 @@ describe Procedure do end context 'with an archived dossier' do - let!(:archived_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction), archived: true) } + let!(:archived_dossier) { create(:dossier, :en_instruction, procedure: procedure, archived: true) } it { expect(subject['a_suivre']).to eq(0) } it { expect(subject['suivis']).to eq(0) } @@ -1153,8 +1154,8 @@ describe Procedure do it { expect(subject['archived']).to eq(1) } context 'and terminer dossiers on each of the others groups' do - let!(:archived_dossier_on_gi_2) { create(:dossier, groupe_instructeur: gi_2, state: Dossier.states.fetch(:en_instruction), archived: true) } - let!(:archived_dossier_on_gi_3) { create(:dossier, groupe_instructeur: gi_3, state: Dossier.states.fetch(:en_instruction), archived: true) } + let!(:archived_dossier_on_gi_2) { create(:dossier, :en_instruction, groupe_instructeur: gi_2, archived: true) } + let!(:archived_dossier_on_gi_3) { create(:dossier, :en_instruction, groupe_instructeur: gi_3, archived: true) } it { expect(subject['archived']).to eq(2) } end diff --git a/spec/views/shared/dossiers/_champs.html.haml_spec.rb b/spec/views/shared/dossiers/_champs.html.haml_spec.rb index 14fedde0b..a441f7ef5 100644 --- a/spec/views/shared/dossiers/_champs.html.haml_spec.rb +++ b/spec/views/shared/dossiers/_champs.html.haml_spec.rb @@ -63,9 +63,20 @@ describe 'shared/dossiers/champs.html.haml', type: :view do let(:dossier) { create(:dossier, procedure: procedure) } let(:champs) { [] } - it "renders the routing criteria name and its value" do - expect(subject).to include(procedure.routing_criteria_name) - expect(subject).to include(dossier.groupe_instructeur.label) + it "does not render the routing criteria name and its value" do + expect(subject).not_to include(procedure.routing_criteria_name) + expect(subject).not_to include(dossier.procedure.defaut_groupe_instructeur.label) + end + + context "with selected groupe instructeur" do + before do + dossier.groupe_instructeur = dossier.procedure.defaut_groupe_instructeur + end + + it "renders the routing criteria name and its value" do + expect(subject).to include(procedure.routing_criteria_name) + expect(subject).to include(dossier.groupe_instructeur.label) + end end context "with seen_at" do diff --git a/spec/views/shared/dossiers/_edit.html.haml_spec.rb b/spec/views/shared/dossiers/_edit.html.haml_spec.rb index 531f2d32c..4935c3024 100644 --- a/spec/views/shared/dossiers/_edit.html.haml_spec.rb +++ b/spec/views/shared/dossiers/_edit.html.haml_spec.rb @@ -98,7 +98,17 @@ describe 'shared/dossiers/edit.html.haml', type: :view do it 'renders the routing criteria name and its value' do expect(subject).to have_field(procedure.routing_criteria_name) - expect(subject).to include(dossier.groupe_instructeur.label) + end + + context 'when groupe instructeur is selected' do + before do + dossier.groupe_instructeur = dossier.procedure.defaut_groupe_instructeur + end + + it 'renders the routing criteria name and its value' do + expect(subject).to have_field(procedure.routing_criteria_name) + expect(subject).to include(dossier.groupe_instructeur.label) + end end end end