Merge branch 'assign_to_procedure' into develop

# Conflicts:
#	db/schema.rb
This commit is contained in:
Xavier J 2016-05-24 17:19:32 +02:00
commit e973286766
39 changed files with 578 additions and 101 deletions

View 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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
FactoryGirl.define do
factory :assign_to do
end
end

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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') }

View file

@ -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

View file

@ -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) }

View file

@ -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) { [] }

View 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

View 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

View file

@ -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/) }

View file

@ -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,

View file

@ -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)