Merge branch 'develop' of github.com:sgmap/tps into develop
This commit is contained in:
commit
e8fcebeea9
12 changed files with 244 additions and 1 deletions
34
app/controllers/admin/gestionnaires_controller.rb
Normal file
34
app/controllers/admin/gestionnaires_controller.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
class Admin::GestionnairesController < AdminController
|
||||
include SmartListing::Helper::ControllerExtensions
|
||||
helper SmartListing::Helper
|
||||
|
||||
def index
|
||||
@gestionnaires = smart_listing_create :gestionnaires,
|
||||
current_administrateur.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true
|
||||
@gestionnaire ||= Gestionnaire.new
|
||||
end
|
||||
|
||||
|
||||
def create
|
||||
gestionnaire_params = create_gestionnaire_params
|
||||
@gestionnaire = Gestionnaire.create(gestionnaire_params)
|
||||
|
||||
if @gestionnaire.errors.messages.empty?
|
||||
flash.notice = 'Gestionnaire ajouté'
|
||||
GestionnaireMailer.new_gestionnaire(gestionnaire_params[:email], gestionnaire_params[:password]).deliver_now!
|
||||
else
|
||||
flash.alert = @gestionnaire.errors.full_messages.join('<br />').html_safe
|
||||
end
|
||||
|
||||
redirect_to admin_gestionnaires_path
|
||||
end
|
||||
|
||||
def create_gestionnaire_params
|
||||
params.require(:gestionnaire).permit(:email)
|
||||
.merge(administrateur_id: current_administrateur.id)
|
||||
.merge(password: SecureRandom.hex(5))
|
||||
end
|
||||
|
||||
end
|
20
app/mailers/gestionnaire_mailer.rb
Normal file
20
app/mailers/gestionnaire_mailer.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
class GestionnaireMailer < ApplicationMailer
|
||||
|
||||
def new_gestionnaire email, password
|
||||
send_mail email, password, "Vous avez été nommé accompagnateur sur la plateforme TPS"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def vars_mailer email, password
|
||||
@password = password
|
||||
@email = email
|
||||
end
|
||||
|
||||
def send_mail email, password, subject
|
||||
vars_mailer email, password
|
||||
|
||||
mail(from: "tps@apientreprise.fr", to: email,
|
||||
subject: subject)
|
||||
end
|
||||
end
|
5
app/views/admin/gestionnaires/_informations.html.haml
Normal file
5
app/views/admin/gestionnaires/_informations.html.haml
Normal file
|
@ -0,0 +1,5 @@
|
|||
-{email: 'Email*'}.each do |key, value|
|
||||
.form-group{class: ('has-error' if @gestionnaire.errors.messages[key])}
|
||||
%h4
|
||||
=value
|
||||
=f.text_field key, class: 'form-control', placeholder: value
|
15
app/views/admin/gestionnaires/_list.html.haml
Normal file
15
app/views/admin/gestionnaires/_list.html.haml
Normal file
|
@ -0,0 +1,15 @@
|
|||
- unless smart_listing.empty?
|
||||
%table.table
|
||||
%thead
|
||||
%th#libelle= smart_listing.sortable 'Email', 'email'
|
||||
|
||||
- @gestionnaires.each do |gestionnaire|
|
||||
%tr
|
||||
%td= gestionnaire.email
|
||||
|
||||
= smart_listing.paginate
|
||||
= smart_listing.pagination_per_page_links
|
||||
|
||||
- else
|
||||
%h4.center
|
||||
Aucun gestionnaire
|
19
app/views/admin/gestionnaires/index.html.haml
Normal file
19
app/views/admin/gestionnaires/index.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
|||
%h1 Gestion des gestionnaires
|
||||
%br
|
||||
|
||||
.row
|
||||
.col-md-4.col-lg-4
|
||||
= smart_listing_render :gestionnaires
|
||||
.col-md-1.col-lg-1
|
||||
|
||||
.col-md-6.col-lg-6
|
||||
%h3 Ajouter un gestionnaire
|
||||
#procedure_new.section.section-label
|
||||
= form_for @gestionnaire, url: {controller: 'admin/gestionnaires', action: :create} do |f|
|
||||
.row
|
||||
.col-md-5.col-lg-5
|
||||
=render partial: 'informations', locals: {f: f}
|
||||
.col-md-2.col-lg-2
|
||||
%br
|
||||
%br
|
||||
=f.submit 'Valider', class: 'btn btn-info', style: 'float:left'
|
1
app/views/admin/gestionnaires/index.js.erb
Normal file
1
app/views/admin/gestionnaires/index.js.erb
Normal file
|
@ -0,0 +1 @@
|
|||
<%= smart_listing_update :gestionnaires %>
|
|
@ -10,11 +10,15 @@
|
|||
= link_to(admin_procedures_path, id: :menu_item_procedure) do
|
||||
%i.fa.fa-list{ style: "background-size: 10px;"}
|
||||
Procédures
|
||||
%li
|
||||
= link_to(admin_gestionnaires_path) do
|
||||
%i.fa.fa-user
|
||||
Gestionnaires
|
||||
%li.divider{ role: :separator}
|
||||
%li
|
||||
= link_to(admin_profile_path, id: :profile) do
|
||||
%i.fa.fa-user
|
||||
Profile
|
||||
%li.divider{ role: :separator}
|
||||
%li
|
||||
= link_to('/administrateurs/sign_out',id: :admin_sign_out, method: :delete) do
|
||||
%i.fa.fa-power-off
|
||||
|
|
12
app/views/gestionnaire_mailer/new_gestionnaire.text.erb
Normal file
12
app/views/gestionnaire_mailer/new_gestionnaire.text.erb
Normal file
|
@ -0,0 +1,12 @@
|
|||
Bienvenue sur la plateforme TPS
|
||||
|
||||
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
|
||||
Login : <%= @email %>
|
||||
Mot de passe : <%= @password %>
|
||||
|
||||
Bonne journée,
|
||||
|
||||
---
|
||||
L'équipe TPS - tps@apientreprise.fr
|
|
@ -57,6 +57,14 @@ fr:
|
|||
email:
|
||||
blank: est vide
|
||||
taken: ': Invitation déjà envoyée'
|
||||
gestionnaire:
|
||||
attributes:
|
||||
email:
|
||||
invalid: invalide
|
||||
taken: déjà utilisé
|
||||
blank: est vide
|
||||
password:
|
||||
blank: ': Le mot de passe est vide'
|
||||
|
||||
devise:
|
||||
confirmations:
|
||||
|
|
|
@ -74,6 +74,7 @@ Rails.application.routes.draw do
|
|||
resource :pieces_justificatives, only: [:show, :update]
|
||||
resources :pieces_justificatives, only: :destroy
|
||||
end
|
||||
resources :gestionnaires, only: [:index, :create]
|
||||
end
|
||||
|
||||
get 'backoffice' => 'backoffice#index'
|
||||
|
|
90
spec/controllers/admin/gestionnaires_controller_spec.rb
Normal file
90
spec/controllers/admin/gestionnaires_controller_spec.rb
Normal file
|
@ -0,0 +1,90 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Admin::GestionnairesController, type: :controller do
|
||||
let(:admin) { create(:administrateur) }
|
||||
before do
|
||||
sign_in admin
|
||||
end
|
||||
|
||||
describe 'GET #index' do
|
||||
subject { get :index }
|
||||
it { expect(subject.status).to eq(200) }
|
||||
end
|
||||
|
||||
describe 'POST #create' do
|
||||
let(:email) { 'test@plop.com' }
|
||||
subject { post :create, gestionnaire: { email: email } }
|
||||
|
||||
context 'When email is valid' do
|
||||
before do
|
||||
subject
|
||||
end
|
||||
it { expect(response.status).to eq(302) }
|
||||
it { expect(response).to redirect_to admin_gestionnaires_path }
|
||||
|
||||
describe 'Gestionnaire attributs in database' do
|
||||
let(:gestionnaire) { Gestionnaire.last }
|
||||
it { expect(gestionnaire.email).to eq(email) }
|
||||
it { expect(gestionnaire.administrateur_id).to eq(admin.id) }
|
||||
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(Gestionnaire, :count) }
|
||||
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(Gestionnaire, :count) }
|
||||
it 'Notification email is not send' do
|
||||
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
||||
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
||||
end
|
||||
end
|
||||
|
||||
context ' when email already exists' do
|
||||
let(:email) { 'test@plop.com' }
|
||||
before do
|
||||
subject
|
||||
post :create, gestionnaire: { email: email }
|
||||
end
|
||||
it { expect(response.status).to eq(302) }
|
||||
it { expect{ response }.not_to change(Gestionnaire, :count) }
|
||||
end
|
||||
|
||||
context 'Email notification' do
|
||||
|
||||
it 'Notification email is sent when email is valid' do
|
||||
expect(GestionnaireMailer).to receive(:new_gestionnaire).and_return(GestionnaireMailer)
|
||||
expect(GestionnaireMailer).to receive(:deliver_now!)
|
||||
subject
|
||||
end
|
||||
|
||||
context 'is not sent when email is not valid' do
|
||||
let(:email) { 'testplop.com' }
|
||||
it {
|
||||
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
||||
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
||||
subject
|
||||
}
|
||||
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
|
34
spec/views/admin/gestionnaires/index.html.haml_spec.rb
Normal file
34
spec/views/admin/gestionnaires/index.html.haml_spec.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'admin/gestionnaires/index.html.haml', type: :view do
|
||||
let(:token) { 'super_token' }
|
||||
let(:admin) { create(:administrateur, api_token: token) }
|
||||
|
||||
before do
|
||||
assign(:gestionnaires, (smart_listing_create :gestionnaires,
|
||||
admin.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true))
|
||||
assign(:gestionnaire, Gestionnaire.new())
|
||||
end
|
||||
|
||||
context 'Aucun gestionnaire' do
|
||||
before do
|
||||
render
|
||||
end
|
||||
it { expect(rendered).to have_content('Aucun gestionnaire') }
|
||||
end
|
||||
|
||||
context 'Ajout d\'un gestionnaire' do
|
||||
before do
|
||||
create(:gestionnaire, administrateur: admin)
|
||||
admin.reload
|
||||
assign(:gestionnaires, (smart_listing_create :gestionnaires,
|
||||
admin.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true))
|
||||
render
|
||||
end
|
||||
it { expect(rendered).to match(/plop\d+@plop.com/) }
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue