From 7565a25b516c44164c74dfc2d0b822057294b98a Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Thu, 11 Feb 2021 15:36:11 +0100 Subject: [PATCH] rend accessible l'affectation d'un instructeur MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit en remplaçant select2 par ComboMultipleDropdownList --- .../groupe_instructeurs_controller.rb | 4 ++-- .../groupe_instructeurs/show.html.haml | 9 ++++----- .../groupe_instructeurs_controller_spec.rb | 12 ++++++------ spec/features/routing/full_scenario_spec.rb | 10 ++++++---- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/controllers/new_administrateur/groupe_instructeurs_controller.rb b/app/controllers/new_administrateur/groupe_instructeurs_controller.rb index e90523e76..91375a9a4 100644 --- a/app/controllers/new_administrateur/groupe_instructeurs_controller.rb +++ b/app/controllers/new_administrateur/groupe_instructeurs_controller.rb @@ -80,8 +80,8 @@ module NewAdministrateur end def add_instructeur - emails = params['emails'].presence || [] - emails = emails.map(&:strip).map(&:downcase) + emails = params['emails'].presence || [].to_json + emails = JSON.parse(emails).map(&:strip).map(&:downcase) correct_emails, bad_emails = emails .partition { |email| URI::MailTo::EMAIL_REGEXP.match?(email) } diff --git a/app/views/new_administrateur/groupe_instructeurs/show.html.haml b/app/views/new_administrateur/groupe_instructeurs/show.html.haml index c026fa1c9..1ada176e6 100644 --- a/app/views/new_administrateur/groupe_instructeurs/show.html.haml +++ b/app/views/new_administrateur/groupe_instructeurs/show.html.haml @@ -25,12 +25,11 @@ .instructeur-wrapper - if !@procedure.routee? %p.notice Entrez les adresses email des instructeurs que vous souhaitez affecter à cette démarche - = select_tag :emails, - options_for_select(@available_instructeur_emails), - multiple: true, - class: 'select-instructeurs select2-limited' + - hidden_field_id = SecureRandom.uuid + = hidden_field_tag :emails, nil, data: { uuid: hidden_field_id } + = react_component("ComboMultipleDropdownList", options: @available_instructeur_emails, selected: [], disabled: [], hiddenFieldId: hidden_field_id, label: 'email instructeur') - = f.submit 'Affecter', class: 'button primary send' + = f.submit 'Affecter', class: 'button primary send' %table.table.mt-2 %thead diff --git a/spec/controllers/new_administrateur/groupe_instructeurs_controller_spec.rb b/spec/controllers/new_administrateur/groupe_instructeurs_controller_spec.rb index a4bf90d06..697409c6b 100644 --- a/spec/controllers/new_administrateur/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/new_administrateur/groupe_instructeurs_controller_spec.rb @@ -207,11 +207,11 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do describe '#add_instructeur_procedure_non_routee' do let(:procedure) { create :procedure, administrateur: admin } - let(:emails) { ['instructeur_3@ministere_a.gouv.fr', 'instructeur_4@ministere_b.gouv.fr'] } + let(:emails) { ['instructeur_3@ministere_a.gouv.fr', 'instructeur_4@ministere_b.gouv.fr'].to_json } subject { post :add_instructeur, params: { emails: emails, procedure_id: procedure.id, id: gi_1_1.id } } context 'when all emails are valid' do - let(:emails) { ['test@b.gouv.fr', 'test2@b.gouv.fr'] } + let(:emails) { ['test@b.gouv.fr', 'test2@b.gouv.fr'].to_json } it { expect(response.status).to eq(200) } it { expect(subject.request.flash[:alert]).to be_nil } it { expect(subject.request.flash[:notice]).to be_present } @@ -219,7 +219,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do end context 'when there is at least one bad email' do - let(:emails) { ['badmail', 'instructeur2@gmail.com'] } + let(:emails) { ['badmail', 'instructeur2@gmail.com'].to_json } it { expect(response.status).to eq(200) } it { expect(subject.request.flash[:alert]).to be_present } it { expect(subject.request.flash[:notice]).to be_present } @@ -227,7 +227,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do end context 'when the admin wants to assign an instructor who is already assigned on this procedure' do - let(:emails) { ['instructeur_1@ministere_a.gouv.fr'] } + let(:emails) { ['instructeur_1@ministere_a.gouv.fr'].to_json } it { expect(subject.request.flash[:alert]).to be_present } it { expect(subject).to redirect_to admin_procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) } end @@ -247,7 +247,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do params: { procedure_id: procedure.id, id: gi_1_2.id, - emails: new_instructeur_emails + emails: new_instructeur_emails.to_json } end @@ -281,7 +281,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do end context 'of an empty string' do - let(:new_instructeur_emails) { '' } + let(:new_instructeur_emails) { [''] } it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_2)) } end diff --git a/spec/features/routing/full_scenario_spec.rb b/spec/features/routing/full_scenario_spec.rb index ba9a5607a..d8438d5b2 100644 --- a/spec/features/routing/full_scenario_spec.rb +++ b/spec/features/routing/full_scenario_spec.rb @@ -30,14 +30,16 @@ feature 'The routing', js: true do expect(page).to have_field('Nom du groupe', with: 'littéraire') # add victor to littéraire groupe - find('input.select2-search__field').send_keys('victor@inst.com', :enter) + # find('input.select2-search__field').send_keys('victor@inst.com', :enter) + find("input[aria-label='email instructeur'").send_keys('victor@inst.com', :enter) + click_on 'Affecter' perform_enqueued_jobs { click_on 'Affecter' } expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") victor = User.find_by(email: 'victor@inst.com').instructeur # add superwoman to littéraire groupe - find('input.select2-search__field').send_keys('superwoman@inst.com', :enter) + find("input[aria-label='email instructeur'").send_keys('superwoman@inst.com', :enter) perform_enqueued_jobs { click_on 'Affecter' } expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") @@ -50,14 +52,14 @@ feature 'The routing', js: true do expect(page).to have_text('Le groupe d’instructeurs « scientifique » a été créé.') # add marie to scientifique groupe - find('input.select2-search__field').send_keys('marie@inst.com', :enter) + find("input[aria-label='email instructeur'").send_keys('marie@inst.com', :enter) perform_enqueued_jobs { click_on 'Affecter' } expect(page).to have_text("L’instructeur marie@inst.com a été affecté") marie = User.find_by(email: 'marie@inst.com').instructeur # add superwoman to scientifique groupe - find('input.select2-search__field').send_keys('superwoman@inst.com', :enter) + find("input[aria-label='email instructeur'").send_keys('superwoman@inst.com', :enter) perform_enqueued_jobs { click_on 'Affecter' } expect(page).to have_text("L’instructeur superwoman@inst.com a été affecté")