rend accessible l'affectation d'un instructeur

en remplaçant select2 par ComboMultipleDropdownList
This commit is contained in:
Christophe Robillard 2021-02-11 15:36:11 +01:00 committed by Paul Chavard
parent 3fc7b57b8c
commit 7565a25b51
4 changed files with 18 additions and 17 deletions

View file

@ -80,8 +80,8 @@ module NewAdministrateur
end end
def add_instructeur def add_instructeur
emails = params['emails'].presence || [] emails = params['emails'].presence || [].to_json
emails = emails.map(&:strip).map(&:downcase) emails = JSON.parse(emails).map(&:strip).map(&:downcase)
correct_emails, bad_emails = emails correct_emails, bad_emails = emails
.partition { |email| URI::MailTo::EMAIL_REGEXP.match?(email) } .partition { |email| URI::MailTo::EMAIL_REGEXP.match?(email) }

View file

@ -25,10 +25,9 @@
.instructeur-wrapper .instructeur-wrapper
- if !@procedure.routee? - if !@procedure.routee?
%p.notice Entrez les adresses email des instructeurs que vous souhaitez affecter à cette démarche %p.notice Entrez les adresses email des instructeurs que vous souhaitez affecter à cette démarche
= select_tag :emails, - hidden_field_id = SecureRandom.uuid
options_for_select(@available_instructeur_emails), = hidden_field_tag :emails, nil, data: { uuid: hidden_field_id }
multiple: true, = react_component("ComboMultipleDropdownList", options: @available_instructeur_emails, selected: [], disabled: [], hiddenFieldId: hidden_field_id, label: 'email instructeur')
class: 'select-instructeurs select2-limited'
= f.submit 'Affecter', class: 'button primary send' = f.submit 'Affecter', class: 'button primary send'

View file

@ -207,11 +207,11 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
describe '#add_instructeur_procedure_non_routee' do describe '#add_instructeur_procedure_non_routee' do
let(:procedure) { create :procedure, administrateur: admin } 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 } } subject { post :add_instructeur, params: { emails: emails, procedure_id: procedure.id, id: gi_1_1.id } }
context 'when all emails are valid' do 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(response.status).to eq(200) }
it { expect(subject.request.flash[:alert]).to be_nil } it { expect(subject.request.flash[:alert]).to be_nil }
it { expect(subject.request.flash[:notice]).to be_present } it { expect(subject.request.flash[:notice]).to be_present }
@ -219,7 +219,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
end end
context 'when there is at least one bad email' do 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(response.status).to eq(200) }
it { expect(subject.request.flash[:alert]).to be_present } it { expect(subject.request.flash[:alert]).to be_present }
it { expect(subject.request.flash[:notice]).to be_present } it { expect(subject.request.flash[:notice]).to be_present }
@ -227,7 +227,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
end end
context 'when the admin wants to assign an instructor who is already assigned on this procedure' do 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.request.flash[:alert]).to be_present }
it { expect(subject).to redirect_to admin_procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) } it { expect(subject).to redirect_to admin_procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) }
end end
@ -247,7 +247,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
params: { params: {
procedure_id: procedure.id, procedure_id: procedure.id,
id: gi_1_2.id, id: gi_1_2.id,
emails: new_instructeur_emails emails: new_instructeur_emails.to_json
} }
end end
@ -281,7 +281,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
end end
context 'of an empty string' do 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)) } it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_2)) }
end end

View file

@ -30,14 +30,16 @@ feature 'The routing', js: true do
expect(page).to have_field('Nom du groupe', with: 'littéraire') expect(page).to have_field('Nom du groupe', with: 'littéraire')
# add victor to littéraire groupe # 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' } perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche")
victor = User.find_by(email: 'victor@inst.com').instructeur victor = User.find_by(email: 'victor@inst.com').instructeur
# add superwoman to littéraire groupe # 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' } perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") 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 dinstructeurs « scientifique » a été créé.') expect(page).to have_text('Le groupe dinstructeurs « scientifique » a été créé.')
# add marie to scientifique groupe # 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' } perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Linstructeur marie@inst.com a été affecté") expect(page).to have_text("Linstructeur marie@inst.com a été affecté")
marie = User.find_by(email: 'marie@inst.com').instructeur marie = User.find_by(email: 'marie@inst.com').instructeur
# add superwoman to scientifique groupe # 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' } perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Linstructeur superwoman@inst.com a été affecté") expect(page).to have_text("Linstructeur superwoman@inst.com a été affecté")