Administrateur can be assign accompagnateur on each of his procedure.
This commit is contained in:
parent
1923f2aec1
commit
1fcb33104d
19 changed files with 385 additions and 74 deletions
|
@ -31,6 +31,7 @@
|
||||||
//= require bootstrap-wysihtml5/locales/fr-FR
|
//= require bootstrap-wysihtml5/locales/fr-FR
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$(document).on('page:load', scroll_to);
|
$(document).on('page:load', scroll_to);
|
||||||
$(document).ready(scroll_to);
|
$(document).ready(scroll_to);
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,30 @@
|
||||||
class Admin::AccompagnateursController < AdminController
|
class Admin::AccompagnateursController < AdminController
|
||||||
|
include SmartListing::Helper::ControllerExtensions
|
||||||
|
helper SmartListing::Helper
|
||||||
|
|
||||||
before_action :retrieve_procedure
|
before_action :retrieve_procedure
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
assign_scope = @procedure.gestionnaires
|
||||||
|
@accompagnateurs_assign = smart_listing_create :accompagnateurs_assign,
|
||||||
|
assign_scope,
|
||||||
|
partial: "admin/accompagnateurs/list_assign",
|
||||||
|
array: true
|
||||||
|
|
||||||
|
not_assign_scope = current_administrateur.gestionnaires.where.not(id: assign_scope.ids)
|
||||||
|
not_assign_scope = not_assign_scope.where("email LIKE '%#{params[:filter]}%'") if params[:filter]
|
||||||
|
|
||||||
|
@accompagnateurs_not_assign = smart_listing_create :accompagnateurs_not_assign,
|
||||||
|
not_assign_scope,
|
||||||
|
partial: "admin/accompagnateurs/list_not_assign",
|
||||||
|
array: true
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
AccompagnateurService.change_assignement! Gestionnaire.find(params[:accompagnateur_id]), Procedure.find(params[:procedure_id]), params[:to]
|
||||||
|
|
||||||
|
flash.notice = "Assignement effectué"
|
||||||
|
redirect_to admin_procedure_accompagnateurs_path, procedure_id: params[:procedure_id]
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -12,23 +12,19 @@ class Admin::GestionnairesController < AdminController
|
||||||
|
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@gestionnaire = Gestionnaire.create(create_gestionnaire_params)
|
@gestionnaire = Gestionnaire.find_by_email(params[:gestionnaire][:email])
|
||||||
|
|
||||||
if @gestionnaire.errors.messages.empty?
|
if @gestionnaire.nil?
|
||||||
@gestionnaire.administrateurs.push current_administrateur
|
new_gestionnaire!
|
||||||
|
|
||||||
flash.notice = 'Gestionnaire ajouté'
|
|
||||||
GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_now!
|
|
||||||
else
|
else
|
||||||
flash.alert = @gestionnaire.errors.full_messages.join('<br />').html_safe
|
assign_gestionnaire!
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to admin_gestionnaires_path
|
redirect_to admin_gestionnaires_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
Gestionnaire.find(params[:id]).destroy
|
Gestionnaire.find(params[:id]).administrateurs.delete current_administrateur
|
||||||
redirect_to admin_gestionnaires_path
|
redirect_to admin_gestionnaires_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -36,5 +32,31 @@ class Admin::GestionnairesController < AdminController
|
||||||
def create_gestionnaire_params
|
def create_gestionnaire_params
|
||||||
params.require(:gestionnaire).permit(:email)
|
params.require(:gestionnaire).permit(:email)
|
||||||
.merge(password: SecureRandom.hex(5))
|
.merge(password: SecureRandom.hex(5))
|
||||||
|
.merge(administrateurs: [current_administrateur])
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def new_gestionnaire!
|
||||||
|
@gestionnaire = Gestionnaire.create(create_gestionnaire_params)
|
||||||
|
|
||||||
|
if @gestionnaire.errors.messages.empty?
|
||||||
|
flash.notice = 'Accompagnateur ajouté'
|
||||||
|
GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_now!
|
||||||
|
GestionnaireMailer.new_assignement(@gestionnaire.email, current_administrateur.email).deliver_now!
|
||||||
|
else
|
||||||
|
flash.alert = @gestionnaire.errors.full_messages.join('<br />').html_safe
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def assign_gestionnaire!
|
||||||
|
if current_administrateur.gestionnaires.include? @gestionnaire
|
||||||
|
flash.alert = 'Accompagnateur déjà ajouté'
|
||||||
|
else
|
||||||
|
GestionnaireMailer.new_assignement(@gestionnaire.email, current_administrateur.email).deliver_now!
|
||||||
|
@gestionnaire.administrateurs.push current_administrateur
|
||||||
|
flash.notice = 'Accompagnateur ajouté'
|
||||||
|
#TODO Mailer no assign_to
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -4,15 +4,19 @@ class GestionnaireMailer < ApplicationMailer
|
||||||
send_mail email, password, "Vous avez été nommé accompagnateur sur la plateforme TPS"
|
send_mail email, password, "Vous avez été nommé accompagnateur sur la plateforme TPS"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def new_assignement email, email_admin
|
||||||
|
send_mail email, email_admin, "Vous avez été assigné à un nouvel administrateur sur la plateforme TPS"
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def vars_mailer email, password
|
def vars_mailer email, args
|
||||||
@password = password
|
@args = args
|
||||||
@email = email
|
@email = email
|
||||||
end
|
end
|
||||||
|
|
||||||
def send_mail email, password, subject
|
def send_mail email, args, subject
|
||||||
vars_mailer email, password
|
vars_mailer email, args
|
||||||
|
|
||||||
mail(from: "tps@apientreprise.fr", to: email,
|
mail(from: "tps@apientreprise.fr", to: email,
|
||||||
subject: subject)
|
subject: subject)
|
||||||
|
|
12
app/services/accompagnateur_service.rb
Normal file
12
app/services/accompagnateur_service.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
class AccompagnateurService
|
||||||
|
ASSIGN = 'assign'
|
||||||
|
NOT_ASSIGN = 'not_assign'
|
||||||
|
|
||||||
|
def self.change_assignement! accompagnateur, procedure, to
|
||||||
|
if to == ASSIGN
|
||||||
|
AssignTo.create(gestionnaire: accompagnateur, procedure: procedure)
|
||||||
|
elsif to == NOT_ASSIGN
|
||||||
|
AssignTo.delete_all(gestionnaire: accompagnateur, procedure: procedure)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
20
app/views/admin/accompagnateurs/_list_assign.html.haml
Normal file
20
app/views/admin/accompagnateurs/_list_assign.html.haml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.row{style:'height: 34px'}
|
||||||
|
|
||||||
|
- unless smart_listing.empty?
|
||||||
|
%table.table#liste_gestionnaire
|
||||||
|
%thead
|
||||||
|
%th Enlever
|
||||||
|
%th#email{style:'text-align: right'} Email
|
||||||
|
|
||||||
|
- @accompagnateurs_assign.each do |accompagnateur|
|
||||||
|
%tr
|
||||||
|
%td.col-md-1.col-lg-1.center
|
||||||
|
%a.btn.btn-primary{href: "#{admin_procedure_accompagnateurs_path(procedure_id: @procedure.id, accompagnateur_id: accompagnateur.id, to: AccompagnateurService::NOT_ASSIGN)}", 'data-method' => 'put'}
|
||||||
|
.fa.fa-arrow-left
|
||||||
|
%td{style:'padding-top: 11px; font-size:15px; text-align:right'}= accompagnateur.email
|
||||||
|
|
||||||
|
= smart_listing.paginate
|
||||||
|
= smart_listing.pagination_per_page_links
|
||||||
|
- else
|
||||||
|
%h4.center
|
||||||
|
Aucun d'affecté
|
27
app/views/admin/accompagnateurs/_list_not_assign.html.haml
Normal file
27
app/views/admin/accompagnateurs/_list_not_assign.html.haml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
= smart_listing_controls_for(:accompagnateurs_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.glyphicon.glyphicon-search
|
||||||
|
|
||||||
|
- unless smart_listing.empty?
|
||||||
|
|
||||||
|
%table.table#liste_gestionnaire
|
||||||
|
%thead
|
||||||
|
%th#email Email
|
||||||
|
%th Ajouter
|
||||||
|
|
||||||
|
- @accompagnateurs_not_assign.each do |accompagnateur|
|
||||||
|
%tr
|
||||||
|
%td.col-md-11.col-lg-11{style:'padding-top: 11px; font-size:15px'}= accompagnateur.email
|
||||||
|
%td.center
|
||||||
|
%a.btn.btn-success{href: "#{admin_procedure_accompagnateurs_path(procedure_id: @procedure.id, accompagnateur_id: accompagnateur.id, to: AccompagnateurService::ASSIGN)}", 'data-method' => 'put'}
|
||||||
|
.fa.fa-arrow-right
|
||||||
|
|
||||||
|
|
||||||
|
= smart_listing.paginate
|
||||||
|
= smart_listing.pagination_per_page_links
|
||||||
|
- else
|
||||||
|
%h4.center
|
||||||
|
Aucun de disponible
|
|
@ -6,4 +6,14 @@
|
||||||
= render partial: 'admin/procedures/navbar', locals: {active: 'Accompagnateurs'}
|
= render partial: 'admin/procedures/navbar', locals: {active: 'Accompagnateurs'}
|
||||||
|
|
||||||
#accompagnateur_form
|
#accompagnateur_form
|
||||||
plop
|
.row
|
||||||
|
.col-md-6.col-lg-6
|
||||||
|
%h3.text-info Disponibles
|
||||||
|
= smart_listing_render :accompagnateurs_not_assign
|
||||||
|
|
||||||
|
.col-md-6.col-lg-6
|
||||||
|
%h3.text-success Affectés
|
||||||
|
|
||||||
|
= smart_listing_render :accompagnateurs_assign
|
||||||
|
|
||||||
|
|
||||||
|
|
3
app/views/admin/accompagnateurs/show.js.erb
Normal file
3
app/views/admin/accompagnateurs/show.js.erb
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<%= smart_listing_update :accompagnateurs_not_assign %>
|
||||||
|
|
||||||
|
<%= smart_listing_update :accompagnateurs_assign %>
|
11
app/views/gestionnaire_mailer/new_assignement.text.erb
Normal file
11
app/views/gestionnaire_mailer/new_assignement.text.erb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
Bienvenue sur la plateforme TPS
|
||||||
|
|
||||||
|
Vous venez d'être assigné à un administrateur sur la plateforme TPS. Voici quelques informations utiles :
|
||||||
|
|
||||||
|
URL : https://tps.apientreprise.fr/gestionnaires/sign_in
|
||||||
|
Email administrateur : <%= @args %>
|
||||||
|
|
||||||
|
Bonne journée,
|
||||||
|
|
||||||
|
---
|
||||||
|
L'équipe TPS - tps@apientreprise.fr
|
|
@ -2,9 +2,9 @@ Bienvenue sur la plateforme TPS
|
||||||
|
|
||||||
Vous venez d'être nommé accompagnateur sur la plateforme TPS. Pour mémoire, voici quelques informations utiles :
|
Vous venez d'être nommé accompagnateur sur la plateforme TPS. Pour mémoire, voici quelques informations utiles :
|
||||||
|
|
||||||
URL : https://tps.apientreprise.fr/gestionnaires/sign_in
|
URL : <%= new_gestionnaire_session_url %>
|
||||||
Login : <%= @email %>
|
Login : <%= @email %>
|
||||||
Mot de passe : <%= @password %>
|
Mot de passe : <%= @args %>
|
||||||
|
|
||||||
Bonne journée,
|
Bonne journée,
|
||||||
|
|
||||||
|
|
|
@ -91,11 +91,15 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
resource :accompagnateurs, only: [:show, :update]
|
resource :accompagnateurs, only: [:show, :update]
|
||||||
|
|
||||||
|
|
||||||
resources :types_de_champ, only: [:destroy]
|
resources :types_de_champ, only: [:destroy]
|
||||||
resource :pieces_justificatives, only: [:show, :update]
|
resource :pieces_justificatives, only: [:show, :update]
|
||||||
resources :pieces_justificatives, only: :destroy
|
resources :pieces_justificatives, only: :destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
|
namespace :accompagnateurs do
|
||||||
|
get 'show' #delete after fixed tests admin/accompagnateurs/show_spec without this line
|
||||||
|
end
|
||||||
|
|
||||||
resources :gestionnaires, only: [:index, :create, :destroy]
|
resources :gestionnaires, only: [:index, :create, :destroy]
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddForeignKeyAdmnistrateurGestionnaire < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_index :administrateurs_gestionnaires, [:gestionnaire_id, :administrateur_id], unique: true, name: 'unique_couple_administrateur_gestionnaire'
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20160519101018) do
|
ActiveRecord::Schema.define(version: 20160523163054) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -41,6 +41,7 @@ ActiveRecord::Schema.define(version: 20160519101018) do
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "administrateurs_gestionnaires", ["administrateur_id"], name: "index_administrateurs_gestionnaires_on_administrateur_id", using: :btree
|
add_index "administrateurs_gestionnaires", ["administrateur_id"], name: "index_administrateurs_gestionnaires_on_administrateur_id", using: :btree
|
||||||
|
add_index "administrateurs_gestionnaires", ["gestionnaire_id", "administrateur_id"], name: "unique_couple_administrateur_gestionnaire", unique: true, using: :btree
|
||||||
add_index "administrateurs_gestionnaires", ["gestionnaire_id"], name: "index_administrateurs_gestionnaires_on_gestionnaire_id", using: :btree
|
add_index "administrateurs_gestionnaires", ["gestionnaire_id"], name: "index_administrateurs_gestionnaires_on_gestionnaire_id", using: :btree
|
||||||
|
|
||||||
create_table "administrations", force: :cascade do |t|
|
create_table "administrations", force: :cascade do |t|
|
||||||
|
|
30
spec/controllers/admin/accompagnateurs_controller_spec.rb
Normal file
30
spec/controllers/admin/accompagnateurs_controller_spec.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Admin::AccompagnateursController, type: :controller do
|
||||||
|
let(:admin) { create(:administrateur) }
|
||||||
|
let(:procedure) { create :procedure, administrateur: admin }
|
||||||
|
let(:gestionnaire) { create :gestionnaire, administrateurs: [admin] }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sign_in admin
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #show' do
|
||||||
|
subject { get :show, procedure_id: procedure.id }
|
||||||
|
it { expect(subject.status).to eq(200) }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'PUT #update' do
|
||||||
|
subject { put :update, accompagnateur_id: gestionnaire.id ,procedure_id: procedure.id }
|
||||||
|
|
||||||
|
it { expect(subject).to redirect_to admin_procedure_accompagnateurs_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
|
|
@ -2,6 +2,9 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe Admin::GestionnairesController, type: :controller do
|
describe Admin::GestionnairesController, type: :controller do
|
||||||
let(:admin) { create(:administrateur) }
|
let(:admin) { create(:administrateur) }
|
||||||
|
let(:email_2) { 'plip@octo.com' }
|
||||||
|
let(:admin_2) { create :administrateur, email: email_2 }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in admin
|
sign_in admin
|
||||||
end
|
end
|
||||||
|
@ -13,7 +16,7 @@ describe Admin::GestionnairesController, type: :controller do
|
||||||
|
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
let(:email) { 'test@plop.com' }
|
let(:email) { 'test@plop.com' }
|
||||||
subject { post :create, gestionnaire: { email: email } }
|
subject { post :create, gestionnaire: {email: email} }
|
||||||
|
|
||||||
context 'When email is valid' do
|
context 'When email is valid' do
|
||||||
before do
|
before do
|
||||||
|
@ -41,7 +44,16 @@ describe Admin::GestionnairesController, type: :controller do
|
||||||
end
|
end
|
||||||
let(:email) { 'piou' }
|
let(:email) { 'piou' }
|
||||||
it { expect(response.status).to eq(302) }
|
it { expect(response.status).to eq(302) }
|
||||||
it { expect{ response }.not_to change(Gestionnaire, :count) }
|
it { expect { response }.not_to change(Gestionnaire, :count) }
|
||||||
|
it { expect(flash[:alert]).to be_present }
|
||||||
|
|
||||||
|
describe 'Email Notification' do
|
||||||
|
it {
|
||||||
|
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
||||||
|
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
||||||
|
subject
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when email is empty' do
|
context 'when email is empty' do
|
||||||
|
@ -50,66 +62,104 @@ describe Admin::GestionnairesController, type: :controller do
|
||||||
end
|
end
|
||||||
let(:email) { '' }
|
let(:email) { '' }
|
||||||
it { expect(response.status).to eq(302) }
|
it { expect(response.status).to eq(302) }
|
||||||
it { expect{ response }.not_to change(Gestionnaire, :count) }
|
it { expect { response }.not_to change(Gestionnaire, :count) }
|
||||||
|
|
||||||
it 'Notification email is not send' do
|
it 'Notification email is not send' do
|
||||||
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
||||||
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context ' when email already exists' do
|
context 'when email is already assign at the admin' do
|
||||||
let(:email) { 'test@plop.com' }
|
|
||||||
before do
|
before do
|
||||||
|
create :gestionnaire, email: email, administrateurs: [admin]
|
||||||
subject
|
subject
|
||||||
post :create, gestionnaire: { email: email }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(response.status).to eq(302) }
|
it { expect(response.status).to eq(302) }
|
||||||
it { expect{ response }.not_to change(Gestionnaire, :count) }
|
it { expect { response }.not_to change(Gestionnaire, :count) }
|
||||||
|
it { expect(flash[:alert]).to be_present }
|
||||||
|
|
||||||
|
describe 'Email notification' do
|
||||||
|
it 'is not sent when email already exists' do
|
||||||
|
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
||||||
|
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
||||||
|
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when an other admin will add the same email' do
|
||||||
|
let(:gestionnaire) { Gestionnaire.find_by_email(email) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
create :gestionnaire, email: email, administrateurs: [admin]
|
||||||
|
|
||||||
|
sign_out admin
|
||||||
|
sign_in admin_2
|
||||||
|
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(response.status).to eq(302) }
|
||||||
|
it { expect { response }.not_to change(Gestionnaire, :count) }
|
||||||
|
it { expect(flash[:notice]).to be_present }
|
||||||
|
|
||||||
|
it { expect(admin_2.gestionnaires).to include gestionnaire }
|
||||||
|
it { expect(gestionnaire.administrateurs.size).to eq 2 }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Email notification' do
|
context 'Email notification' do
|
||||||
|
it 'Notification email is sent when accompagnateur is create' do
|
||||||
it 'Notification email is sent when email is valid' do
|
|
||||||
expect(GestionnaireMailer).to receive(:new_gestionnaire).and_return(GestionnaireMailer)
|
expect(GestionnaireMailer).to receive(:new_gestionnaire).and_return(GestionnaireMailer)
|
||||||
expect(GestionnaireMailer).to receive(:deliver_now!)
|
expect(GestionnaireMailer).to receive(:deliver_now!)
|
||||||
subject
|
subject
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'is not sent when email is not valid' do
|
it 'Notification email is sent when accompagnateur is assign' do
|
||||||
let(:email) { 'testplop.com' }
|
expect(GestionnaireMailer).to receive(:new_assignement).and_return(GestionnaireMailer)
|
||||||
|
expect(GestionnaireMailer).to receive(:deliver_now!)
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when accompagnateur is assign at a new admin' do
|
||||||
|
before do
|
||||||
|
create :gestionnaire, email: email, administrateurs: [admin]
|
||||||
|
|
||||||
|
sign_out admin
|
||||||
|
sign_in admin_2
|
||||||
|
end
|
||||||
|
|
||||||
it {
|
it {
|
||||||
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
expect(GestionnaireMailer).to receive(:new_assignement).and_return(GestionnaireMailer)
|
||||||
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
expect(GestionnaireMailer).to receive(:deliver_now!)
|
||||||
subject
|
subject
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is not sent when email already exists' do
|
|
||||||
subject
|
|
||||||
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
|
||||||
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
|
||||||
subject
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
describe 'DELETE #destroy' do
|
describe 'DELETE #destroy' do
|
||||||
let(:email) { 'test@plop.com' }
|
let(:email) { 'test@plop.com' }
|
||||||
let!(:gestionnaire) { create :gestionnaire, email: email }
|
let!(:admin) { create :administrateur }
|
||||||
|
let!(:gestionnaire) { create :gestionnaire, email: email, administrateurs: [admin] }
|
||||||
|
|
||||||
subject { delete :destroy, id: gestionnaire.id }
|
subject { delete :destroy, id: gestionnaire.id }
|
||||||
|
|
||||||
context "when gestionaire_id is valid" do
|
context "when gestionaire_id is valid" do
|
||||||
before do
|
before do
|
||||||
subject
|
subject
|
||||||
|
admin.reload
|
||||||
|
gestionnaire.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(response.status).to eq(302) }
|
it { expect(response.status).to eq(302) }
|
||||||
it { expect(response).to redirect_to admin_gestionnaires_path }
|
it { expect(response).to redirect_to admin_gestionnaires_path }
|
||||||
it { expect{Gestionnaire.find(gestionnaire.id)}.to raise_error ActiveRecord::RecordNotFound}
|
it { expect(admin.gestionnaires).not_to include gestionnaire }
|
||||||
|
it { expect(gestionnaire.administrateurs).not_to include admin }
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect{subject}.to change(Gestionnaire, :count).by(-1) }
|
it { expect { subject }.not_to change(Gestionnaire, :count) }
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
32
spec/services/accompagnateur_service_spec.rb
Normal file
32
spec/services/accompagnateur_service_spec.rb
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe AccompagnateurService do
|
||||||
|
describe '#change_assignement!' do
|
||||||
|
|
||||||
|
let(:procedure) { create :procedure }
|
||||||
|
let(:accompagnateur) { create :gestionnaire }
|
||||||
|
|
||||||
|
subject { AccompagnateurService.change_assignement! accompagnateur, procedure, to }
|
||||||
|
|
||||||
|
context 'when accompagnateur is not assign at the procedure' do
|
||||||
|
let(:to) { AccompagnateurService::ASSIGN }
|
||||||
|
|
||||||
|
before do
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(accompagnateur.procedures).to include procedure }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when accompagnateur is assign at the procedure' do
|
||||||
|
let(:to) { AccompagnateurService::NOT_ASSIGN }
|
||||||
|
|
||||||
|
before do
|
||||||
|
create :assign_to, gestionnaire: accompagnateur, procedure: procedure
|
||||||
|
subject
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(accompagnateur.procedures).not_to include procedure }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
60
spec/views/admin/accompagnateurs/show.html.haml_spec.rb
Normal file
60
spec/views/admin/accompagnateurs/show.html.haml_spec.rb
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'admin/accompagnateurs/show.html.haml', type: :view do
|
||||||
|
let(:admin) { create(:administrateur) }
|
||||||
|
let(:procedure) { create :procedure, administrateur: admin }
|
||||||
|
|
||||||
|
let(:assign_gestionnaires) { procedure.gestionnaires }
|
||||||
|
let(:not_assign_gestionnaires) { admin.gestionnaires.where.not(id: assign_gestionnaires.ids) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
assign(:procedure, procedure)
|
||||||
|
|
||||||
|
assign(:accompagnateurs_assign, (smart_listing_create :accompagnateurs_assign,
|
||||||
|
assign_gestionnaires,
|
||||||
|
partial: "admin/accompagnateurs/list_assign",
|
||||||
|
array: true))
|
||||||
|
|
||||||
|
assign(:accompagnateurs_not_assign, (smart_listing_create :accompagnateurs_not_assign,
|
||||||
|
not_assign_gestionnaires,
|
||||||
|
partial: "admin/accompagnateurs/list_not_assign",
|
||||||
|
array: true))
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when admin have none accompagnateur ' do
|
||||||
|
before do
|
||||||
|
render
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(rendered).to have_content('Aucun de disponible') }
|
||||||
|
|
||||||
|
context 'when administrateur have none accompagnateur assign' do
|
||||||
|
it { expect(rendered).to have_content('Aucun d\'affecté') }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when administrateur have two accompagnateur' do
|
||||||
|
let!(:accompagnateur_1) { create :gestionnaire, email: 'plop@plop.com', administrateurs: [admin] }
|
||||||
|
let!(:accompagnateur_2) { create :gestionnaire, email: 'plip@plop.com', administrateurs: [admin] }
|
||||||
|
|
||||||
|
before do
|
||||||
|
not_assign_gestionnaires.reload
|
||||||
|
assign_gestionnaires.reload
|
||||||
|
|
||||||
|
assign(:accompagnateurs_assign, (smart_listing_create :accompagnateurs_assign,
|
||||||
|
assign_gestionnaires,
|
||||||
|
partial: "admin/accompagnateurs/list_assign",
|
||||||
|
array: true))
|
||||||
|
|
||||||
|
assign(:accompagnateurs_not_assign, (smart_listing_create :accompagnateurs_not_assign,
|
||||||
|
not_assign_gestionnaires,
|
||||||
|
partial: "admin/accompagnateurs/list_not_assign",
|
||||||
|
array: true))
|
||||||
|
|
||||||
|
render
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect(rendered).to have_content(accompagnateur_1.email) }
|
||||||
|
it { expect(rendered).to have_content(accompagnateur_2.email) }
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue