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
@instructeur = Instructeur.by_email(email)
procedure_id = params[:procedure_id]
procedure = Procedure.find_by(id: procedure_id)
if @instructeur.nil?
invite_instructeur(email)
@ -21,7 +22,7 @@ class Admin::InstructeursController < AdminController
end
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
redirect_to admin_instructeurs_path
end

View file

@ -100,6 +100,7 @@ module NewAdministrateur
create_instructeur(instructeur_email)
end
if procedure.routee?
groupe_instructeur.instructeurs << instructeurs
GroupeInstructeurMailer
@ -110,6 +111,16 @@ module NewAdministrateur
count: email_to_adds.count,
value: email_to_adds.join(', '),
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
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"
else
if procedure.routee?
@instructeur = Instructeur.find(instructeur_id)
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
.remove_instructeur(groupe_instructeur, @instructeur, current_user.email)
.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)
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
%h4
%p.notice
= '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
Pour pouvoir tester cette démarche, vous devez dabord lui affecter
- 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?
et
- if @procedure.service.nil?
@ -122,7 +122,7 @@
- if @procedure.missing_steps.include?(:instructeurs)
%p.alert.alert-danger
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
Cette démarche na pas encore de lien, et nest pas accessible par le public.

View file

@ -31,7 +31,7 @@
Administrateurs
- 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') }
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',
locals: { steps: [link_to('Démarches', admin_procedures_path),
link_to(@procedure.libelle, admin_procedure_path(@procedure)),
link_to('Groupes dinstructeurs', procedure_groupe_instructeurs_path(@procedure)),
@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
%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'
- if feature_enabled?(:administrateur_routage)
= render partial: 'new_administrateur/groups_header'
.card
.card-title Affectation des instructeurs
@ -23,6 +23,8 @@
html: { class: 'form' } do |f|
.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,
@ -43,7 +45,7 @@
%td.actions= button_to 'retirer',
{ action: :remove_instructeur },
{ 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 }},
class: 'button' }

View file

@ -202,8 +202,6 @@ Rails.application.routes.draw do
post 'transfer' => 'procedures#transfer', as: :transfer
put 'clone' => 'procedures#clone', as: :clone
resource :assigns, only: [:show, :update], path: 'instructeurs'
resource :attestation_template, only: [:edit, :update, :create]
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
let(:procedure) { create :procedure }
let(:procedure_id) { procedure.id }
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
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) }
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
describe '#create' do
@ -189,10 +205,40 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
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
let!(:instructeur) { create(:instructeur) }
let(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 2') }
before do
gi_1_1.instructeurs << instructeur
gi_1_2.instructeurs << instructeur
allow(GroupeInstructeurMailer).to receive(:add_instructeurs)
.and_return(double(deliver_later: true))
@ -200,7 +246,7 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
post :add_instructeur,
params: {
procedure_id: procedure.id,
id: gi_1_1.id,
id: gi_1_2.id,
emails: new_instructeur_emails
}
end
@ -208,12 +254,13 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
context 'of a news instructeurs' do
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(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
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) } },
admin.email
)
@ -223,20 +270,20 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
context 'of an instructeur already in the group' do
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
context 'of badly formed email' do
let(:new_instructeur_emails) { ['badly_formed_email'] }
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
context 'of an empty string' do
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
@ -275,6 +322,33 @@ describe NewAdministrateur::GroupeInstructeursController, type: :controller do
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
before do
patch :update_routing_criteria_name,

View file

@ -5,7 +5,7 @@ feature 'As an instructeur', js: true do
before do
login_as administrateur.user, scope: :user
visit admin_procedure_assigns_path(procedure)
visit admin_instructeurs_path
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
find('input.select2-search__field').send_keys('victor@inst.com', :enter)
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
# add superwoman to littéraire groupe
find('input.select2-search__field').send_keys('superwoman@inst.com', :enter)
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

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