diff --git a/app/controllers/instructeurs/procedure_presentation_controller.rb b/app/controllers/instructeurs/procedure_presentation_controller.rb index 952464188..d16508391 100644 --- a/app/controllers/instructeurs/procedure_presentation_controller.rb +++ b/app/controllers/instructeurs/procedure_presentation_controller.rb @@ -17,6 +17,11 @@ module Instructeurs def refresh_column_filter # According to the html, the selected filters is the last one column = ColumnType.new.cast(params['filters'].last['id']) + + if column.groupe_instructeur? + column.options_for_select = instructeur_groupes(procedure_id: column.h_id[:procedure_id]) + end + component = Instructeurs::ColumnFilterValueComponent.new(column:) render turbo_stream: turbo_stream.replace('value', component) @@ -48,5 +53,10 @@ module Instructeurs .includes(:assign_to) .find_by!(id: params[:id], assign_to: { instructeur: current_instructeur }) end + + def instructeur_groupes(procedure_id:) + current_instructeur.groupe_instructeurs + .filter_map { [_1.label, _1.id] if _1.procedure_id == procedure_id } + end end end diff --git a/app/models/column.rb b/app/models/column.rb index 90fbfcf49..22fa01a6f 100644 --- a/app/models/column.rb +++ b/app/models/column.rb @@ -8,7 +8,8 @@ class Column TYPE_DE_CHAMP_TABLE = 'type_de_champ' - attr_reader :table, :column, :label, :type, :filterable, :displayable, :options_for_select + attr_reader :table, :column, :label, :type, :filterable, :displayable + attr_accessor :options_for_select def initialize(procedure_id:, table:, column:, label: nil, type: :text, filterable: true, displayable: true, options_for_select: []) @procedure_id = procedure_id diff --git a/app/models/concerns/columns_concern.rb b/app/models/concerns/columns_concern.rb index d52b6c403..1cf268744 100644 --- a/app/models/concerns/columns_concern.rb +++ b/app/models/concerns/columns_concern.rb @@ -83,12 +83,7 @@ module ColumnsConcern private - def groupe_instructeurs_id_column - groupes = Current.user&.instructeur&.groupe_instructeurs || [] - options_for_select = groupes.filter_map { [_1.label, _1.id] if _1.procedure_id == id } - - dossier_col(table: 'groupe_instructeur', column: 'id', type: :enum, options_for_select:) - end + def groupe_instructeurs_id_column = dossier_col(table: 'groupe_instructeur', column: 'id', type: :enum) def followers_instructeurs_email_column = dossier_col(table: 'followers_instructeurs', column: 'email') diff --git a/spec/controllers/instructeurs/procedure_presentation_controller_spec.rb b/spec/controllers/instructeurs/procedure_presentation_controller_spec.rb index ccc3d51cb..1fe5d09b3 100644 --- a/spec/controllers/instructeurs/procedure_presentation_controller_spec.rb +++ b/spec/controllers/instructeurs/procedure_presentation_controller_spec.rb @@ -83,4 +83,28 @@ describe Instructeurs::ProcedurePresentationController, type: :controller do end end end + + describe '#refresh_column_filter' do + subject { get :refresh_column_filter, params: { id: procedure_presentation.id, filters: [{ id: column.id }] } } + + let(:procedure) { create(:procedure, :routee) } + let(:instructeur) { create(:instructeur) } + let(:column) { procedure.find_column(label: "Groupe instructeur") } + + let(:procedure_presentation) do + procedure.groupe_instructeurs.each { _1.add(instructeur) } + instructeur.reload.assign_to.first.procedure_presentation_or_default_and_errors.first + end + + before { sign_in(instructeur.user) } + + it 'refreshes the column filter' do + subject + + expect(response).to be_successful + procedure.groupe_instructeurs.each do |gi| + expect(response.body).to include(gi.label) + end + end + end end diff --git a/spec/models/concerns/columns_concern_spec.rb b/spec/models/concerns/columns_concern_spec.rb index 0f046e23d..f6666517f 100644 --- a/spec/models/concerns/columns_concern_spec.rb +++ b/spec/models/concerns/columns_concern_spec.rb @@ -128,28 +128,6 @@ describe ColumnsConcern do it { is_expected.to include(decision_on, decision_before_field) } end - - context 'when the procedure has several groupe instructeur' do - let(:procedure) { create(:procedure, :routee) } - let(:groupe_1) { procedure.groupe_instructeurs.first } - let(:groupe_2) { procedure.groupe_instructeurs.last } - let(:groupe_instructeur_column) { procedure.find_column(label: "Groupe instructeur") } - - context 'and no instructeur is available in current' do - it { expect(groupe_instructeur_column.options_for_select).to eq([]) } - end - - context 'and instructeur is available in current' do - let(:instructeur) { create(:instructeur) } - - before do - procedure.groupe_instructeurs.each { _1.add(instructeur) } - allow(Current).to receive(:user).and_return(instructeur.user) - end - - it { expect(groupe_instructeur_column.options_for_select).to match_array([groupe_1, groupe_2].map { [_1.label, _1.id] }) } - end - end end describe 'export' do