Merge pull request #5265 from betagouv/feat/4602

Move admin/assigns to the new UI like groupe_instructeurs
This commit is contained in:
Kara Diaby 2020-06-29 14:53:55 +02:00 committed by GitHub
commit b694d2403a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 154 additions and 298 deletions

View file

@ -1,53 +0,0 @@
class Admin::AssignsController < AdminController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
before_action :retrieve_procedure
ASSIGN = 'assign'
NOT_ASSIGN = 'not_assign'
def show
assign_scope = @procedure.defaut_groupe_instructeur.instructeurs
@instructeurs_assign = smart_listing_create :instructeurs_assign,
assign_scope,
partial: "admin/assigns/list_assign",
array: true
not_assign_scope = current_administrateur.instructeurs.where.not(id: assign_scope.ids)
if params[:filter].present?
filter = params[:filter].downcase.strip
not_assign_scope = not_assign_scope.where('users.email LIKE ?', "%#{filter}%")
end
@instructeurs_not_assign = smart_listing_create :instructeurs_not_assign,
not_assign_scope,
partial: "admin/assigns/list_not_assign",
array: true
end
def update
instructeur = Instructeur.find(params[:instructeur_id])
procedure = Procedure.find(params[:procedure_id])
to = params[:to]
case to
when ASSIGN
if instructeur.assign_to_procedure(procedure)
flash.notice = "L'instructeur a bien été affecté"
else
flash.alert = "L'instructeur a déjà été affecté"
end
when NOT_ASSIGN
if instructeur.remove_from_procedure(procedure)
flash.notice = "L'instructeur a bien été désaffecté"
else
flash.alert = "L'instructeur a déjà été désaffecté"
end
end
redirect_to admin_procedure_assigns_path, procedure_id: params[:procedure_id]
end
end

View file

@ -13,6 +13,7 @@ class Admin::InstructeursController < AdminController
email = params[:instructeur][:email].downcase email = params[:instructeur][:email].downcase
@instructeur = Instructeur.by_email(email) @instructeur = Instructeur.by_email(email)
procedure_id = params[:procedure_id] procedure_id = params[:procedure_id]
procedure = Procedure.find_by(id: procedure_id)
if @instructeur.nil? if @instructeur.nil?
invite_instructeur(email) invite_instructeur(email)
@ -21,7 +22,7 @@ class Admin::InstructeursController < AdminController
end end
if procedure_id.present? if procedure_id.present?
redirect_to admin_procedure_assigns_path(procedure_id: procedure_id) redirect_to procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)
else else
redirect_to admin_instructeurs_path redirect_to admin_instructeurs_path
end end

View file

@ -100,6 +100,7 @@ module NewAdministrateur
create_instructeur(instructeur_email) create_instructeur(instructeur_email)
end end
if procedure.routee?
groupe_instructeur.instructeurs << instructeurs groupe_instructeur.instructeurs << instructeurs
GroupeInstructeurMailer GroupeInstructeurMailer
@ -110,6 +111,16 @@ module NewAdministrateur
count: email_to_adds.count, count: email_to_adds.count,
value: email_to_adds.join(', '), value: email_to_adds.join(', '),
groupe: groupe_instructeur.label) groupe: groupe_instructeur.label)
else
if instructeurs.present?
instructeurs.each do |instructeur|
instructeur.assign_to_procedure(procedure)
end
flash[:notice] = "Les instructeurs ont bien été affectés à la démarche"
end
end
end end
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur) redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
@ -120,14 +131,23 @@ module NewAdministrateur
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe" flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
else else
if procedure.routee?
@instructeur = Instructeur.find(instructeur_id) @instructeur = Instructeur.find(instructeur_id)
groupe_instructeur.instructeurs.destroy(@instructeur) groupe_instructeur.instructeurs.destroy(@instructeur)
flash[:notice] = "Linstructeur « #{@instructeur.email} » a été retiré du groupe." flash[:notice] = "Linstructeur « #{@instructeur.email} » a été retiré du groupe."
GroupeInstructeurMailer GroupeInstructeurMailer
.remove_instructeur(groupe_instructeur, @instructeur, current_user.email) .remove_instructeur(groupe_instructeur, @instructeur, current_user.email)
.deliver_later .deliver_later
end else
instructeur = Instructeur.find(instructeur_id)
if instructeur.remove_from_procedure(procedure)
flash[:notice] = "L'instructeur a bien été désaffecté de la démarche"
else
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
end
end
end
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur) redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
end end

