demarches-normaliennes/spec/controllers/backoffice/dossiers_controller_spec.rb

312 lines
7.7 KiB
Ruby
Raw Normal View History

2016-11-14 18:36:09 +01:00
require 'spec_helper'
2015-09-22 15:00:59 +02:00
describe Backoffice::DossiersController, type: :controller do
before do
2016-09-01 10:27:22 +02:00
@request.env['HTTP_REFERER'] = TPS::Application::URL
end
let(:procedure) { create :procedure }
2016-12-01 18:05:49 +01:00
let(:dossier) { create(:dossier, :with_entreprise, procedure: procedure, state: :initiated) }
let(:dossier_archived) { create(:dossier, :with_entreprise, archived: true) }
2015-09-22 15:00:59 +02:00
let(:dossier_id) { dossier.id }
let(:bad_dossier_id) { Dossier.count + 10 }
let(:gestionnaire) { create(:gestionnaire, administrateurs: [create(:administrateur)]) }
2015-09-22 15:00:59 +02:00
before do
create :assign_to, procedure: procedure, gestionnaire: gestionnaire
end
2016-12-14 18:41:33 +01:00
describe 'GET #index' do
subject { get :index }
before do
sign_in gestionnaire
end
context 'when gestionnaire is assign to a procedure' do
it { is_expected.to redirect_to backoffice_dossiers_procedure_path(id: procedure.id) }
end
context 'when gestionnaire is not assign to a procedure' do
before do
AssignTo.where(procedure: procedure, gestionnaire: gestionnaire).delete_all
end
it { is_expected.to redirect_to root_path }
end
end
2015-09-22 15:00:59 +02:00
describe 'GET #show' do
subject { get :show, params: {id: dossier_id} }
2015-11-02 16:36:52 +01:00
context 'gestionnaire is connected' do
2015-09-22 15:00:59 +02:00
before do
sign_in gestionnaire
end
it 'returns http success' do
expect(subject).to have_http_status(200)
2015-09-22 15:00:59 +02:00
end
describe 'all notifications unread are changed' do
it do
expect(Notification).to receive(:where).with(dossier_id: dossier_id).and_return(Notification::ActiveRecord_Relation)
expect(Notification::ActiveRecord_Relation).to receive(:update_all).with(already_read: true).and_return(true)
subject
2015-12-02 18:17:47 +01:00
end
end
context ' when dossier is archived' do
let(:dossier_id) { dossier_archived }
it { expect(subject).to redirect_to('/backoffice') }
end
2015-12-02 18:17:47 +01:00
context 'when dossier id does not exist' do
let(:dossier_id) { bad_dossier_id }
it { expect(subject).to redirect_to('/backoffice') }
2015-09-22 15:00:59 +02:00
end
end
2015-12-02 18:17:47 +01:00
context 'gestionnaire does not connected but dossier id is correct' do
2017-01-03 11:38:39 +01:00
it { is_expected.to redirect_to('/users/sign_in') }
2015-09-22 15:00:59 +02:00
end
end
describe 'GET #a_traiter' do
context 'when gestionnaire is connected' do
before do
sign_in gestionnaire
end
it 'returns http success' do
get :index, params: {liste: :a_traiter}
2016-12-01 18:05:49 +01:00
expect(response).to have_http_status(302)
end
end
end
describe 'GET #fige' do
context 'when gestionnaire is connected' do
before do
sign_in gestionnaire
end
it 'returns http success' do
get :index, params: {liste: :fige}
2016-12-01 18:05:49 +01:00
expect(response).to have_http_status(302)
end
end
end
describe 'GET #termine' do
context 'when gestionnaire is connected' do
before do
sign_in gestionnaire
end
it 'returns http success' do
get :index, params: {liste: :termine}
2016-12-01 18:05:49 +01:00
expect(response).to have_http_status(302)
end
end
end
describe 'GET #list_fake' do
context 'when gestionnaire is connected' do
before do
sign_in gestionnaire
end
it 'returns http success' do
get :index, params: {liste: :list_fake}
2016-12-01 18:05:49 +01:00
expect(response).to redirect_to(backoffice_dossiers_procedure_path(id: gestionnaire.procedures.first.id))
end
end
end
describe 'POST #search' do
before do
sign_in gestionnaire
end
it 'returns http success' do
post :search, params: {search_terms: 'test'}
expect(response).to have_http_status(200)
end
end
describe 'POST #valid' do
2015-11-02 16:36:52 +01:00
before do
dossier.initiated!
sign_in gestionnaire
end
subject { post :valid, params: {dossier_id: dossier_id} }
2015-12-02 18:17:47 +01:00
it 'change state to validated' do
subject
2015-11-02 16:36:52 +01:00
dossier.reload
expect(dossier.state).to eq('validated')
end
it 'Notification email is send' do
expect(NotificationMailer).to receive(:dossier_validated).and_return(NotificationMailer)
expect(NotificationMailer).to receive(:deliver_now!)
subject
end
it { is_expected.to redirect_to backoffice_dossier_path(id: dossier.id) }
end
describe 'POST #receive' do
2015-11-02 16:36:52 +01:00
before do
dossier.submitted!
sign_in gestionnaire
end
subject { post :receive, params: {dossier_id: dossier_id} }
2016-09-01 10:27:22 +02:00
context 'when it post a receive instruction' do
before do
subject
dossier.reload
end
it 'change state to received' do
expect(dossier.state).to eq('received')
end
end
it 'Notification email is send' do
expect(NotificationMailer).to receive(:dossier_received).and_return(NotificationMailer)
expect(NotificationMailer).to receive(:deliver_now!)
subject
end
it { is_expected.to redirect_to backoffice_dossier_path(id: dossier.id) }
end
describe 'POST #refuse' do
before do
dossier.refused!
sign_in gestionnaire
end
subject { post :refuse, params: {dossier_id: dossier_id} }
it 'change state to refused' do
subject
dossier.reload
expect(dossier.state).to eq('refused')
end
it 'Notification email is sent' do
expect(NotificationMailer).to receive(:dossier_refused).and_return(NotificationMailer)
expect(NotificationMailer).to receive(:deliver_now!)
subject
end
it { is_expected.to redirect_to backoffice_dossier_path(id: dossier.id) }
end
describe 'POST #without_continuation' do
before do
dossier.without_continuation!
sign_in gestionnaire
end
subject { post :without_continuation, params: {dossier_id: dossier_id} }
it 'change state to without_continuation' do
subject
dossier.reload
expect(dossier.state).to eq('without_continuation')
end
it 'Notification email is sent' do
expect(NotificationMailer).to receive(:dossier_without_continuation).and_return(NotificationMailer)
expect(NotificationMailer).to receive(:deliver_now!)
subject
end
it { is_expected.to redirect_to backoffice_dossier_path(id: dossier.id) }
end
describe 'POST #close' do
before do
dossier.received!
sign_in gestionnaire
end
subject { post :close, params: {dossier_id: dossier_id} }
2015-12-02 18:17:47 +01:00
it 'change state to closed' do
subject
2015-11-02 16:36:52 +01:00
dossier.reload
expect(dossier.state).to eq('closed')
end
it 'Notification email is sent' do
expect(NotificationMailer).to receive(:dossier_closed).and_return(NotificationMailer)
expect(NotificationMailer).to receive(:deliver_now!)
subject
end
it { is_expected.to redirect_to backoffice_dossier_path(id: dossier.id) }
end
describe 'PUT #toggle_follow' do
before do
sign_in gestionnaire
end
subject { put :follow, params: {dossier_id: dossier_id} }
it { expect(subject.status).to eq 302 }
context 'when dossier is at state initiated' do
let(:dossier) { create(:dossier, :with_entreprise, procedure: procedure, state: 'initiated') }
before do
subject
dossier.reload
end
it 'change state for updated' do
expect(dossier.state).to eq 'updated'
end
end
describe 'flash alert' do
context 'when dossier is not follow by gestionnaire' do
before do
subject
end
it { expect(flash[:notice]).to have_content 'Dossier suivi' }
end
context 'when dossier is follow by gestionnaire' do
before do
create :follow, gestionnaire_id: gestionnaire.id, dossier_id: dossier.id
subject
end
it { expect(flash[:notice]).to have_content 'Dossier relaché' }
end
end
end
2015-09-22 15:00:59 +02:00
end