diff --git a/app/controllers/admin/instructeurs_controller.rb b/app/controllers/admin/instructeurs_controller.rb deleted file mode 100644 index 1f549756c..000000000 --- a/app/controllers/admin/instructeurs_controller.rb +++ /dev/null @@ -1,63 +0,0 @@ -class Admin::InstructeursController < AdminController - include SmartListing::Helper::ControllerExtensions - helper SmartListing::Helper - - def index - @instructeurs = smart_listing_create :instructeurs, - current_administrateur.instructeurs, - partial: "admin/instructeurs/list", - array: true - end - - def create - 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) - else - assign_instructeur! - end - - if procedure_id.present? - redirect_to admin_procedure_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) - else - redirect_to admin_instructeurs_path - end - end - - def destroy - Instructeur.find(params[:id]).administrateurs.delete current_administrateur - redirect_to admin_instructeurs_path - end - - private - - def invite_instructeur(email) - user = User.create_or_promote_to_instructeur( - email, - SecureRandom.hex, - administrateurs: [current_administrateur] - ) - - if user.valid? - user.invite! - - flash.notice = 'Instructeur ajouté' - else - flash.alert = user.errors.full_messages - end - end - - def assign_instructeur! - if current_administrateur.instructeurs.include?(@instructeur) - flash.alert = 'Instructeur déjà ajouté' - else - @instructeur.administrateurs.push current_administrateur - flash.notice = 'Instructeur ajouté' - # TODO Mailer no assign_to - end - end -end diff --git a/app/views/admin/instructeurs/_informations.html.haml b/app/views/admin/instructeurs/_informations.html.haml deleted file mode 100644 index 34a4ea5e8..000000000 --- a/app/views/admin/instructeurs/_informations.html.haml +++ /dev/null @@ -1,4 +0,0 @@ -.form-group - %p.notice - = 'Email *' - = text_field_tag 'instructeur[email]', nil, class: 'form-control', placeholder: 'ex : laura.azema@exemple.gouv.fr' diff --git a/app/views/admin/instructeurs/_list.html.haml b/app/views/admin/instructeurs/_list.html.haml deleted file mode 100644 index b1d8b2f66..000000000 --- a/app/views/admin/instructeurs/_list.html.haml +++ /dev/null @@ -1,22 +0,0 @@ -- if smart_listing.present? - %table.table#liste-instructeur - %thead - %th#libelle= smart_listing.sortable 'Email', 'email' - %th - - - @instructeurs.each do |instructeur| - %tr - %td{ style: 'padding-top: 11px; font-size: 15px;' }= instructeur.email - %td{ style: 'text-align: right;' } - .delete.btn.btn-sm.fa.fa-trash - - .confirm - = link_to 'Valider', admin_instructeur_path(id: instructeur.id), { method: :delete, class: 'btn btn-sm btn-success' } - .cancel.btn.btn-sm.btn-danger.fa.fa-minus{ style: 'top: 0;' } - - = smart_listing.paginate - = smart_listing.pagination_per_page_links - -- else - %h4.center - Aucun instructeur diff --git a/app/views/admin/instructeurs/index.html.haml b/app/views/admin/instructeurs/index.html.haml deleted file mode 100644 index 1860442f6..000000000 --- a/app/views/admin/instructeurs/index.html.haml +++ /dev/null @@ -1,28 +0,0 @@ -%h1 Instructeurs disponibles - -%p - Cette page vous permet de gérer la liste des instructeurs disponibles pour être affectés à une démarche. - -%p{ style: 'font-style: italic' } - N.B. : cette page ne concerne que la liste des personnes disponibles. Si vous souhaitez affecter ou enlever un instructeur d’une démarche particulière, - utilisez plutôt la - = link_to "page de la démarche", admin_procedures_path - concernée. - -.row - .col-xs-4 - - = smart_listing_render :instructeurs - .col-xs-1 -   - .col-xs-6 - %h3 Ajouter un instructeur - #procedure_new.section.section-label - = form_with url: { controller: 'admin/instructeurs', action: :create } do - .row - .col-xs-5 - = render partial: 'admin/instructeurs/informations' - .col-xs-2 - %br - %br - = submit_tag 'Ajouter', class: 'btn btn-info', style: 'float: left;' diff --git a/app/views/admin/instructeurs/index.js.erb b/app/views/admin/instructeurs/index.js.erb deleted file mode 100644 index 35f7cb74c..000000000 --- a/app/views/admin/instructeurs/index.js.erb +++ /dev/null @@ -1 +0,0 @@ -<%= smart_listing_update :instructeurs %> diff --git a/config/routes.rb b/config/routes.rb index 52f57517a..75a2d6300 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -212,8 +212,6 @@ Rails.application.routes.draw do namespace :assigns do get 'show' # delete after fixed tests admin/instructeurs/show_spec without this line end - - resources :instructeurs, only: [:index, :create, :destroy] end resources :invites, only: [:show, :destroy] do diff --git a/spec/controllers/admin/instructeurs_controller_spec.rb b/spec/controllers/admin/instructeurs_controller_spec.rb deleted file mode 100644 index 3bf695cdf..000000000 --- a/spec/controllers/admin/instructeurs_controller_spec.rb +++ /dev/null @@ -1,177 +0,0 @@ -describe Admin::InstructeursController, type: :controller do - let(:admin) { create(:administrateur) } - let(:email_2) { 'plip@octo.com' } - let(:admin_2) { create :administrateur, email: email_2 } - - before do - sign_in(admin.user) - end - - describe 'GET #index' do - subject { get :index } - it { expect(subject.status).to eq(200) } - end - - describe 'GET #index with sorting and pagination' do - subject { - get :index, params: { - 'instructeurs_smart_listing[page]': 1, - 'instructeurs_smart_listing[per_page]': 10, - 'instructeurs_smart_listing[sort][email]': 'asc' - } - } - - it { expect(subject.status).to eq(200) } - end - - describe 'POST #create' do - let(:email) { 'test@plop.com' } - let(:procedure_id) { nil } - subject { post :create, params: { instructeur: { email: email }, procedure_id: procedure_id } } - - context 'When email is valid' do - before do - subject - end - - let(:instructeur) { Instructeur.last } - - it { expect(response.status).to eq(302) } - it { expect(response).to redirect_to admin_instructeurs_path } - - 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_groupe_instructeur_path(procedure, procedure.defaut_groupe_instructeur) } - end - - describe 'Instructeur attributs in database' do - it { expect(instructeur.email).to eq(email) } - end - - describe 'New instructeur is assign to the admin' do - it { expect(instructeur.administrateurs).to include admin } - it { expect(admin.instructeurs).to include instructeur } - end - end - - context 'when email is not valid' do - before do - subject - end - let(:email) { 'piou' } - it { expect(response.status).to eq(302) } - it { expect { response }.not_to change(Instructeur, :count) } - it { expect(flash[:alert]).to be_present } - - describe 'Email Notification' do - it { - expect(InstructeurMailer).not_to receive(:new_instructeur) - expect(InstructeurMailer).not_to receive(:deliver_later) - subject - } - end - end - - context 'when email is empty' do - before do - subject - end - let(:email) { '' } - it { expect(response.status).to eq(302) } - it { expect { response }.not_to change(Instructeur, :count) } - - it 'Notification email is not send' do - expect(InstructeurMailer).not_to receive(:new_instructeur) - expect(InstructeurMailer).not_to receive(:deliver_later) - end - end - - context 'when email is already assign at the admin' do - before do - create :instructeur, email: email, administrateurs: [admin] - subject - end - - it { expect(response.status).to eq(302) } - it { expect { response }.not_to change(Instructeur, :count) } - it { expect(flash[:alert]).to be_present } - - describe 'Email notification' do - it 'is not sent when email already exists' do - expect(InstructeurMailer).not_to receive(:new_instructeur) - expect(InstructeurMailer).not_to receive(:deliver_later) - - subject - end - end - end - - context 'when an other admin will add the same email' do - let(:instructeur) { Instructeur.by_email(email) } - - before do - create :instructeur, email: email, administrateurs: [admin] - - sign_out(admin.user) - sign_in(admin_2.user) - - subject - end - - it { expect(response.status).to eq(302) } - it { expect { response }.not_to change(Instructeur, :count) } - it { expect(flash[:notice]).to be_present } - - it { expect(admin_2.instructeurs).to include instructeur } - it { expect(instructeur.administrateurs.size).to eq 2 } - end - - context 'when an other admin will add the same email with some uppercase in it' do - let(:email) { 'Test@Plop.com' } - let(:instructeur) { Instructeur.by_email(email.downcase) } - - before do - create :instructeur, email: email, administrateurs: [admin] - - sign_out(admin.user) - sign_in(admin_2.user) - - subject - end - - it { expect(admin_2.instructeurs).to include instructeur } - end - - context 'Email notification' do - it 'Notification email is sent when instructeur is create' do - expect_any_instance_of(User).to receive(:invite!) - subject - end - end - end - - describe 'DELETE #destroy' do - let(:email) { 'test@plop.com' } - let!(:admin) { create :administrateur } - let!(:instructeur) { create :instructeur, email: email, administrateurs: [admin] } - - subject { delete :destroy, params: { id: instructeur.id } } - - context "when gestionaire_id is valid" do - before do - subject - admin.reload - instructeur.reload - end - - it { expect(response.status).to eq(302) } - it { expect(response).to redirect_to admin_instructeurs_path } - it { expect(admin.instructeurs).not_to include instructeur } - it { expect(instructeur.administrateurs).not_to include admin } - end - - it { expect { subject }.not_to change(Instructeur, :count) } - end -end diff --git a/spec/features/instructeurs/instructeur_creation_spec.rb b/spec/features/instructeurs/instructeur_creation_spec.rb index 776bb027b..978b068c3 100644 --- a/spec/features/instructeurs/instructeur_creation_spec.rb +++ b/spec/features/instructeurs/instructeur_creation_spec.rb @@ -5,13 +5,14 @@ feature 'As an instructeur', js: true do before do login_as administrateur.user, scope: :user - visit admin_instructeurs_path - fill_in :instructeur_email, with: instructeur_email + visit admin_procedure_path(procedure) + find('#groupe-instructeurs').click - perform_enqueued_jobs do - click_button 'Ajouter' - end + find("input[aria-label='email instructeur'").send_keys(instructeur_email, :enter) + perform_enqueued_jobs { click_on 'Affecter' } + + expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") end scenario 'I can register' do diff --git a/spec/views/admin/instructeurs/index.html.haml_spec.rb b/spec/views/admin/instructeurs/index.html.haml_spec.rb deleted file mode 100644 index 96d3c4c91..000000000 --- a/spec/views/admin/instructeurs/index.html.haml_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -describe 'admin/instructeurs/index.html.haml', type: :view do - let(:admin) { create(:administrateur) } - - before do - assign(:instructeurs, (smart_listing_create :instructeurs, - admin.instructeurs, - partial: "admin/instructeurs/list", - array: true)) - assign(:instructeur, create(:instructeur)) - end - - context 'Aucun instructeur' do - before do - render - end - it { expect(rendered).to have_content('Aucun instructeur') } - end - - context 'Ajout d\'un instructeur' do - before do - create(:instructeur, administrateurs: [admin]) - admin.reload - assign(:instructeurs, (smart_listing_create :instructeurs, - admin.instructeurs, - partial: "admin/instructeurs/list", - array: true)) - render - end - it { expect(rendered).to match(/inst\d+@inst.com/) } - end -end