View file

@ -1,20 +0,0 @@
.row{ style: 'height: 34px;' }
- if smart_listing.present?
%table.table#liste-instructeur
%thead
%th Enlever
%th#email{ style: 'text-align: right;' } Email
- @instructeurs_assign.each do |instructeur|
%tr
%td.col-md-1.col-lg-1.col-sm-1.col-xs-1.col-sm-1.col-xs-1.center
= link_to "#{admin_procedure_assigns_path(procedure_id: @procedure.id, instructeur_id: instructeur.id, to: Admin::AssignsController::NOT_ASSIGN)}", class: "btn btn-primary", 'data-method' => 'put' do
.fa.fa-arrow-left
%td{ style: 'padding-top: 11px; font-size: 15px; text-align: right;' }= instructeur.email
= smart_listing.paginate
= smart_listing.pagination_per_page_links
- else
%h4.center
Aucun d'affecté

View file

@ -1,27 +0,0 @@
= smart_listing_controls_for(:instructeurs_not_assign, { class: "form-inline text-right" }) do
.form-group.filter.input-append
= text_field_tag :filter, '', class: "search form-control",
placeholder: "Recherche...", autocomplete: :off
%button.btn.btn-primary{ type: :submit }
%span.fa.fa-search
- if smart_listing.present?
%table.table#liste-instructeur
%thead
%th#email Email
%th Ajouter
- @instructeurs_not_assign.each do |instructeur|
%tr
%td.col-xs-11{ style: 'padding-top: 11px; font-size: 15px;' }= instructeur.email
%td.center
= link_to "#{admin_procedure_assigns_path(procedure_id: @procedure.id, instructeur_id: instructeur.id, to: Admin::AssignsController::ASSIGN)}", class: "btn btn-success instructeur-affectation", 'data-method' => 'put' do
.fa.fa-arrow-right
= smart_listing.paginate
= smart_listing.pagination_per_page_links
- else
%h4.center
Aucun de disponible

View file

@ -1,23 +0,0 @@
.row.white-back
#instructeur_form
.row
.col-xs-6
%h3.text-info Disponibles
= smart_listing_render :instructeurs_not_assign
%br
%h3
= t('dynamics.admin.procedure.onglet_instructeurs.add.title')
#procedure_new.section.section-label
= form_with url: { controller: 'admin/instructeurs', action: :create } do
.row
.col-xs-5
= hidden_field_tag :procedure_id, params[:procedure_id]
= render partial: 'admin/instructeurs/informations'
.col-xs-2
%br
%br
= submit_tag 'Ajouter', class: 'btn btn-info', style: 'float: left;', id: 'add-instructeur-email'
.col-xs-6
%h3.text-success Affectés
= smart_listing_render :instructeurs_assign

View file

@ -1,3 +0,0 @@
<%= smart_listing_update :instructeurs_not_assign %>
<%= smart_listing_update :instructeurs_assign %>

View file

@ -1,4 +1,4 @@
.form-group .form-group
%h4 %p.notice
= 'Email *' = 'Email *'
= text_field_tag 'instructeur[email]', nil, class: 'form-control', placeholder: 'laura.azema@exemple.gouv.fr' = text_field_tag 'instructeur[email]', nil, class: 'form-control', placeholder: 'ex : laura.azema@exemple.gouv.fr'

View file

@ -107,7 +107,7 @@
.alert.alert-info .alert.alert-info
Pour pouvoir tester cette démarche, vous devez dabord lui affecter Pour pouvoir tester cette démarche, vous devez dabord lui affecter
- if @procedure.missing_instructeurs? - if @procedure.missing_instructeurs?
= link_to("des instructeurs", admin_procedure_assigns_path(@procedure)) = link_to("des instructeurs", procedure_groupe_instructeur_path(@procedure, @procedure.defaut_groupe_instructeur))
- if @procedure.missing_instructeurs? && @procedure.service.nil? - if @procedure.missing_instructeurs? && @procedure.service.nil?
et et
- if @procedure.service.nil? - if @procedure.service.nil?
@ -122,7 +122,7 @@
- if @procedure.missing_steps.include?(:instructeurs) - if @procedure.missing_steps.include?(:instructeurs)
%p.alert.alert-danger %p.alert.alert-danger
Vous devez affecter des instructeurs avant de pouvoir publier votre démarche. Vous devez affecter des instructeurs avant de pouvoir publier votre démarche.
= link_to 'Cliquez ici.', admin_procedure_assigns_path(@procedure) = link_to 'Cliquez ici.', procedure_groupe_instructeur_path(@procedure, @procedure.defaut_groupe_instructeur)
%p.alert.alert-info %p.alert.alert-info
Cette démarche na pas encore de lien, et nest pas accessible par le public. Cette démarche na pas encore de lien, et nest pas accessible par le public.

View file

@ -31,7 +31,7 @@
Administrateurs Administrateurs
- if !feature_enabled?(:administrateur_routage) - if !feature_enabled?(:administrateur_routage)
%a#onglet-instructeurs{ href: url_for(admin_procedure_assigns_path(@procedure)) } %a#onglet-instructeurs{ href: url_for(procedure_groupe_instructeur_path(@procedure, @procedure.defaut_groupe_instructeur)) }
.procedure-list-element{ class: ('active' if active == 'Instructeurs') } .procedure-list-element{ class: ('active' if active == 'Instructeurs') }
Instructeurs Instructeurs
- if @procedure.missing_steps.include?(:instructeurs) - if @procedure.missing_steps.include?(:instructeurs)

View file

@ -0,0 +1,9 @@
%h1 Groupe « #{@groupe_instructeur.label} »
.card.mt-2
= form_for @groupe_instructeur,
url: procedure_groupe_instructeur_path(@procedure, @groupe_instructeur),
html: { class: 'form' } do |f|
= f.label :label, 'Nom du groupe'
= f.text_field :label, placeholder: 'Ville de Bordeaux', required: true
= f.submit 'Renommer', class: 'button primary send'

View file

@ -1,20 +1,20 @@
- if feature_enabled?(:administrateur_routage)
= render partial: 'new_administrateur/breadcrumbs', = render partial: 'new_administrateur/breadcrumbs',
locals: { steps: [link_to('Démarches', admin_procedures_path), locals: { steps: [link_to('Démarches', admin_procedures_path),
link_to(@procedure.libelle, admin_procedure_path(@procedure)), link_to(@procedure.libelle, admin_procedure_path(@procedure)),
link_to('Groupes dinstructeurs', procedure_groupe_instructeurs_path(@procedure)), link_to('Groupes dinstructeurs', procedure_groupe_instructeurs_path(@procedure)),
@groupe_instructeur.label] } @groupe_instructeur.label] }
- else
= render partial: 'new_administrateur/breadcrumbs',
locals: { steps: [link_to('Démarches', admin_procedures_path),
link_to(@procedure.libelle, admin_procedure_path(@procedure)),
'Instructeurs'] }
.container.groupe-instructeur .container.groupe-instructeur
%h1 Groupe « #{@groupe_instructeur.label} »
.card.mt-2 - if feature_enabled?(:administrateur_routage)
= form_for @groupe_instructeur, = render partial: 'new_administrateur/groups_header'
url: procedure_groupe_instructeur_path(@procedure, @groupe_instructeur),
html: { class: 'form' } do |f|
= f.label :label, 'Nom du groupe'
= f.text_field :label, placeholder: 'Ville de Bordeaux', required: true
= f.submit 'Renommer', class: 'button primary send'
.card .card
.card-title Affectation des instructeurs .card-title Affectation des instructeurs
@ -23,6 +23,8 @@
html: { class: 'form' } do |f| html: { class: 'form' } do |f|
.instructeur-wrapper .instructeur-wrapper
- if !@procedure.routee?
%p.notice Entrez les adresses email des instructeurs que vous souhaitez affecter à cette démarche
= select_tag :emails, = select_tag :emails,
options_for_select(@available_instructeur_emails), options_for_select(@available_instructeur_emails),
multiple: true, multiple: true,
@ -43,7 +45,7 @@
%td.actions= button_to 'retirer', %td.actions= button_to 'retirer',
{ action: :remove_instructeur }, { action: :remove_instructeur },
{ method: :delete, { method: :delete,
data: { confirm: "Êtes-vous sûr de vouloir retirer linstructeur « #{instructeur.email} » du groupe  « #{@groupe_instructeur.label} » ?" }, data: { confirm: feature_enabled?(:administrateur_routage) ? "Êtes-vous sûr de vouloir retirer linstructeur « #{instructeur.email} » du groupe  « #{@groupe_instructeur.label} » ?" : "Êtes-vous sûr de vouloir retirer linstructeur « #{instructeur.email} » de la démarche ?" },
params: { instructeur: { id: instructeur.id }}, params: { instructeur: { id: instructeur.id }},
class: 'button' } class: 'button' }

