rend accessible l'affectation d'un instructeur
en remplaçant select2 par ComboMultipleDropdownList
This commit is contained in:
parent
3fc7b57b8c
commit
7565a25b51
4 changed files with 18 additions and 17 deletions
|
@ -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) }
|
||||||
|
|
|
@ -25,12 +25,11 @@
|
||||||
.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'
|
||||||
|
|
||||||
%table.table.mt-2
|
%table.table.mt-2
|
||||||
%thead
|
%thead
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 d’instructeurs « scientifique » a été créé.')
|
expect(page).to have_text('Le groupe d’instructeurs « 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("L’instructeur marie@inst.com a été affecté")
|
expect(page).to have_text("L’instructeur 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("L’instructeur superwoman@inst.com a été affecté")
|
expect(page).to have_text("L’instructeur superwoman@inst.com a été affecté")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue