2017-06-29 15:30:42 +02:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe NewGestionnaire::ProceduresController, type: :controller do
|
2017-07-04 10:26:50 +02:00
|
|
|
describe "before_action: ensure_ownership!" do
|
|
|
|
it "is present" do
|
2017-06-29 15:30:42 +02:00
|
|
|
before_actions = NewGestionnaire::ProceduresController
|
|
|
|
._process_action_callbacks
|
|
|
|
.find_all{|process_action_callbacks| process_action_callbacks.kind == :before}
|
|
|
|
.map(&:filter)
|
|
|
|
|
|
|
|
expect(before_actions).to include(:ensure_ownership!)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-07-04 10:26:50 +02:00
|
|
|
describe "ensure_ownership!" do
|
2017-06-29 15:30:42 +02:00
|
|
|
let(:gestionnaire) { create(:gestionnaire) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
@controller.params[:procedure_id] = asked_procedure.id
|
|
|
|
expect(@controller).to receive(:current_gestionnaire).and_return(gestionnaire)
|
|
|
|
allow(@controller).to receive(:redirect_to)
|
|
|
|
|
|
|
|
@controller.send(:ensure_ownership!)
|
|
|
|
end
|
|
|
|
|
2017-07-04 10:26:50 +02:00
|
|
|
context "when a gestionnaire asks for its procedure" do
|
2017-06-29 15:30:42 +02:00
|
|
|
let(:asked_procedure) { create(:procedure, gestionnaires: [gestionnaire]) }
|
|
|
|
|
2017-07-04 10:26:50 +02:00
|
|
|
it "does not redirects nor flash" do
|
2017-06-29 15:30:42 +02:00
|
|
|
expect(@controller).not_to have_received(:redirect_to)
|
|
|
|
expect(flash.alert).to eq(nil)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-07-04 10:26:50 +02:00
|
|
|
context "when a gestionnaire asks for another procedure" do
|
2017-06-29 15:30:42 +02:00
|
|
|
let(:asked_procedure) { create(:procedure) }
|
|
|
|
|
2017-07-04 10:26:50 +02:00
|
|
|
it "redirects and flash" do
|
2017-06-29 15:30:42 +02:00
|
|
|
expect(@controller).to have_received(:redirect_to).with(root_path)
|
|
|
|
expect(flash.alert).to eq("Vous n'avez pas accès à cette procédure")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-07-04 13:52:08 +02:00
|
|
|
|
|
|
|
describe "#index" do
|
|
|
|
let(:gestionnaire) { create(:gestionnaire) }
|
|
|
|
subject { get :index }
|
|
|
|
|
|
|
|
context "when not logged" do
|
|
|
|
before { subject }
|
|
|
|
it { expect(response).to redirect_to(new_user_session_path)}
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when logged in" do
|
|
|
|
before { sign_in(gestionnaire) }
|
|
|
|
|
|
|
|
it { expect(response).to have_http_status(:ok) }
|
|
|
|
|
|
|
|
context "with procedures assigned" do
|
|
|
|
let(:procedure1) { create(:procedure, :published) }
|
|
|
|
let(:procedure2) { create(:procedure, :published, :archived) }
|
|
|
|
let(:procedure3) { create(:procedure) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
gestionnaire.procedures << procedure1
|
|
|
|
gestionnaire.procedures << procedure2
|
|
|
|
gestionnaire.procedures << procedure3
|
|
|
|
subject
|
|
|
|
end
|
|
|
|
|
|
|
|
it { expect(assigns(:procedures)).to include(procedure1, procedure2, procedure3) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with dossiers" do
|
|
|
|
let(:procedure) { create(:procedure, :published) }
|
|
|
|
let(:dossier) { create(:dossier, state: state, procedure: procedure) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
gestionnaire.procedures << procedure
|
|
|
|
dossier
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with draft state" do
|
|
|
|
let(:state) { "draft" }
|
|
|
|
before { subject }
|
|
|
|
|
|
|
|
it { expect(assigns(:dossiers_count_per_procedure)[procedure.id]).to eq(nil) }
|
|
|
|
it { expect(assigns(:dossiers_nouveaux_count_per_procedure)[procedure.id]).to eq(nil) }
|
|
|
|
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure.id]).to eq(nil) }
|
|
|
|
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure.id]).to eq(nil) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with not draft state on multiple procedures" do
|
|
|
|
let(:procedure2) { create(:procedure, :published) }
|
|
|
|
let(:state) { "initiated" }
|
|
|
|
|
|
|
|
before do
|
|
|
|
gestionnaire.procedures << procedure2
|
|
|
|
create(:dossier, procedure: procedure, state: "replied")
|
|
|
|
create(:dossier, procedure: procedure2, state: "updated")
|
|
|
|
create(:dossier, procedure: procedure, state: "received")
|
|
|
|
create(:dossier, procedure: procedure2, state: "closed")
|
|
|
|
create(:dossier, procedure: procedure, state: "without_continuation", archived: true)
|
|
|
|
gestionnaire.followed_dossiers << create(:dossier, procedure: procedure2, state: "refused")
|
|
|
|
subject
|
|
|
|
end
|
|
|
|
|
|
|
|
it { expect(assigns(:dossiers_count_per_procedure)[procedure.id]).to eq(4) }
|
|
|
|
it { expect(assigns(:dossiers_nouveaux_count_per_procedure)[procedure.id]).to eq(1) }
|
|
|
|
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure.id]).to eq(nil) }
|
|
|
|
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure.id]).to eq(1) }
|
|
|
|
|
|
|
|
it { expect(assigns(:dossiers_count_per_procedure)[procedure2.id]).to eq(3) }
|
|
|
|
it { expect(assigns(:dossiers_nouveaux_count_per_procedure)[procedure2.id]).to eq(nil) }
|
|
|
|
it { expect(assigns(:followed_dossiers_count_per_procedure)[procedure2.id]).to eq(1) }
|
|
|
|
it { expect(assigns(:dossiers_archived_count_per_procedure)[procedure2.id]).to eq(nil) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-06-29 15:30:42 +02:00
|
|
|
end
|