View file

@ -202,8 +202,6 @@ Rails.application.routes.draw do
post 'transfer' => 'procedures#transfer', as: :transfer post 'transfer' => 'procedures#transfer', as: :transfer
put 'clone' => 'procedures#clone', as: :clone put 'clone' => 'procedures#clone', as: :clone
resource :assigns, only: [:show, :update], path: 'instructeurs'
resource :attestation_template, only: [:edit, :update, :create] resource :attestation_template, only: [:edit, :update, :create]
post 'attestation_template/disactivate' => 'attestation_templates#disactivate' post 'attestation_template/disactivate' => 'attestation_templates#disactivate'

View file

@ -1,62 +0,0 @@
describe Admin::AssignsController, type: :controller do
let(:admin) { create(:administrateur) }
before do
sign_in(admin.user)
end
describe 'GET #show' do
let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] }
let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] }
let!(:instructeur_not_assigned_1) { create :instructeur, email: 'instructeur_3@ministere_a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_not_assigned_2) { create :instructeur, email: 'instructeur_4@ministere_b.gouv.fr', administrateurs: [admin] }
let(:filter) { nil }
subject! { get :show, params: { procedure_id: procedure.id, filter: filter } }
it { expect(response.status).to eq(200) }
it 'sets the assigned and not assigned instructeurs' do
expect(assigns(:instructeurs_assign)).to match_array([instructeur_assigned_1, instructeur_assigned_2])
expect(assigns(:instructeurs_not_assign)).to match_array([instructeur_not_assigned_1, instructeur_not_assigned_2])
end
context 'with a search filter' do
let(:filter) { '@ministere_a.gouv.fr' }
it 'filters the unassigned instructeurs' do
expect(assigns(:instructeurs_not_assign)).to match_array([instructeur_not_assigned_1])
end
it 'does not filter the assigned instructeurs' do
expect(assigns(:instructeurs_assign)).to match_array([instructeur_assigned_1, instructeur_assigned_2])
end
context 'when the filter has spaces or a mixed case' do
let(:filter) { ' @ministere_A.gouv.fr ' }
it 'trims spaces and ignores the case' do
expect(assigns(:instructeurs_not_assign)).to match_array([instructeur_not_assigned_1])
end
end
end
end
describe 'PUT #update' do
let(:procedure) { create :procedure, administrateur: admin }
let(:instructeur) { create :instructeur, administrateurs: [admin] }
subject { put :update, params: { instructeur_id: instructeur.id, procedure_id: procedure.id, to: 'assign' } }
it { expect(subject).to redirect_to admin_procedure_assigns_path(procedure_id: procedure.id) }
context 'when assignement is valid' do
before do
subject
end
it { expect(flash[:notice]).to be_present }
end
end
end

View file

@ -42,9 +42,8 @@ describe Admin::InstructeursController, type: :controller do
context 'when procedure_id params is not null' do context 'when procedure_id params is not null' do
let(:procedure) { create :procedure } let(:procedure) { create :procedure }
let(:procedure_id) { procedure.id } let(:procedure_id) { procedure.id }
it { expect(response.status).to eq(302) } it { expect(response.status).to eq(302) }
it { expect(response).to redirect_to admin_procedure_assigns_path(procedure_id: procedure_id) } it { expect(response).to redirect_to procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) }
end end
describe 'Instructeur attributs in database' do describe 'Instructeur attributs in database' do

