other option for groupe instructeurs injection

This commit is contained in:
simon lehericey 2024-11-07 11:20:03 +01:00
parent 08fb49d176
commit 1424fca469
No known key found for this signature in database
GPG key ID: CDE670D827C7B3C5
5 changed files with 37 additions and 29 deletions

View file

@ -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

View file

@ -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

View file

@ -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')

View file

@ -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

View file

@ -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