Merge branch 'assign_to_procedure' into develop
# Conflicts: # db/schema.rb
This commit is contained in:
commit
e973286766
39 changed files with 578 additions and 101 deletions
|
@ -31,6 +31,7 @@
|
|||
//= require bootstrap-wysihtml5/locales/fr-FR
|
||||
|
||||
|
||||
|
||||
$(document).on('page:load', scroll_to);
|
||||
$(document).ready(scroll_to);
|
||||
|
||||
|
|
30
app/controllers/admin/accompagnateurs_controller.rb
Normal file
30
app/controllers/admin/accompagnateurs_controller.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
class Admin::AccompagnateursController < AdminController
|
||||
include SmartListing::Helper::ControllerExtensions
|
||||
helper SmartListing::Helper
|
||||
|
||||
before_action :retrieve_procedure
|
||||
|
||||
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
|
||||
|
||||
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
|
|
@ -4,37 +4,59 @@ class Admin::GestionnairesController < AdminController
|
|||
|
||||
def index
|
||||
@gestionnaires = smart_listing_create :gestionnaires,
|
||||
current_administrateur.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true
|
||||
current_administrateur.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true
|
||||
@gestionnaire ||= Gestionnaire.new
|
||||
end
|
||||
|
||||
|
||||
def create
|
||||
@gestionnaire = Gestionnaire.create(create_gestionnaire_params)
|
||||
@gestionnaire = Gestionnaire.find_by_email(params[:gestionnaire][:email])
|
||||
|
||||
if @gestionnaire.errors.messages.empty?
|
||||
flash.notice = 'Gestionnaire ajouté'
|
||||
GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_now!
|
||||
if @gestionnaire.nil?
|
||||
new_gestionnaire!
|
||||
else
|
||||
flash.alert = @gestionnaire.errors.full_messages.join('<br />').html_safe
|
||||
assign_gestionnaire!
|
||||
end
|
||||
|
||||
redirect_to admin_gestionnaires_path
|
||||
end
|
||||
|
||||
|
||||
def destroy
|
||||
Gestionnaire.find(params[:id]).destroy
|
||||
Gestionnaire.find(params[:id]).administrateurs.delete current_administrateur
|
||||
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))
|
||||
.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
|
|
@ -4,15 +4,19 @@ class GestionnaireMailer < ApplicationMailer
|
|||
send_mail email, password, "Vous avez été nommé accompagnateur sur la plateforme TPS"
|
||||
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
|
||||
|
||||
def vars_mailer email, password
|
||||
@password = password
|
||||
def vars_mailer email, args
|
||||
@args = args
|
||||
@email = email
|
||||
end
|
||||
|
||||
def send_mail email, password, subject
|
||||
vars_mailer email, password
|
||||
def send_mail email, args, subject
|
||||
vars_mailer email, args
|
||||
|
||||
mail(from: "tps@apientreprise.fr", to: email,
|
||||
subject: subject)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
class Administrateur < ActiveRecord::Base
|
||||
# Include default devise modules. Others available are:
|
||||
# :confirmable, :lockable, :timeoutable and :omniauthable
|
||||
devise :database_authenticatable, :registerable,
|
||||
:recoverable, :rememberable, :trackable, :validatable
|
||||
|
||||
has_many :gestionnaires
|
||||
has_and_belongs_to_many :gestionnaires
|
||||
has_many :procedures
|
||||
|
||||
before_save :ensure_api_token
|
||||
|
|
4
app/models/assign_to.rb
Normal file
4
app/models/assign_to.rb
Normal file
|
@ -0,0 +1,4 @@
|
|||
class AssignTo < ActiveRecord::Base
|
||||
belongs_to :procedure
|
||||
belongs_to :gestionnaire
|
||||
end
|
|
@ -1,12 +1,11 @@
|
|||
class Gestionnaire < ActiveRecord::Base
|
||||
# Include default devise modules. Others available are:
|
||||
# :confirmable, :lockable, :timeoutable and :omniauthable
|
||||
devise :database_authenticatable, :registerable,
|
||||
:recoverable, :rememberable, :trackable, :validatable
|
||||
|
||||
belongs_to :administrateur
|
||||
has_and_belongs_to_many :administrateurs
|
||||
|
||||
has_many :procedures, through: :administrateur
|
||||
has_many :assign_to
|
||||
has_many :procedures, through: :assign_to
|
||||
has_many :dossiers, through: :procedures
|
||||
|
||||
def dossiers_filter
|
||||
|
|
|
@ -7,6 +7,9 @@ class Procedure < ActiveRecord::Base
|
|||
|
||||
belongs_to :administrateur
|
||||
|
||||
has_many :assign_to
|
||||
has_many :gestionnaires, through: :assign_to
|
||||
|
||||
delegate :use_api_carto, to: :module_api_carto
|
||||
|
||||
accepts_nested_attributes_for :types_de_champ,:reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
||||
|
|
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
|
19
app/views/admin/accompagnateurs/show.html.haml
Normal file
19
app/views/admin/accompagnateurs/show.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
|||
%h2.text-info
|
||||
=@procedure.libelle
|
||||
%br
|
||||
|
||||
%ul.nav.nav-tabs
|
||||
= render partial: 'admin/procedures/navbar', locals: {active: 'Accompagnateurs'}
|
||||
|
||||
#accompagnateur_form
|
||||
.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 %>
|
|
@ -1,6 +1,9 @@
|
|||
%li{ class: ('active' if active == 'Informations') }
|
||||
= link_to('Informations', admin_procedure_path(@procedure))
|
||||
|
||||
%li{ class: ('active' if active == 'Accompagnateurs') }
|
||||
= link_to('Accompagnateurs', admin_procedure_accompagnateurs_path(@procedure))
|
||||
|
||||
%li{ class: ('disabled' if @procedure.locked?) || ('active' if active == 'Description') }
|
||||
= link_to_unless(@procedure.locked?, 'Description', edit_admin_procedure_path(@procedure)) do
|
||||
= link_to('Description', '#')
|
||||
|
|
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 :
|
||||
|
||||
URL : https://tps.apientreprise.fr/gestionnaires/sign_in
|
||||
URL : <%= new_gestionnaire_session_url %>
|
||||
Login : <%= @email %>
|
||||
Mot de passe : <%= @password %>
|
||||
Mot de passe : <%= @args %>
|
||||
|
||||
Bonne journée,
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
|
|||
inflect.irregular 'piece_justificative', 'pieces_justificatives'
|
||||
inflect.irregular 'type_de_piece_justificative', 'types_de_piece_justificative'
|
||||
inflect.irregular 'type_de_champ', 'types_de_champ'
|
||||
inflect.irregular 'assign_to', 'assign_tos'
|
||||
end
|
||||
|
||||
# These inflection rules are supported but not enabled by default:
|
||||
|
|
|
@ -80,6 +80,7 @@ Rails.application.routes.draw do
|
|||
get 'sign_in' => '/administrateurs/sessions#new'
|
||||
get 'procedures/archived' => 'procedures#archived'
|
||||
get 'profile' => 'profile#show', as: :profile
|
||||
|
||||
resources :procedures do
|
||||
resource :types_de_champ, only: [:show, :update] do
|
||||
post '/:index/move_up' => 'types_de_champ#move_up', as: :move_up
|
||||
|
@ -88,10 +89,18 @@ Rails.application.routes.draw do
|
|||
|
||||
put 'archive' => 'procedures#archive', as: :archive
|
||||
|
||||
resource :accompagnateurs, only: [:show, :update]
|
||||
|
||||
|
||||
resources :types_de_champ, only: [:destroy]
|
||||
resource :pieces_justificatives, only: [:show, :update]
|
||||
resources :pieces_justificatives, only: :destroy
|
||||
end
|
||||
|
||||
namespace :accompagnateurs do
|
||||
get 'show' #delete after fixed tests admin/accompagnateurs/show_spec without this line
|
||||
end
|
||||
|
||||
resources :gestionnaires, only: [:index, :create, :destroy]
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
class AdminHasAndBelongGestionnaire < ActiveRecord::Migration
|
||||
class Gestionnaire < ActiveRecord::Base
|
||||
end
|
||||
|
||||
class AdministrateursGestionnaire < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def up
|
||||
create_table :administrateurs_gestionnaires, id: false do |t|
|
||||
t.belongs_to :administrateur, index: true
|
||||
t.belongs_to :gestionnaire, index: true
|
||||
end
|
||||
|
||||
Gestionnaire.all.each do |gestionnaire|
|
||||
execute "insert into administrateurs_gestionnaires (gestionnaire_id, administrateur_id) values (#{gestionnaire.id}, #{gestionnaire.administrateur_id}) "
|
||||
end
|
||||
|
||||
remove_column :gestionnaires, :administrateur_id
|
||||
end
|
||||
|
||||
def down
|
||||
add_column :gestionnaires, :administrateur_id, :integer
|
||||
|
||||
AdministrateursGestionnaire.all.each do |ag|
|
||||
gestionnaire = Gestionnaire.find(ag.gestionnaire_id)
|
||||
gestionnaire.administrateur_id = ag.administrateur_id
|
||||
gestionnaire.save
|
||||
end
|
||||
|
||||
drop_table :administrateurs_gestionnaires
|
||||
end
|
||||
end
|
|
@ -0,0 +1,36 @@
|
|||
class GestionnaireIsAssignToProcedure < ActiveRecord::Migration
|
||||
class AssignTo < ActiveRecord::Base
|
||||
belongs_to :gestionnaire
|
||||
belongs_to :procedure
|
||||
end
|
||||
|
||||
class Gestionnaire < ActiveRecord::Base
|
||||
has_and_belongs_to_many :administrateurs
|
||||
has_many :procedures, through: :assign_to
|
||||
end
|
||||
|
||||
class Administrateur < ActiveRecord::Base
|
||||
has_and_belongs_to_many :gestionnaires
|
||||
has_many :procedures
|
||||
end
|
||||
|
||||
class Procedure < ActiveRecord::Base
|
||||
belongs_to :administrateur
|
||||
has_many :gestionnaires, through: :assign_to
|
||||
end
|
||||
|
||||
def change
|
||||
create_table :assign_tos, id: false do |t|
|
||||
t.belongs_to :gestionnaire, index: true
|
||||
t.belongs_to :procedure, index: true
|
||||
end
|
||||
|
||||
Administrateur.all.each do |administrateur|
|
||||
administrateur.gestionnaires.each do |gestionnaire|
|
||||
administrateur.procedures.each do |procedure|
|
||||
AssignTo.create gestionnaire: gestionnaire, procedure: procedure
|
||||
end
|
||||
end
|
||||
end
|
||||
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
|
|
@ -1,15 +1,23 @@
|
|||
class SetOriginalFilenameForUploaders < ActiveRecord::Migration
|
||||
class PieceJustificative < ActiveRecord::Base
|
||||
|
||||
end
|
||||
|
||||
class Cerfa < ActiveRecord::Base
|
||||
|
||||
end
|
||||
|
||||
def change
|
||||
PieceJustificative.find_each do |pj|
|
||||
PieceJustificative.all.each do |pj|
|
||||
if pj.original_filename.nil?
|
||||
pj.original_filename = pj.content_identifier
|
||||
pj.original_filename = pj.content
|
||||
pj.save!
|
||||
end
|
||||
end
|
||||
|
||||
Cerfa.find_each do |cerfa|
|
||||
Cerfa.all.each do |cerfa|
|
||||
if cerfa.original_filename.nil?
|
||||
cerfa.original_filename = cerfa.content_identifier
|
||||
cerfa.original_filename = cerfa.content
|
||||
cerfa.save!
|
||||
end
|
||||
end
|
||||
|
|
18
db/schema.rb
18
db/schema.rb
|
@ -35,6 +35,15 @@ ActiveRecord::Schema.define(version: 20160524093540) do
|
|||
add_index "administrateurs", ["email"], name: "index_administrateurs_on_email", unique: true, using: :btree
|
||||
add_index "administrateurs", ["reset_password_token"], name: "index_administrateurs_on_reset_password_token", unique: true, using: :btree
|
||||
|
||||
create_table "administrateurs_gestionnaires", id: false, force: :cascade do |t|
|
||||
t.integer "administrateur_id"
|
||||
t.integer "gestionnaire_id"
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
create_table "administrations", force: :cascade do |t|
|
||||
t.string "email", default: "", null: false
|
||||
t.string "encrypted_password", default: "", null: false
|
||||
|
@ -53,6 +62,14 @@ ActiveRecord::Schema.define(version: 20160524093540) do
|
|||
add_index "administrations", ["email"], name: "index_administrations_on_email", unique: true, using: :btree
|
||||
add_index "administrations", ["reset_password_token"], name: "index_administrations_on_reset_password_token", unique: true, using: :btree
|
||||
|
||||
create_table "assign_tos", id: false, force: :cascade do |t|
|
||||
t.integer "gestionnaire_id"
|
||||
t.integer "procedure_id"
|
||||
end
|
||||
|
||||
add_index "assign_tos", ["gestionnaire_id"], name: "index_assign_tos_on_gestionnaire_id", using: :btree
|
||||
add_index "assign_tos", ["procedure_id"], name: "index_assign_tos_on_procedure_id", using: :btree
|
||||
|
||||
create_table "cadastres", force: :cascade do |t|
|
||||
t.string "surface_intersection"
|
||||
t.float "surface_parcelle"
|
||||
|
@ -176,7 +193,6 @@ ActiveRecord::Schema.define(version: 20160524093540) do
|
|||
t.inet "last_sign_in_ip"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "administrateur_id"
|
||||
t.integer "procedure_filter", default: [], array: true
|
||||
end
|
||||
|
||||
|
|
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
|
|
@ -1,31 +1,40 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Admin::GestionnairesController, type: :controller do
|
||||
describe Admin::GestionnairesController, 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
|
||||
end
|
||||
|
||||
describe 'GET #index' do
|
||||
subject { get :index }
|
||||
it { expect(subject.status).to eq(200) }
|
||||
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 } }
|
||||
let(:email) { 'test@plop.com' }
|
||||
subject { post :create, gestionnaire: {email: email} }
|
||||
|
||||
context 'When email is valid' do
|
||||
before do
|
||||
subject
|
||||
end
|
||||
|
||||
let(:gestionnaire) { Gestionnaire.last }
|
||||
|
||||
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
|
||||
|
||||
describe 'New gestionnaire is assign to the admin' do
|
||||
it { expect(gestionnaire.administrateurs).to include admin }
|
||||
it { expect(admin.gestionnaires).to include gestionnaire }
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -33,77 +42,124 @@ describe Admin::GestionnairesController, type: :controller 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
|
||||
let(:email) { 'piou' }
|
||||
it { expect(response.status).to eq(302) }
|
||||
it { expect{ response }.not_to change(Gestionnaire, :count) }
|
||||
end
|
||||
it { expect { response }.not_to change(Gestionnaire, :count) }
|
||||
it { expect(flash[:alert]).to be_present }
|
||||
|
||||
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' }
|
||||
describe 'Email Notification' do
|
||||
it {
|
||||
expect(GestionnaireMailer).not_to receive(:new_gestionnaire)
|
||||
expect(GestionnaireMailer).not_to receive(:deliver_now!)
|
||||
subject
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
it 'is not sent when email already exists' do
|
||||
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 is already assign at the admin' do
|
||||
before do
|
||||
create :gestionnaire, email: email, administrateurs: [admin]
|
||||
subject
|
||||
end
|
||||
|
||||
it { expect(response.status).to eq(302) }
|
||||
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
|
||||
|
||||
context 'Email notification' do
|
||||
it 'Notification email is sent when accompagnateur is create' do
|
||||
expect(GestionnaireMailer).to receive(:new_gestionnaire).and_return(GestionnaireMailer)
|
||||
expect(GestionnaireMailer).to receive(:deliver_now!)
|
||||
subject
|
||||
end
|
||||
|
||||
it 'Notification email is sent when accompagnateur is assign' do
|
||||
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 {
|
||||
expect(GestionnaireMailer).to receive(:new_assignement).and_return(GestionnaireMailer)
|
||||
expect(GestionnaireMailer).to receive(:deliver_now!)
|
||||
subject
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
describe 'DELETE #destroy' do
|
||||
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 }
|
||||
|
||||
context "when gestionaire_id is valid" do
|
||||
before do
|
||||
subject
|
||||
admin.reload
|
||||
gestionnaire.reload
|
||||
end
|
||||
|
||||
it { expect(response.status).to eq(302) }
|
||||
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
|
||||
|
||||
it { expect{subject}.to change(Gestionnaire, :count).by(-1) }
|
||||
it { expect { subject }.not_to change(Gestionnaire, :count) }
|
||||
end
|
||||
|
||||
end
|
|
@ -6,7 +6,7 @@ describe Backoffice::DossiersController, type: :controller do
|
|||
|
||||
let(:dossier_id) { dossier.id }
|
||||
let(:bad_dossier_id) { Dossier.count + 10 }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateur: create(:administrateur)) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateurs: [create(:administrateur)]) }
|
||||
|
||||
describe 'GET #show' do
|
||||
context 'gestionnaire is connected' do
|
||||
|
|
4
spec/factories/assign_to.rb
Normal file
4
spec/factories/assign_to.rb
Normal file
|
@ -0,0 +1,4 @@
|
|||
FactoryGirl.define do
|
||||
factory :assign_to do
|
||||
end
|
||||
end
|
|
@ -21,7 +21,7 @@ feature 'when gestionnaire come to /backoffice and is not authenticated' do
|
|||
end
|
||||
context 'when user enter good credentials' do
|
||||
let(:administrateur) { create(:administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateur: administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateurs: [administrateur]) }
|
||||
|
||||
before do
|
||||
page.find_by_id(:gestionnaire_email).set gestionnaire.email
|
||||
|
|
|
@ -2,13 +2,16 @@ require 'spec_helper'
|
|||
|
||||
feature 'on backoffice page' do
|
||||
let(:administrateur) { create(:administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateur: administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateurs: [administrateur]) }
|
||||
let(:procedure) { create(:procedure, administrateur: administrateur) }
|
||||
|
||||
let!(:dossier) { create(:dossier, :with_entreprise, procedure: procedure, state: 'initiated') }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure
|
||||
visit backoffice_path
|
||||
end
|
||||
|
||||
context 'when gestionnaire is logged in' do
|
||||
before do
|
||||
page.find_by_id(:gestionnaire_email).set gestionnaire.email
|
||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
|||
|
||||
feature 'on click on tabs button' do
|
||||
let(:administrateur) { create(:administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateur: administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateurs: [administrateur]) }
|
||||
|
||||
before do
|
||||
login_as gestionnaire, scope: :gestionnaire
|
||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
|||
|
||||
feature 'search file on gestionnaire backoffice' do
|
||||
let(:administrateur) { create(:administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateur: administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateurs: [administrateur]) }
|
||||
|
||||
before do
|
||||
login_as gestionnaire, scope: :gestionnaire
|
||||
|
@ -11,8 +11,11 @@ feature 'search file on gestionnaire backoffice' do
|
|||
context 'when gestionnaire is logged in' do
|
||||
context 'when he click on search button' do
|
||||
let(:terms) { '' }
|
||||
let!(:procedure) { create(:procedure, administrateur: administrateur) }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure
|
||||
|
||||
visit backoffice_dossiers_url
|
||||
page.find_by_id(:q).set terms
|
||||
page.find_by_id(:search_button).click
|
||||
|
@ -36,7 +39,6 @@ feature 'search file on gestionnaire backoffice' do
|
|||
end
|
||||
|
||||
context 'when terms input does return result' do
|
||||
let!(:procedure) { create(:procedure, administrateur: administrateur) }
|
||||
let!(:dossier) { create(:dossier, :with_entreprise, procedure: procedure, state: 'initiated') }
|
||||
let!(:dossier_2) { create(:dossier, procedure: procedure, state: 'initiated', nom_projet: 'Projet de test') }
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ describe Administrateur, type: :model do
|
|||
end
|
||||
|
||||
describe 'assocations' do
|
||||
it { is_expected.to have_many(:gestionnaires) }
|
||||
it { is_expected.to have_and_belong_to_many(:gestionnaires) }
|
||||
it { is_expected.to have_many(:procedures) }
|
||||
end
|
||||
|
||||
|
|
|
@ -387,10 +387,14 @@ describe Dossier do
|
|||
let(:admin) { create(:administrateur) }
|
||||
let(:admin_2) { create(:administrateur) }
|
||||
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateur: admin) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateurs: [admin]) }
|
||||
let(:procedure_admin) { create(:procedure, administrateur: admin) }
|
||||
let(:procedure_admin_2) { create(:procedure, administrateur: admin_2) }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure_admin
|
||||
end
|
||||
|
||||
let!(:dossier1) { create(:dossier, procedure: procedure_admin, state: 'draft') }
|
||||
let!(:dossier2) { create(:dossier, procedure: procedure_admin, state: 'initiated') } #a_traiter
|
||||
let!(:dossier3) { create(:dossier, procedure: procedure_admin, state: 'initiated') } #a_traiter
|
||||
|
@ -432,8 +436,13 @@ describe Dossier do
|
|||
let(:administrateur_1) { create(:administrateur) }
|
||||
let(:administrateur_2) { create(:administrateur) }
|
||||
|
||||
let(:gestionnaire_1) { create(:gestionnaire, administrateur: administrateur_1) }
|
||||
let(:gestionnaire_2) { create(:gestionnaire, administrateur: administrateur_2) }
|
||||
let(:gestionnaire_1) { create(:gestionnaire, administrateurs: [administrateur_1]) }
|
||||
let(:gestionnaire_2) { create(:gestionnaire, administrateurs: [administrateur_2]) }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire_1, procedure: procedure_1
|
||||
create :assign_to, gestionnaire: gestionnaire_2, procedure: procedure_2
|
||||
end
|
||||
|
||||
let(:procedure_1) { create(:procedure, administrateur: administrateur_1) }
|
||||
let(:procedure_2) { create(:procedure, administrateur: administrateur_2) }
|
||||
|
|
|
@ -17,7 +17,7 @@ describe Gestionnaire, type: :model do
|
|||
end
|
||||
|
||||
describe 'association' do
|
||||
it { is_expected.to belong_to(:administrateur) }
|
||||
it { is_expected.to have_and_belong_to_many(:administrateurs) }
|
||||
it { is_expected.to have_many(:procedures) }
|
||||
it { is_expected.to have_many(:dossiers) }
|
||||
end
|
||||
|
@ -26,10 +26,15 @@ describe Gestionnaire, type: :model do
|
|||
let(:admin) { create :administrateur }
|
||||
let(:procedure) { create :procedure, administrateur: admin }
|
||||
let(:procedure_2) { create :procedure, administrateur: admin }
|
||||
let(:gestionnaire) { create :gestionnaire, procedure_filter: procedure_filter, administrateur: admin }
|
||||
let(:gestionnaire) { create :gestionnaire, procedure_filter: procedure_filter, administrateurs: [admin] }
|
||||
let!(:dossier) { create :dossier, procedure: procedure }
|
||||
let(:procedure_filter) { [] }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure_2
|
||||
end
|
||||
|
||||
subject { gestionnaire.dossiers_filter }
|
||||
|
||||
context 'before filter' do
|
||||
|
@ -47,7 +52,12 @@ describe Gestionnaire, type: :model do
|
|||
let(:admin) { create :administrateur }
|
||||
let!(:procedure) { create :procedure, administrateur: admin }
|
||||
let!(:procedure_2) { create :procedure, administrateur: admin }
|
||||
let(:gestionnaire) { create :gestionnaire, procedure_filter: procedure_filter, administrateur: admin }
|
||||
let(:gestionnaire) { create :gestionnaire, procedure_filter: procedure_filter, administrateurs: [admin] }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure_2
|
||||
end
|
||||
|
||||
let(:procedure_filter) { [] }
|
||||
|
||||
|
|
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
|
|
@ -6,9 +6,9 @@ describe 'admin/gestionnaires/index.html.haml', type: :view do
|
|||
|
||||
before do
|
||||
assign(:gestionnaires, (smart_listing_create :gestionnaires,
|
||||
admin.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true))
|
||||
admin.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true))
|
||||
assign(:gestionnaire, Gestionnaire.new())
|
||||
end
|
||||
|
||||
|
@ -21,12 +21,12 @@ describe 'admin/gestionnaires/index.html.haml', type: :view do
|
|||
|
||||
context 'Ajout d\'un accompagnateur' do
|
||||
before do
|
||||
create(:gestionnaire, administrateur: admin)
|
||||
create(:gestionnaire, administrateurs: [admin])
|
||||
admin.reload
|
||||
assign(:gestionnaires, (smart_listing_create :gestionnaires,
|
||||
admin.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true))
|
||||
admin.gestionnaires,
|
||||
partial: "admin/gestionnaires/list",
|
||||
array: true))
|
||||
render
|
||||
end
|
||||
it { expect(rendered).to match(/plop\d+@plop.com/) }
|
||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
|||
|
||||
describe 'backoffice/dossiers/index.html.haml', type: :view do
|
||||
let(:administrateur) { create(:administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateur: administrateur) }
|
||||
let(:gestionnaire) { create(:gestionnaire, administrateurs: [administrateur]) }
|
||||
|
||||
let!(:procedure) { create(:procedure, administrateur: administrateur) }
|
||||
|
||||
|
@ -10,6 +10,10 @@ describe 'backoffice/dossiers/index.html.haml', type: :view do
|
|||
let!(:decorate_dossier_replied) { create(:dossier, procedure: procedure, nom_projet: 'projet replied', state: 'replied').decorate }
|
||||
let!(:decorate_dossier_closed) { create(:dossier, procedure: procedure, nom_projet: 'projet closed', state: 'closed').decorate }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: procedure
|
||||
end
|
||||
|
||||
describe 'on tab a_traiter' do
|
||||
before do
|
||||
assign(:dossiers, (smart_listing_create :dossiers,
|
||||
|
|
|
@ -11,11 +11,15 @@ describe 'backoffice/procedure_filter/index.html.haml', type: :view do
|
|||
|
||||
context 'when gestionnaire have already check procedure' do
|
||||
let(:gestionnaire) { create(:gestionnaire,
|
||||
administrateur: administrateur,
|
||||
administrateurs: [administrateur],
|
||||
procedure_filter: [administrateur.procedures.first.id,
|
||||
administrateur.procedures.last.id]) }
|
||||
|
||||
before do
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: administrateur.procedures.first
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: administrateur.procedures.second
|
||||
create :assign_to, gestionnaire: gestionnaire, procedure: administrateur.procedures.last
|
||||
|
||||
sign_in gestionnaire
|
||||
|
||||
assign(:gestionnaire, gestionnaire)
|
||||
|
|
Loading…
Add table
Reference in a new issue