View file

@ -31,6 +31,22 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
it { expect(response).to have_http_status(:ok) } it { expect(response).to have_http_status(:ok) }
end end
context 'when the routage is not activated on the procedure' do
let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] }
let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] }
let!(:instructeur_not_assigned_1) { create :instructeur, email: 'instructeur_3@ministere_a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_not_assigned_2) { create :instructeur, email: 'instructeur_4@ministere_b.gouv.fr', administrateurs: [admin] }
subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } }
it { expect(response.status).to eq(200) }
it 'sets the assigned and not assigned instructeurs' do
expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2])
expect(assigns(:available_instructeur_emails)).to match_array(['instructeur_3@ministere_a.gouv.fr', 'instructeur_4@ministere_b.gouv.fr'])
end
end
end end
describe '#create' do describe '#create' do
@ -189,10 +205,40 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
end end
end end
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'] }
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'] }
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 }
it { expect(subject).to redirect_to procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) }
end
context 'when there is at least one bad email' do
let(:emails) { ['badmail', 'instructeur2@gmail.com'] }
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 }
it { expect(subject).to redirect_to procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) }
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'] }
it { expect(subject.request.flash[:alert]).to be_present }
it { expect(subject).to redirect_to procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) }
end
end
describe '#add_instructeur' do describe '#add_instructeur' do
let!(:instructeur) { create(:instructeur) } let!(:instructeur) { create(:instructeur) }
let(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 2') }
before do before do
gi_1_1.instructeurs << instructeur gi_1_2.instructeurs << instructeur
allow(GroupeInstructeurMailer).to receive(:add_instructeurs) allow(GroupeInstructeurMailer).to receive(:add_instructeurs)
.and_return(double(deliver_later: true)) .and_return(double(deliver_later: true))
@ -200,7 +246,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
post :add_instructeur, post :add_instructeur,
params: { params: {
procedure_id: procedure.id, procedure_id: procedure.id,
id: gi_1_1.id, id: gi_1_2.id,
emails: new_instructeur_emails emails: new_instructeur_emails
} }
end end
@ -208,12 +254,13 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
context 'of a news instructeurs' do context 'of a news instructeurs' do
let(:new_instructeur_emails) { ['new_i1@mail.com', 'new_i2@mail.com'] } let(:new_instructeur_emails) { ['new_i1@mail.com', 'new_i2@mail.com'] }
it { expect(gi_1_1.instructeurs.pluck(:email)).to include(*new_instructeur_emails) } it { expect(gi_1_2.instructeurs.pluck(:email)).to include(*new_instructeur_emails) }
it { expect(flash.notice).to be_present } it { expect(flash.notice).to be_present }
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_1)) } it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_2)) }
it { expect(procedure.routee?).to be_truthy }
it "calls GroupeInstructeurMailer with the right groupe and instructeurs" do it "calls GroupeInstructeurMailer with the right groupe and instructeurs" do
expect(GroupeInstructeurMailer).to have_received(:add_instructeurs).with( expect(GroupeInstructeurMailer).to have_received(:add_instructeurs).with(
gi_1_1, gi_1_2,
satisfy { |instructeurs| instructeurs.all? { |i| new_instructeur_emails.include?(i.email) } }, satisfy { |instructeurs| instructeurs.all? { |i| new_instructeur_emails.include?(i.email) } },
admin.email admin.email
) )
@ -223,20 +270,20 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
context 'of an instructeur already in the group' do context 'of an instructeur already in the group' do
let(:new_instructeur_emails) { [instructeur.email] } let(:new_instructeur_emails) { [instructeur.email] }
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)) } it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_2)) }
end end
context 'of badly formed email' do context 'of badly formed email' do
let(:new_instructeur_emails) { ['badly_formed_email'] } let(:new_instructeur_emails) { ['badly_formed_email'] }
it { expect(flash.alert).to be_present } it { expect(flash.alert).to be_present }
it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)) } it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_2)) }
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(procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur)) } it { expect(response).to redirect_to(procedure_groupe_instructeur_path(procedure, gi_1_2)) }
end end
end end
@ -275,6 +322,33 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
end end
end end
describe '#remove_instructeur_procedure_non_routee' do
let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] }
let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] }
let!(:instructeur_assigned_3) { create :instructeur, email: 'instructeur_3@ministere_a.gouv.fr', administrateurs: [admin] }
subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } }
it 'sets the assigned instructeurs' do
expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2])
end
context 'when the instructor is assigned to the procedure' do
subject { delete :remove_instructeur, params: { instructeur: { id: instructeur_assigned_1.id }, procedure_id: procedure.id, id: gi_1_1.id } }
it { expect(subject.request.flash[:notice]).to be_present }
it { expect(subject.request.flash[:alert]).to be_nil }
it { expect(response.status).to eq(302) }
it { expect(subject).to redirect_to procedure_groupe_instructeur_path(procedure, gi_1_1) }
end
context 'when the instructor is not assigned to the procedure' do
subject { delete :remove_instructeur, params: { instructeur: { id: instructeur_assigned_3.id }, procedure_id: procedure.id, id: gi_1_1.id } }
it { expect(subject.request.flash[:alert]).to be_present }
it { expect(subject.request.flash[:notice]).to be_nil }
it { expect(response.status).to eq(302) }
it { expect(subject).to redirect_to procedure_groupe_instructeur_path(procedure, gi_1_1) }
end
end
describe '#update_routing_criteria_name' do describe '#update_routing_criteria_name' do
before do before do
patch :update_routing_criteria_name, patch :update_routing_criteria_name,

View file

@ -5,7 +5,7 @@ feature 'As an instructeur', js: true do
before do before do
login_as administrateur.user, scope: :user login_as administrateur.user, scope: :user
visit admin_procedure_assigns_path(procedure) visit admin_instructeurs_path
fill_in :instructeur_email, with: instructeur_email fill_in :instructeur_email, with: instructeur_email

View file

@ -32,14 +32,14 @@ feature 'The routing', js: true do
# 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)
perform_enqueued_jobs { click_on 'Affecter' } perform_enqueued_jobs { click_on 'Affecter' }
expect(page).to have_text("Linstructeur victor@inst.com a été affecté") 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.select2-search__field').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("Les instructeurs ont bien été affectés à la démarche")
superwoman = User.find_by(email: 'superwoman@inst.com').instructeur superwoman = User.find_by(email: 'superwoman@inst.com').instructeur

View file

@ -1,59 +0,0 @@
describe 'admin/assigns/show.html.haml', type: :view do
let(:admin) { create(:administrateur) }
let(:procedure) { create :procedure, administrateur: admin }
let(:assign_instructeurs) { procedure.defaut_groupe_instructeur.instructeurs }
let(:not_assign_instructeurs) { admin.instructeurs.where.not(id: assign_instructeurs.ids) }
before do
assign(:procedure, procedure)
assign(:instructeur, create(:instructeur))
assign(:instructeurs_assign, (smart_listing_create :instructeurs_assign,
assign_instructeurs,
partial: "admin/assigns/list_assign",
array: true))
assign(:instructeurs_not_assign, (smart_listing_create :instructeurs_not_assign,
not_assign_instructeurs,
partial: "admin/assigns/list_not_assign",
array: true))
end
context 'when admin have none instructeur ' do
before do
render
end
it { expect(rendered).to have_content('Aucun de disponible') }
context 'when administrateur have none instructeur assign' do
it { expect(rendered).to have_content('Aucun d\'affecté') }
end
end
context 'when administrateur have two instructeur' do
let!(:instructeur_1) { create :instructeur, email: 'plop@plop.com', administrateurs: [admin] }
let!(:instructeur_2) { create :instructeur, email: 'plip@plop.com', administrateurs: [admin] }
before do
not_assign_instructeurs.reload
assign_instructeurs.reload
assign(:instructeurs_assign, (smart_listing_create :instructeurs_assign,
assign_instructeurs,
partial: "admin/assigns/list_assign",
array: true))
assign(:instructeurs_not_assign, (smart_listing_create :instructeurs_not_assign,
not_assign_instructeurs,
partial: "admin/assigns/list_not_assign",
array: true))
render
end
it { expect(rendered).to have_content(instructeur_1.email) }
it { expect(rendered).to have_content(instructeur_2.email) }
end
end